use*_*315 5 vpn linux-networking strongswan
我有一台带有额外的、仅限本地的以太网接口和私有子网的计算机。建立 StrongSwan VPN 后,我无法访问该子网。
这是本地“左”配置(由algo建立):
conn ikev2-<rightip>
fragmentation=yes
rekey=no
dpdaction=clear
keyexchange=ikev2
compress=no
dpddelay=35s
ike=aes128gcm16-prfsha512-ecp256!
esp=aes128gcm16-ecp256!
right=<rightip>
rightid=<rightip>
rightsubnet=0.0.0.0/0
rightauth=pubkey
leftsourceip=%config
leftauth=pubkey
leftcert=daves.crt
leftfirewall=yes
left=%defaultroute
auto=add
Run Code Online (Sandbox Code Playgroud)
有问题的子网是 10.0.0.0/24。%defaultroute 解析为 192.168.0.0/24 中的地址。
'left' 和 'leftsubnet' 看起来不像是正确的选项,但我认为没有什么比这更好的了。我试过将 leftsubnet 设置为 10.0.0.0/24 和 !10.0.0.0/24。
如何从 StronSwan VPN 连接中排除本地子网?
如何检查连接的路由配置?
您可以设置直通策略。
更新:正如@ecdsa 所指出的,strongswan >= 5.5.2 有一个更简单的方法,如果您的版本可以使用它,请查看最后。
一些随机 IP 的示例。在任何更改和隧道之前:
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 src 10.0.0.77 uid 0
Run Code Online (Sandbox Code Playgroud)
建立隧道后,问题:
# ip route get 10.0.0.55
10.0.0.55 via 192.168.0.1 dev eth0 table 220 src 192.168.0.44 uid 0
Run Code Online (Sandbox Code Playgroud)
将此配置添加到/etc/ipsec.conf
:
conn ignorelan
left=127.0.0.1 #prevents usage in peers selection algorithm
leftsubnet=10.0.0.0/24
rightsubnet=10.0.0.0/24
authby=never
type=passthrough
auto=route
Run Code Online (Sandbox Code Playgroud)
并重新加载它:
# ipsec reload
Run Code Online (Sandbox Code Playgroud)
应该立即激活它。如果没有(这次)你可以这样做:
# ipsec route ignorelan
'ignorelan' shunt PASS policy installed
Run Code Online (Sandbox Code Playgroud)
无论如何,它应该在以后重新启动时使用。您现在拥有(除了任何隧道):
# ipsec status
Shunted Connections:
ignorelan: 10.0.0.0/24 === 10.0.0.0/24 PASS
Run Code Online (Sandbox Code Playgroud)
[...]
现在,无论隧道是否建立,您都会返回正确的路由(由 strongswan 处理,因此在表 220 中,而不是(仅)表主(不再)):
# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 table 220 src 10.0.0.77 uid 0
cache
Run Code Online (Sandbox Code Playgroud)
对于 0.0.0.0/0 的隧道,将出现类似于表 220 中的结果:
# ip route show table 220
default via 192.168.0.1 dev eth0 proto static src 192.168.0.44
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
192.168.0.0/24 dev eth0 proto static src 192.168.0.44
Run Code Online (Sandbox Code Playgroud)
如果你没有在 passthrough 设置中放置匹配现实的路由(例如:错误的网络掩码),那么“分流”会出现错误的结果(如预期的源 IP,但通过错误的网卡),所以要小心。
更新:bypass-lan 插件更易于使用,尤其是在动态环境中。
与其添加新conn
条目,不如激活它(例如在 Debian buster(不稳定)上,编辑 /etc/strongswan.d/charon/bypass-lan.conf 并设置 load=yes(即:charon.plugins.bypass-lan.load) = 是))。默认情况下,每个接口都会被分流,这意味着会建立隧道,但默认情况下不会使用。所以只需设置interfaces_ignore
或interfaces_use
相应地设置。您应该interfaces_ignore
为不想绕过隧道interfaces_use
的接口设置,否则,为要绕过隧道的接口设置。例如:
interface_use = lxcbr0
Run Code Online (Sandbox Code Playgroud)
在这个例子之后会得到ipsec start
,就像之前的方法一样:
# ip route show table 220
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77
Run Code Online (Sandbox Code Playgroud)
(但也会在使用 IPv6 时考虑与此接口相关的 IPv6 路由)。
另一种(hackish)方法是绕过strongswan的表220:而不是任何strongswan设置,可以通过以下方式实现(对于这些问题和示例):
ip rule add priority 219 to 10.0.0.0/24 lookup main
Run Code Online (Sandbox Code Playgroud)
它将使用目标网络的默认(主)路由表,而不是使用 strongswan 的表 220 继续到下一个条目。
归档时间: |
|
查看次数: |
5209 次 |
最近记录: |