IPv6 tunnelling - XIYO/asuswrt-merlin.ng-kr GitHub Wiki
์๊ฐ
Asuswrt๋ IPv4๋ง ์ง์ํ๋ ISP๋ฅผ ํตํด IPv6 ์ง์์ ์ป์ ์ ์๊ฒ ํด์ฃผ๋ ๋ค์ํ ํฐ๋๋ง ๋ฐฉ๋ฒ์ ๋ด์ฅํ๊ณ ์์ต๋๋ค. Hurricane Electric์์ ์ ๊ณตํ๋ 6in4 ํฐ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.### Hurricane Electric (๋ณ๋ช TunnelBroker) ์๋น์ค
Hurricane Electric๊ณผ ํจ๊ป ํฐ๋์ ๋ฑ๋กํ๋ ๊ฒ์ ๋ฌด๋ฃ์ด๋ฉฐ ๊ฐ๋จํฉ๋๋ค. ๊ทธ๋ค์ ๋ผ์ฐํ ๋ /64 ๋ธ๋ก์ ์ ๊ณตํ ๊ฒ์ ๋๋ค (์ฆ, ์์ฒด ์ ์ ๋ฐ ์์ ํ ๋ผ์ฐํ ๋ 2^64 IP ๋ธ๋ก์ ์ป๊ฒ ๋ฉ๋๋ค). ํ์ํ ๊ฒฝ์ฐ ๋ ํฐ ๋ธ๋ก์ ์์ฒญํ ์๋ ์์ต๋๋ค (์๋ฅผ ๋ค์ด ์ถ๊ฐ ์๋ธ๋ทํ ์ ์ํํ๋ ค๋ ๊ฒฝ์ฐ).
๋ผ์ฐํฐ ์ค์ ์ ์๋นํ ๊ฐ๋จํฉ๋๋ค. IPv6 ์น์ ์์ ๋จ์ํ 6in4 ์ต์ ์ ์ ํํ๊ณ HE์์ ์ ๊ณตํ๋ ์ ๋ณด๋ฅผ ์ ๋ ฅํ์ญ์์ค:
- IPv4 ์๊ฒฉ ์๋ํฌ์ธํธ = TunnelBroker์ ์๋ฒ IPv4 ์ฃผ์
- IPv6 ํด๋ผ์ด์ธํธ IP = ํด๋ผ์ด์ธํธ IPv6 ์ฃผ์ (๋์ /64๊ฐ ์๋ ์ํ๋ก ์ ๋ ฅ - ์ด๋ ์๋์์ ์ ๋ ฅ๋จ)
- IPv6 ์ ๋์ฌ ๊ธธ์ด๋ 64๊ฐ ๋ ๊ฒ์ ๋๋ค.
- IPv6 ์ ๋์ฌ = ๋ผ์ฐํ ๋ /64: (๋์ /64๊ฐ ์๋ ์ํ๋ก)
- ์ ๋์ฌ ๊ธธ์ด๋ 64๊ฐ ๋ ๊ฒ์ ๋๋ค.
- IPv6 DNS ์๋ฒ 1์ ์ ํ ์ฌํญ์ ๋๋ค (ISP์ DNS๊ฐ IPv6 ํด๊ฒฐ์ ์ง์ํ๋ ๊ฒฝ์ฐ), ๊ทธ๋ ์ง ์์ผ๋ฉด Anycasted IPv6 ์บ์ฑ ๋ค์์๋ฒ๋ฅผ ์ ๋ ฅํ์ญ์์ค.
๋ผ์ฐํฐ ์ค์ ํ์ด์ง = HE ์ฌ์ดํธ ์ค์ ํ์ด์ง
- ์๋ฒ IPv4 ์ฃผ์ = Tunnel Details IPv6 Tunnel ํญ์ Server IPv4 ์ฃผ์ ์ฌ์ฉ
- ํด๋ผ์ด์ธํธ IPv6 ์ฃผ์ = Tunnel Details IPv6 Tunnel ํญ์ Client IPv6 ์ฃผ์ ์ฌ์ฉ
- IPv6 ์ ๋์ฌ ๊ธธ์ด = 64 ์ฌ์ฉ
- ์๋ฒ IPv6 ์ฃผ์ = Tunnel Details IPv6 Tunnel ํญ์ Server IPv6 ์ฃผ์ ์ฌ์ฉ
- ํฐ๋ MTU = Tunnel Details Advanced ํญ์ MTU ์ฌ์ฉ
- ํฐ๋ TTL = ๋ผ์ฐํฐ ๊ธฐ๋ณธ ์ค์ ์ด ์ ํฉํฉ๋๋ค.
- LAN ์ ๋์ฌ ๊ธธ์ด = 48 ์ฌ์ฉ
- LAN IPv6 ์ ๋์ฌ = ๋ธ๋ก ๊ฐ์ ธ์ค๊ธฐ ๋ฒํผ์ ๋๋ฌ ํ๋ฆฌํฝ์ค xxxx:xxx:xxxx::๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๋ํ ๋ฐ๋์ ๋ผ์ฐํฐ ๊ด๊ณ ๋ฅผ ํ์ฑํํ์ญ์์ค. ์ด๊ฒ์ LAN์ ์ฅ์น์ ์๋์ผ๋ก IPv6 ์ฃผ์๋ฅผ ํ ๋นํ๊ณ ๋ผ์ฐํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค (IPv4์ DHCP์ ์ ์ฌํ์ง๋ง ๋ ๊ณ ๊ธ์ ๋๋ค).
๋ค์ ๋จ๊ณ: ํ์ฌ IPv4 ์ฃผ์๋ฅผ Hurricane Electric์ ์๋ ค์ผ ํฉ๋๋ค. ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ๋ผ์ฐํฐ์ DDNS ํญ์์ TunnelBroker ์ต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ผ์ฐํฐ์ Trial ๋ฒํผ์ ์ฌ์ฉํ์ฌ ๊ณ์ ์ ๋ง๋๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๊ฒ์ HE์๊ฒ IP ๋ณ๊ฒฝ์ ๋ํด ์๋ ค์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
๋ผ์ฐํฐ DDNS ํ์ด์ง ์ค์
- ํธ์คํธ ์ด๋ฆ = Tunnel Details IPv6 Tunnel ํญ์ ํฐ๋ ID ์ฌ์ฉ: "xxxxxx"
- ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ ์ฃผ์ = HE ๋ฉ์ธ ํ์ด์ง์ ๋ก๊ทธ์ธํ ํ ๋ฉ์ธ ํ์ด์ง์์ ์ฌ์ฉ์ ID "xxxxxxxxxxxxxxxx.xxxxxxxx" ์ฌ์ฉ
- ๋น๋ฐ๋ฒํธ ๋๋ DDNS ํค = Tunnel Details Advanced ํญ์ ์ ๋ฐ์ดํธ ํค ์ฌ์ฉ
- ์ผ๋ฐ์ ์ธ DDNS ์๋น์ค๋ฅผ ์ํด DDNS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ์ ๋์ฒดํ ์ ์์ต๋๋ค.### ํฐ๋ ์๋ํฌ์ธํธ ์ ๋ฐ์ดํธ ์คํฌ๋ฆฝํธ ๊ตฌ์ฑ
384.15 ์ด์ ๋ฒ์ ์ฉ
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก, JFFS ํํฐ์
๋ฐ ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ ๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ ๋๋๋ฉด ํ์ฌ WAN IP๋ฅผ ์ฌ์ฉํ์ฌ HE๋ฅผ ์
๋ฐ์ดํธํ๋ /jffs/scripts/wan-event
์ฌ์ฉ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๋ค์์ ์์ ์คํฌ๋ฆฝํธ์
๋๋ค:
์ฐธ๊ณ : ํฐ๋์ด 2014๋ 1์ 19์ผ ์ด์ ์ ๋ง๋ค์ด์ง ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ ๋ด์ ๋ ๋ฒ์งธ wget ๋ผ์ธ์ ์ฃผ์ ์ฒ๋ฆฌํ๊ณ ์ฒซ ๋ฒ์งธ ๋ผ์ธ์ ์ฃผ์ ํด์ ํด์ผ ํฉ๋๋ค. ์ด๋ ์ด์ ํฐ๋์์ md5๋ก ์ํธํ๋ ๋น๋ฐ๋ฒํธ๊ฐ ํ์ํ๊ณ ์๋ก์ด ํฐ๋์์๋ ํฐ๋ ์ ๋ฐ์ดํธ ํค๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ธํ API ์ ๋ณด๋ ์น์ฌ์ดํธ์์ ํ์ธํ์ญ์์ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ํ์ธํ์ญ์์ค.
#!/bin/sh
#
# v1.40-rm3 2017๋
10์ 31์ผ
# v1.41-gunnyst 2018๋
5์ 2์ผ
#
# ***************************
# ์ค์
# ***************************
USERNAME="๊ณ์ ์ ๋ก๊ทธ์ธํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ด๋ฆ"
PASSWORD="๊ณ ๊ธ ํญ์์ ์ ์ํ 'Update Key' (์๋ก์ด ํฐ๋) ๋๋ ๋น๋ฐ๋ฒํธ (์ด์ ํฐ๋)"
TUNNEL_ID="IPv6 ํฐ๋ ํญ์์ ์ ์ํ 'ํฐ๋ ID'"
TUNNEL_TYPE="new" # ์๋ก์ด/์ด์ ํฐ๋ ์ ํ
# ***************************
# ๊ณ ๊ธ ์ค์
# ***************************
# ์ ํ์ ์ค์
LOGFILE="/tmp/ipv6.log"
TIMEOUT="10" # ์๋์ WGET์ด ๋ ์ค๋ ๊ฑธ๋ฆด ๊ฒฝ์ฐ IPTABLES์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.
```# WAN์ด 'eth0'๋ก ๊ตฌ์ฑ๋์๋ค๊ณ ๊ฐ์ ํ๋ฉด, ์ด๊ฒ์ ๋น ๋ฅด๊ณ ์ ๋ขฐ์ฑ ์๊ฒ ๊ณต์ฉ WAN IP ์ฃผ์๋ฅผ ์ ๊ณตํ ๊ฒ์
๋๋ค.
PUBLIC_IP=$(ip addr show ppp0 | awk '/inet /{gsub(/.*t/,"",$2);print$2}')
PUBLIC_IP=${PUBLIC_IP%/*}
# HE์ ์๋ํฌ์ธํธ ํ์ธ ์๋ฒ์์ PING์ ์๋ฝํฉ๋๋ค.
#
# ์ฐธ๊ณ : https://www.tunnelbroker.net์์ ๊ณต์ฉ IP๋ฅผ ์๋์ผ๋ก ์ค์ ํ๋ ค๊ณ ํ๋ฉด
# ASUSWRT๋ฅผ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์คํํ๋ ํ ๊ณต์ฉ IP์ PING์ ํ ์ ์๋ค๋ ์๋ฆผ์ด ํ์๋ฉ๋๋ค.
#
iptables -I INPUT 1 -s 66.220.2.74 -p icmp -j ACCEPT
# ***************************
# ํฐ๋ ์๋ํฌ์ธํธ ์
๋ฐ์ดํธ
# ***************************# IP ์
๋ฐ์ดํธ...
if [ "$2" = "connected" ]; then
sleep 10
if [ "${TUNNEL_TYPE}" = "new" ]; then
# ...์๋ก์ด ํฐ๋์ ๊ฒฝ์ฐ...
if [ -z "${PUBLIC_IP}" ]; then
wget --no-check-certificate --quiet --inet4-only --timeout=${TIMEOUT} -a - --output-document=${LOGFILE} "https://ipv4.tunnelbroker.net/nic/update?username=${USERNAME}&password=${PASSWORD}&hostname=${TUNNEL_ID}" 2>&1
else
wget --no-check-certificate --quiet --inet4-only --timeout=${TIMEOUT} -a - --output-document=${LOGFILE} "https://ipv4.tunnelbroker.net/nic/update?username=${USERNAME}&password=${PASSWORD}&hostname=${TUNNEL_ID}&myip=${PUBLIC_IP}" 2>&1
fi
else
# ...๋๋ ์ด์ ํฐ๋์ ๊ฒฝ์ฐ
# ํ๋ฌธ ๋น๋ฐ๋ฒํธ์ ํด์ ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.
MD5PASSWD=`echo -n ${PASSWORD} | md5sum | sed -e 's/ -//g'`
if [ -z "${PUBLIC_IP}" ]; then
wget --no-check-certificate --quiet --inet4-only --timeout=${TIMEOUT} -a - --output-document=${LOGFILE} "https://ipv4.tunnelbroker.net/nic/update?username=${USERNAME}&password=${MD5PASSWD}&hostname=${TUNNEL_ID}" 2>&1
else
wget --no-check-certificate --quiet --inet4-only --timeout=${TIMEOUT} -a - --output-document=${LOGFILE} "https://ipv4.tunnelbroker.net/nic/update?username=${USERNAME}&password=${MD5PASSWD}&hostname=${TUNNEL_ID}&myip=${PUBLIC_IP}" 2>&1
fi
fi
fi
๊ทธ๋ฆฌ๊ณ ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ผ ํฉ๋๋ค:
chmod +x /jffs/scripts/wan-event
์๋จ์ ์ฒซ 3๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ์ญ์์ค: ์ฌ์ฉ์ ์ด๋ฆ, ๋น๋ฐ๋ฒํธ (์ด์ ํฐ๋์ ๊ฒฝ์ฐ) ๋๋ ์ ๋ฐ์ดํธ ํค (์๋ก์ด ํฐ๋์ ๊ฒฝ์ฐ), ํฐ๋ ID. ๊ทธ๋ฐ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์๋์ผ๋ก ์คํํ ๋ค์ /tmp/ipv6.log์ ๊ณต์ฉ IPv4 ์ฃผ์๊ฐ ์๋์ง ํ์ธํ์ฌ ์คํฌ๋ฆฝํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ ํ http://www.whatismyipv6.com ๊ฐ์ ์น ์ฌ์ดํธ์ ์ ์ํ์ฌ ํฐ๋์ ํ
์คํธํ ์ ์์ต๋๋ค. ๋ง์ฝ IPv6(์ฆ, ๊ธด 16์ง์ ๋ฌธ์์ด)๋ฅผ ๋ณธ๋ค๋ฉด, ์ถํํฉ๋๋ค - ์ค์ ์ด ์๋ฃ๋์์ต๋๋ค!#### 384.14 ๋ฐ ์ด์ ๋ฒ์ ์ฉ
wan-event
๋์ /jffs/scripts/wan-start
์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ญ๋๋ค.
#!/bin/sh
#
# v1.40-rm3 2017๋
10์ 31์ผ
# v1.41-gunnyst 2018๋
5์ 2์ผ
#
# ***************************
# ์ค์
# ***************************
USERNAME="๊ณ์ ์ ๋ก๊ทธ์ธํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ด๋ฆ"
PASSWORD="๊ณ ๊ธ ํญ์์ ์ ์ํ 'Update Key' (์๋ก์ด ํฐ๋) ๋๋ ๋น๋ฐ๋ฒํธ (์ด์ ํฐ๋)"
TUNNEL_ID="IPv6 ํฐ๋ ํญ์์ ์ ์ํ 'ํฐ๋ ID'"
TUNNEL_TYPE="new" # ์๋ก์ด/์ด์ ํฐ๋ ์ ํ
# ***************************
# ๊ณ ๊ธ ์ค์
# ***************************
# ์ ํ์ ์ค์
LOGFILE="/tmp/ipv6.log"
TIMEOUT="10" # ์๋์ WGET์ด ๋ ์ค๋ ๊ฑธ๋ฆด ๊ฒฝ์ฐ IPTABLES์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.
# WAN์ด 'eth0'๋ก ๊ตฌ์ฑ๋์๋ค๊ณ ๊ฐ์ ํ๋ฉด, ์ด๊ฒ์ ๋น ๋ฅด๊ณ ์ ๋ขฐ์ฑ ์๊ฒ ๊ณต์ฉ WAN IP ์ฃผ์๋ฅผ ์ ๊ณตํ ๊ฒ์
๋๋ค.
PUBLIC_IP=$(ip addr show ppp0 | awk '/inet /{gsub(/.*t/,"",$2);print$2}')
PUBLIC_IP=${PUBLIC_IP%/*}
# HE์ ์๋ํฌ์ธํธ ํ์ธ ์๋ฒ์์ PING์ ์๋ฝํฉ๋๋ค.
#
# ์ฐธ๊ณ : https://www.tunnelbroker.net์์ ๊ณต์ฉ IP๋ฅผ ์๋์ผ๋ก ์ค์ ํ๋ ค๊ณ ํ๋ฉด
# ASUSWRT๋ฅผ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์คํํ๋ ํ ๊ณต์ฉ IP์ PING์ ํ ์ ์๋ค๋ ์๋ฆผ์ด ํ์๋ฉ๋๋ค.
#
iptables -I INPUT 1 -s 66.220.2.74 -p icmp -j ACCEPT
# ***************************
# ํฐ๋ ์๋ํฌ์ธํธ ์
๋ฐ์ดํธ
# ***************************
```# IP ์
๋ฐ์ดํธ...
if [ "${TUNNEL_TYPE}" = "new" ]; then
# ... ์๋ก์ด ํฐ๋์ ๊ฒฝ์ฐ ...
if [ -z "${PUBLIC_IP}" ]; then
wget --no-check-certificate --quiet --inet4-only --timeout=${TIMEOUT} -a - --output-document=${LOGFILE} "https://ipv4.tunnelbroker.net/nic/update?username=${USERNAME}&password=${PASSWORD}&hostname=${TUNNEL_ID}" 2>&1
else
wget --no-check-certificate --quiet --inet4-only --timeout=${TIMEOUT} -a - --output-document=${LOGFILE} "https://ipv4.tunnelbroker.net/nic/update?username=${USERNAME}&password=${PASSWORD}&hostname=${TUNNEL_ID}&myip=${PUBLIC_IP}" 2>&1
fi
else
# ... ๋๋ ์ด์ ํฐ๋์ ๊ฒฝ์ฐ
# ํ๋ฌธ ๋น๋ฐ๋ฒํธ์ ํด์ ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.
MD5PASSWD=`echo -n ${PASSWORD} | md5sum | sed -e 's/ -//g'`
if [ -z "${PUBLIC_IP}" ]; then
wget --no-check-certificate --quiet --inet4-only --timeout=${TIMEOUT} -a - --output-document=${LOGFILE} "https://ipv4.tunnelbroker.net/nic/update?username=${USERNAME}&password=${MD5PASSWD}&hostname=${TUNNEL_ID}" 2>&1
else
wget --no-check-certificate --quiet --inet4-only --timeout=${TIMEOUT} -a - --output-document=${LOGFILE} "https://ipv4.tunnelbroker.net/nic/update?username=${USERNAME}&password=${MD5PASSWD}&hostname=${TUNNEL_ID}&myip=${PUBLIC_IP}" 2>&1
fi
fi
๊ทธ๋ฆฌ๊ณ ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ง๋ฅผ ์์ง ๋ง์ญ์์ค:
chmod +x /jffs/scripts/wan-start
๊ฒฐ๋ก
์ด๊ฒ์ผ๋ก ๋๋ต ๋๋ฌ์ต๋๋ค. ISP๊ฐ ์ ๊ณตํ๋ ๊ฒ๊ณผ ์๊ด์์ด IPv6๋ฅผ ์ตํ๋ ๋ฐ ํฐ๋์ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.