두 호스트에 호스트 전용 IPv6 네트워크를 생성한 다음 호스트 간에 라우팅하고 싶습니다. 각 호스트에는 에 가상 인터페이스가 있습니다
ipv6_prefix::9
. 인터페이스에 ping을 보낼 수 있기를 원합니다.
다른주인.
입증된 모범 사례가 있습니까? 6'4 터널로 이 작업을 수행하는 것이 합리적으로 보입니다.
아래에서는 터널링에 6in4를 사용하여 최근 EC2에서 시도한 설정을 살펴보겠습니다. 두 호스트는 10.239.143.35
및 입니다 10.238.249.113
. 먼저 가상 인터페이스를 설정해 보겠습니다. 우리는 다음 Bash 기능을 사용할 것입니다:
function dummy {
local name="$1" ipv6="$2"
ip link add "$name" type dummy
ip -6 addr add "$ipv6" dev "$name"
ip link set "$name" up
}
function calc6to4 {
printf '2002:%02x%02x:%02x%02x::\n' $(tr '.' ' ' <<<"$@")
}
function eth0ipv4 {
ip addr list dev eth0 | egrep -o 'inet [^/]+' | head -n1 | cut -d' ' -f2
}
(셸 세션에 직접 붙여넣을 수 있습니다.)
첫 번째 호스트에서는 다음을 실행합니다.
:; ipv4="$(eth0ipv4)"
:; ipv6="$(calc6to4 "$ipv4")"
:; echo "ipv4 = $ipv4" "ipv6 = $ipv6"
ipv4 = 10.239.143.35 ipv6 = 2002:0aef:8f23::
:; dummy dummy9 "$ipv6"9
:; ip addr show dev dummy9
69: dummy9: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether e2:69:75:10:04:2c brd ff:ff:ff:ff:ff:ff
inet6 2002:aef:8f23::9/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::e069:75ff:fe10:42c/64 scope link
valid_lft forever preferred_lft forever
Ping이 제대로 작동하는 것 같습니다.
:; ping6 -q -c1 "$ipv6"9
PING 2002:0aef:8f23::9(2002:aef:8f23::9) 56 data bytes
--- 2002:0aef:8f23::9 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.040/0.040/0.040/0.000 ms
이제 두 번째 호스트에 연결됩니다.
:; ipv4="$(eth0ipv4)"
:; ipv6="$(calc6to4 "$ipv4")"
:; echo "ipv4 = $ipv4" "ipv6 = $ipv6"
ipv4 = 10.238.249.113 ipv6 = 2002:0aee:f971::
:; dummy dummy9 "$ipv6"9
핑 확인 결과:
:; ping6 -q -c1 "$ipv6"9
PING 2002:0aee:f971::9(2002:aee:f971::9) 56 data bytes
--- 2002:0aee:f971::9 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.037/0.037/0.037/0.000 ms
이제 흥미로운 시간이 왔습니다. 호스트를 6in4 터널로 연결하는 것입니다. 두 호스트 모두에서 다음 Bash 기능을 사용합니다.
function tunnel {
local name="$1" self_ipv4="$2" ipv4="$3" ipv6="$4"
ip tunnel add "$name" mode sit ttl 64 remote "$ipv4" local "$self_ipv4"
ip -6 addr add "$ipv6"1 dev "$name"
ip -6 route add "$ipv6"/64 dev "$name" metric 1
ip link set "$name" up
}
첫 번째 호스트에서:
################################### IPv4 and IPv6 from host 2 ##
:; tunnel tun6in4 10.239.143.35 10.238.249.113 2002:0aee:f971::
두 번째에 관해서 :
################################### IPv4 and IPv6 from host 1 ##
:; tunnel tun6in4 10.238.249.113 10.239.143.35 2002:0aef:8f23::
첫 번째 호스트에서 두 번째 가상 장치에 대한 바인딩까지의 경로를 찾으려고 하면 2002:aee:f971::9
다음과 같은 결과를 얻습니다.
:; ip -6 route get 2002:aee:f971::9
2002:aee:f971::9 from :: dev tun6in4 src 2002:aee:f971::1 metric 0
cache
하지만 핑이 작동하지 않습니다.
:; ping6 -q -c1 2002:aee:f971::9
PING 2002:aee:f971::9(2002:aee:f971::9) 56 data bytes
--- 2002:aee:f971::9 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
주소를 추가해야 할까요 eth0
?
답변1
간단한 ping 테스트가 작동하려면 터널의 대상 호스트(피어)가 아닌 소스 호스트에 IPv6 주소가 있어야 합니다.
function tunnel {
local name="$1" self_ipv4="$2" self_ipv6="$3" ipv4="$4" ipv6="$5"
ip tunnel add "$name" mode sit ttl 64 remote "$ipv4" local "$self_ipv4"
ip -6 addr add "$self_ipv6"1 dev "$name"
ip -6 route add "$ipv6"/64 dev "$name" metric 1
ip link set "$name" up
}
터널 설정 명령은 다음과 같습니다.
:; tunnel tun6in4 10.239.143.35 2002:0aef:8f23:: 10.238.249.113 2002:0aee:f971::
:; tunnel tun6in4 10.238.249.113 2002:0aee:f971:: 10.239.143.35 2002:0aef:8f23::