IPv6용 Linux에서 GUE 수신 터널을 구성하는 방법

IPv6용 Linux에서 GUE 수신 터널을 구성하는 방법

GUE 캡슐화 IPv4 패킷이 포함된 IPv6 패킷을 수신하도록 GUE 터널을 구성하려고 하는데 패킷 캡슐화를 해제하는 데 문제가 있습니다. IPv6 패킷에는 내부에 IPv4 패킷이 있는 GUE 캡슐화된 패킷이 있습니다. 내 쪽에서 수신 터널을 설정했습니다.

sysctl net.ipv4.conf.all.rp_filter=2
modprobe fou
modprobe fou6
ip -6 fou add port 42428 gue -6
ip addr add $VIP/32 dev ip6tnl0
ip -6 link set ip6tnl0 up

결과 ip6tnl0은 다음과 같습니다.

4: ip6tnl0@NONE: <NOARP,UP,LOWER_UP> mtu 1452 qdisc noqueue state UNKNOWN group default qlen 1000
    link/tunnel6 :: brd ::
    inet $VIP/32 scope global ip6tnl0
       valid_lft forever preferred_lft forever
    inet6 $LINK_LOCAL/64 scope link
       valid_lft forever preferred_lft forever

내 다른 컴퓨터에서는 IPv4 주소인 $VIP를 컬링할 수 있고 내 컴퓨터에서는 tcp-dump를 통해 캡슐화된 패킷을 볼 수 있습니다.

tcpdump: listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
21:32:09.183750 IP6 (hlim 60, next-header UDP (17) payload length: 72) $IPV6_A.53322 > $IPV6_B.42428: [udp sum ok] UDP, length 64

따라서 해당 UDP 패킷이 제대로 디캡핑되면 $VIP의 소스 IPv4와 일치하는 IPv4 패킷이 포함될 것으로 예상됩니다. 하지만 내가 달릴 때

tcpdump -i any host $VIP -n

아무것도 보이지 않습니다.

수신 터널에 대한 설정이 유사한 IPv4(GUE를 사용하여 IPv4 패킷 내에 캡슐화된 IPv4 패킷)에 대해 이와 똑같은 설정을 반복했습니다.

sysctl net.ipv4.conf.all.rp_filter=2
modprobe fou
ip fou add port 42428 gue
ip addr add $VIP/32 dev tunl0
ip link set tunl0 up

어떤 경우에는 캡핑이 해제된 패킷을 볼 수 있습니다.

root@ipv4-control:~# tcpdump -i any host $VIP -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
23:12:04.749247 IP $VIP.43830 > $VIP.80: Flags [S], seq 2247712115, win 65495, options [mss 65495,sackOK,TS val 2120453320 ecr 0,nop,wscale 7], length 0

위의 $VIP는 http 트래픽을 서비스하는 가상 ipv4 주소입니다.

IPv6 수신 터널 설정 방식에 어떤 문제가 있는지 아시나요?

답변1

IPv6에서 IPv4를 캡슐화했기 때문에 ip6tnl0 인터페이스에서 모드를 설정해야 했습니다. 이렇게 하면 트릭이 수행됩니다.

ip -6 tunnel change ip6tnl0 mode ipip6

관련 정보