允许 Strongswan roadwarrior 访问本地 LAN

允许 Strongswan roadwarrior 访问本地 LAN

我已成功在本地 Linux 主机和远程 VPN 网关之间建立了 IPSec 隧道。我使用网关分配的虚拟 IP,因为我经常出差,所以我的本地 LAN 子网并不固定。

当它启动时,所有流量(包括互联网流量)都通过隧道传输。我希望所有流量除了让本地子网通过隧道进行路由。我已阅读并重读 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.n.n.n
        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 网关分配)

编辑:

我已设法通过添加此项来排除本地网络,但子网是硬编码的:

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

答案1

由于声誉较低,我无法添加评论,所以就在这里..

当它启动时,所有流量(包括互联网流量)都会通过隧道传输。

不可能。您在服务器上指定了“leftsubnet=172.31.38.36/32”,因此客户端的“rightsubnet=0.0.0.0/0”将缩小到仅此一个主机。

为了将所有流量路由到 VPN,您也需要在服务器上设置“leftsubnet=0.0.0.0/0”。

在默认配置中,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

因此,当客户端将数据包发送到本地 LAN 时,此数据包由表 220 路由,该表没有到本地 LAN 的路由 - 只有到 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

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

相关内容