允许Strongswan roadwarrior访问本地局域网

我已经在本地Linux主机和远程VPN网关之间成功build立了IPSec隧道。 我正在使用由网关分配的虚拟IP,因为我的本地局域网子网不是固定的。

当它达到所有的stream量通过隧道,包括互联网stream量。 我想要的是除了通过隧道路由的本地子网之外的所有stream量。 我已经阅读并重新阅读了Strongswan的文档,但是我不知道该怎么做。

我需要做什么?

本地ipsec.conf

config setup conn %default ikelifetime=60m keylife=20m rekeymargin=3m keyingtries=1 keyexchange=ikev2 authby=secret conn VPN left=%any leftsourceip=%config [email protected] leftfirewall=yes right=52.nnn rightsubnet=0.0.0.0/0 [email protected] auto=add 

服务器ipsec.conf

 config setup conn %default ikelifetime=60m keylife=20m rekeymargin=3m keyingtries=1 keyexchange=ikev2 conn AWSVPN left=%any leftsubnet=172.31.38.36/32 [email protected] leftfirewall=yes authby=secret right=%any rightsourceip=10.3.0.0/28 auto=add 

网关

IP:172.31.38.36子网:172.31.32.0/20

我的机器

IP:192.168.1.150(可以更改)子网:192.168.1.0/24(可以更改)虚拟IP:10.3.0.1(由Strongswan网关指定)

编辑:

我已经设法通过添加这个排除本地networking,但子网是硬编码的:

 conn local-net leftsubnet=192.168.1.0/24 rightsubnet=192.168.1.0/24 authby=never type=pass auto=route 

由于声誉低,我不能添加评论,所以在这里..

当它达到所有的stream量通过隧道,包括互联网stream量。

那不可能。 你在服务器上指定'leftsubnet = 172.31.38.36 / 32',所以客户端的'rightsubnet = 0.0.0.0 / 0'将被缩小到只有这个主机。

为了将所有stream量路由到VPN,您还需要在服务器上使用“leftsubnet = 0.0.0.0 / 0”。

在默认configuration中,Strongswan在表220中添加了到服务器子网的路由,在服务器子网“0.0.0.0/0”的情况下,该路由如下所示:

 $ ip route list table 220 default via 192.168.2.9 dev wlan0 proto static src 10.3.0.2 

这个表优先于默认使用的“主”路由表:

 $ ip rule list 0: from all lookup local 220: from all lookup 220 32766: from all lookup main 32767: from all lookup default 

所以,当客户端向本地局域网发送数据包时,这个数据包被路由到表220,它没有到本地局域网的路由 – 只有到VPN服务器的默认路由。 因此,为了不将本地LAN的数据包路由到VPN,你只需要在表220中添加到本地LAN的路由,如:

 $ ip route add table 220 192.168.1.0/24 dev wlan0 

所以,表220现在看起来像:

 default via 192.168.2.9 dev wlan0 proto static src 10.3.0.2 192.168.2.0/24 dev wlan0 scope link 

另一种可能的解决scheme是使用“主”路由表来路由VPN子网(在strongswan.conf中为'routing_table = 32766'),因为它已经有到本地LAN的路由。 但在这种情况下,当前默认路由将是一个问题:strongswan不会添加另一个默认路由,如果已经有一个..