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

Linux에서 IPv6용 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

관련 정보