我尝试了几天来在2个站点之间创建VPN隧道,但没有成功。
我有以下情况:
站点A的IP地址为192.168.1.0/24,网关GWA的地址为192.168.1.254和a.b.c.d(面向Internet)。
具有IP地址192.168.2.0/24的站点B和具有地址192.168.2.254和e.f.g.h(面向Internet)的网关GWB。
我设法为每个网关正确添加了状态和策略(我认为)。
对于GWA,我使用了以下命令:
# policies in, out, fwd
ip xfrm policy add src 192.168.1.0/24 dst 192.168.2.0/24 dir out tmpl src a.b.c.d dst e.f.g.h proto esp reqid 0x99 mode tunnel
ip xfrm policy add src 192.168.2.0/24 dst 192.168.1.0/24 dir in tmpl src e.f.g.h dst a.b.c.d proto esp reqid 0x99 mode tunnel
ip xfrm policy add src 192.168.2.0/24 dst 192.168.1.0/24 dir fwd tmpl src e.f.g.h dst a.b.c.d proto esp reqid 0x99 mode tunnel
对于GWB,我使用了以下命令:
# states
ip xfrm state add src a.b.c.d dst e.f.g.h proto esp spi 0x81 reqid 0x99 mode tunnel auth "hmac(sha256)" 0x01 enc "rfc3686(ctr(aes))" 0x02
ip xfrm state add src e.f.g.h dst a.b.c.d proto esp spi 0x82 reqid 0x99 mode tunnel auth "hmac(sha256)" 0x03 enc "rfc3686(ctr(aes))" 0x04
#policies in, out, fwd
ip xfrm policy add src 192.168.2.0/24 dst 192.168.1.0/24 dir out tmpl src e.f.g.h dst a.b.c.d proto esp reqid 0x99 mode tunnel
ip xfrm policy add src 192.168.1.0/24 dst 192.168.2.0/24 dir in tmpl src a.b.c.d dst e.f.g.h proto esp reqid 0x99 mode tunnel
ip xfrm policy add src 192.168.1.0/24 dst 192.168.2.0/24 dir fwd tmpl src a.b.c.d dst e.f.g.h proto esp reqid 0x99 mode tunnel
# states
ip xfrm state add src a.b.c.d dst e.f.g.h proto esp spi 0x81 reqid 0x99 mode tunnel auth "hmac(sha256)" 0x01 enc "rfc3686(ctr(aes))" 0x02
ip xfrm state add src e.f.g.h dst a.b.c.d proto esp spi 0x82 reqid 0x99 mode tunnel auth "hmac(sha256)" 0x03 enc "rfc3686(ctr(aes))" 0x04
站点A的每个主机都知道通过GWA路由发往站点B的数据包。
站点B的每个主机都知道要通过GWB路由发往站点A的数据包。
从站点A中的主机发送到站点B中的主机的数据包到达GWA并加密(作为ESP数据包)。 ESP数据包到达GWB,并且已成功解密,但已被丢弃。
我需要虚拟/隧道接口吗? (vti,tun,tap)
我需要在iptables中添加条目吗?
我的xfrm命令正确吗?
答案 0 :(得分:0)
我发现了问题。我的方法是正确的,但是由于内核错误(在许多5.2.x版本和某些4.x版本中),ip xfrm工具无法正常工作。
一种解决方法是将strongswan / swanctl与自己的IPSec实现一起使用。有关更多信息,请参见:kernel-libsec plugin。 您将需要自行构建和编译。