![Geneve 上的 XFRM IPsec](https://linux22.com/image/779029/Geneve%20%E4%B8%8A%E7%9A%84%20XFRM%20IPsec.png)
我需要在 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 隧道加密,一切就绪了。