我有以下设置:
远程 IPSec VPN 网关:81.xxx
本地机器地址:172.22.1.156
VPN 分配的 IP:10.0.30.97
VTI 隧道接口:
vti0: ip/ip remote 81.x.x.x local 172.22.1.156 ttl inherit nopmtudisc key 1000
inet 10.0.30.97/22 scope global vti0
路由到远程子网 10.xxx:
10.0.0.0/8 dev vti0 scope link
10.0.28.0/22 dev vti0 proto kernel scope link src 10.0.30.97
XFRM 状态:
src 81.x.x.x dst 172.22.1.156
proto esp spi 0xxxxxxxxx reqid 0 mode tunnel
replay-window 0
auth-trunc hmac(sha256) 0xxxxx 128
enc cbc(aes) 0xxxxx
encap type espinudp sport 4500 dport 4500 addr 0.0.0.0
anti-replay context: seq 0x0, oseq 0x0, bitmap 0x00000000
sel src 0.0.0.0/0 dst 0.0.0.0/0
src 172.22.1.156 dst 81.x.x.x
proto esp spi 0xxxxxxxxx reqid 0 mode tunnel
replay-window 0
auth-trunc hmac(sha256) 0xxxxxxxxx 128
enc cbc(aes) 0xxxxxxxxx
encap type espinudp sport 4500 dport 4500 addr 0.0.0.0
anti-replay context: seq 0x0, oseq 0x26, bitmap 0x00000000
sel src 0.0.0.0/0 dst 0.0.0.0/0
XFRM 政策:
src 0.0.0.0/0 dst 0.0.0.0/0
dir in priority 0 ptype main
mark 0x3e8/0xffffffff
tmpl src 81.x.x.x dst 172.22.1.156
proto esp reqid 0 mode tunnel
src 0.0.0.0/0 dst 0.0.0.0/0
dir out priority 0 ptype main
mark 0x3e8/0xffffffff
tmpl src 172.22.1.156 dst 81.x.x.x
proto esp reqid 0 mode tunnel
使用此设置时,传入 IPSec 流量路由存在问题。根据 wireshark 日志,数据包在两个方向上都正确传输,例如,我可以 ping 10.xxx 子网上的远程主机,并且会返回加密的 ESP 回复(包含 ICMP 封装数据),但它从未在 VTI 隧道上进行处理并转发到 172.22.1.156。解密和身份验证密钥设置正确,可以在 wireshark 中解密传入的 ESP 数据包。是否缺少任何其他策略或路由?
答案1
回答我自己的问题:
仅当在端口 4500 上有一个监听 UDP 套接字并且UDP_ENCAP
套接字选项设置为 时,自动 UDP IPSec 解封装才在 Linux 上有效UDP_ENCAP_ESPINUDP
。