Geneve 上的 XFRM IPsec

Geneve 上的 XFRM IPsec

我需要在 Geneve 隧道(或 GRETAP)上运行 IPsec。我可以使用公共 IP 作为端点(因此它只是 IPsec)来使 IPsec 隧道工作,但不要在 Geneve 链路上使用私有 IP(因此它是 IPsec/Geneve)。

日内瓦隧道已建成并投入使用:

[root@dd1215950359 /]# ip -d link show dev tun_gw2
6: tun_gw2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether ca:9e:0e:f0:6b:9c brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 65485 
    geneve id 102 remote 192.168.192.2 ttl 254 dstport 6081 noudpcsum udp6zerocsumrx addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 
[root@dd1215950359 /]# ifconfig tun_gw2
tun_gw2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 192.168.12.2  netmask 255.255.255.254  broadcast 255.255.255.255
        ether ca:9e:0e:f0:6b:9c  txqueuelen 1000  (Ethernet)
        RX packets 396  bytes 405632 (396.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 796  bytes 464646 (453.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Geneve 邻居的 IP 是 192.168.12.3,我可以 ping 通它。

我使用此脚本创建 IPsec 隧道。如果我使用相同的脚本但使用两个 GW 的公共 IP,它就可以正常工作。但是当我使用 Geneve 私有 IP 时,流量会绕过隧道。

GW=1 # or 2, for the other side
GW1_PUBIP=192.168.160.5
GW2_PUBIP=192.168.192.2
PRIVNET=192.168.12 # address prefix on the Geneve link 
SPI=0x1234
MODE="mode tunnel"
PROTO="proto esp spi $SPI"
AUTHKEY=0x0123456789ABCDEF0123456789ABCDEF
ENCKEY=0xFEDCBA9876543210FEDCBA9876543210
if [[ $GW == 1 ]]; then
    LOC_PUB_IP=$GW1_PUBIP REM_PUB_IP=$GW2_PUBIP LOC_PRI_IP=$PRIVNET.2 REM_PRI_IP=$PRIVNET.3
else
    LOC_PUB_IP=$GW2_PUBIP REM_PUB_IP=$GW1_PUBIP LOC_PRI_IP=$PRIVNET.3 REM_PRI_IP=$PRIVNET.2
fi  
PUBIP=$(ifconfig eth0 | grep inet | tr -s ' ' | cut -d' ' -f3)
if [[ $PUBIP == $LOC_PUB_IP ]]; then # trigger guard
    ip xfrm state flush; ip xfrm policy flush
    ip xfrm state add src $LOC_PRI_IP dst $REM_PRI_IP $PROTO $MODE auth sha256 $AUTHKEY enc aes $ENCKEY
    ip xfrm state add src $REM_PRI_IP dst $LOC_PRI_IP $PROTO $MODE auth sha256 $AUTHKEY enc aes $ENCKEY
    ip xfrm policy add dst 100.64/16 dir out tmpl src $LOC_PRI_IP dst $REM_PRI_IP $PROTO $MODE
    ip xfrm policy add src 100.64/16 dir in  tmpl src $REM_PRI_IP dst $LOC_PRI_IP $PROTO $MODE
    ip xfrm policy add src 100.64/16 dir fwd tmpl src $REM_PRI_IP dst $LOC_PRI_IP $PROTO $MODE
fi  

答案1

加密是为了在公共 IP 之间的隧道流量上进行。

加密总是会创建一个隧道,在这种情况下,您可以将其与 GRE 标头结合使用。如果您希望将其放在内部 IP 地址上,则需要创建另一个单独的隧道,为此您需要另一组私有 IP 地址。

简而言之,有了 Geneve 隧道加密,一切就绪了。

相关内容