如何使用xfrm设置站点到站点VPN隧道

时间:2019-09-16 17:54:25

标签: vpn

我尝试了几天来在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。

XFRM政策和州

我设法为每个网关正确添加了状态和策略(我认为)。
对于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
# 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
对于GWB,我使用了以下命令: #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命令正确吗?

1 个答案:

答案 0 :(得分:0)

我发现了问题。我的方法是正确的,但是由于内核错误(在许多5.2.x版本和某些4.x版本中),ip xfrm工具无法正常工作。

一种解决方法是将strongswan / swanctl与自己的IPSec实现一起使用。有关更多信息,请参见:kernel-libsec plugin。 您将需要自行构建和编译。