允许Strongswan roadwarrior访问本地局域网

Rob*_*vin 2 strongswan

我已成功在本地 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
        leftid=@robin.my.net
        leftfirewall=yes
        right=52.n.n.n
        rightsubnet=0.0.0.0/0
        rightid=@vpn.my.net
        auto=add
Run Code Online (Sandbox Code Playgroud)

服务器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
    leftid=@vpn.my.net
    leftfirewall=yes
    authby=secret
    right=%any
    rightsourceip=10.3.0.0/28
    auto=add
Run Code Online (Sandbox Code Playgroud)

网关

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
Run Code Online (Sandbox Code Playgroud)

小智 5

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

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

那不可能。您在服务器 '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
Run Code Online (Sandbox Code Playgroud)

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

$ ip rule list
0:      from all lookup local
220:    from all lookup 220
32766:  from all lookup main
32767:  from all lookup default
Run Code Online (Sandbox Code Playgroud)

因此,当客户端向本地 LAN 发送数据包时,该数据包由表 220 路由,该表没有到本地 LAN 的路由 - 只有到 VPN 服务器的默认路由。因此,为了不将本地 LAN 的数据包路由到 VPN,您只需要在表 220 中添加到本地 LAN 的路由,例如:

$ ip route add table 220 192.168.1.0/24 dev wlan0
Run Code Online (Sandbox Code Playgroud)

因此,表 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
Run Code Online (Sandbox Code Playgroud)

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