我正在尝试在 Linux Mint 19.2 上设置 VPN。
我正在使用网络管理器-strongswan所以我添加了这个文件VPN在下面/etc/NetworkManager/system-connections/
[connection]
id=VPN
uuid=be1d4fd1-bbaa-4aa9-9fdc-e293bf16fe67
type=vpn
autoconnect=false
permissions=
timestamp=1582680217
[vpn]
address=vpn********.it
certificate=
encap=yes
ipcomp=no
method=eap
password-flags=0
proposal=no
user=user
virtual=yes
service-type=org.freedesktop.NetworkManager.strongswan
[vpn-secrets]
password=password
[ipv4]
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=auto
[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=ignore
连接正常,我可以使用私有网络上的 ssh 进行访问。最大的问题是连接后我无法上网,连接到 vpn 会锁定所有其他地址。
我ignore-auto-routes
在配置中添加了标志,那么为什么我的连接被锁定了?
知识产权输出*
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:3c:de:1b brd ff:ff:ff:ff:ff:ff
inet yy.16.209.132/24 brd yy.16.209.255 scope global dynamic noprefixroute ens33
valid_lft 1656sec preferred_lft 1656sec
inet yy.26.199.18/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::216e:bcc0:3b4f:44b2/64 scope link noprefixroute
valid_lft forever preferred_lft forever
路线-n输出
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 yy.16.209.2 0.0.0.0 UG 20100 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33
yy.16.209.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
yy.26.199.18 0.0.0.0 255.255.255.255 UH 50 0 0 ens33
yy.26.199.18 0.0.0.0 255.255.255.255 UH 100 0 0 ens33
ip xfrm 策略输出无需 VPN
src yy.16.209.0/24 dst yy.16.209.0/24
dir fwd priority 175423
src yy.16.209.0/24 dst yy.16.209.0/24
dir in priority 175423
src yy.16.209.0/24 dst yy.16.209.0/24
dir out priority 175423
src 169.254.0.0/16 dst 169.254.0.0/16
dir fwd priority 183615
src 169.254.0.0/16 dst 169.254.0.0/16
dir in priority 183615
src 169.254.0.0/16 dst 169.254.0.0/16
dir out priority 183615
src fe80::/64 dst fe80::/64
dir fwd priority 134463
src fe80::/64 dst fe80::/64
dir in priority 134463
src fe80::/64 dst fe80::/64
dir out priority 134463
src yy.26.199.18/32 dst 0.0.0.0/0
dir out priority 383615
tmpl src yy.16.209.132 dst xx.xx.124.58
proto esp spi 0xc57cfb3f reqid 7 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32
dir fwd priority 383615
tmpl src xx.xx.124.58 dst yy.16.209.132
proto esp reqid 7 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32
dir in priority 383615
tmpl src xx.xx.124.58 dst yy.16.209.132
proto esp reqid 7 mode tunnel
src ::1/128 dst ::1/128
dir fwd priority 68927
src ::1/128 dst ::1/128
dir in priority 68927
src ::1/128 dst ::1/128
dir out priority 68927
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0
src ::/0 dst ::/0
socket in priority 0
src ::/0 dst ::/0
socket out priority 0
src ::/0 dst ::/0
socket in priority 0
src ::/0 dst ::/0
socket out priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0
src ::/0 dst ::/0
socket in priority 0
src ::/0 dst ::/0
socket out priority 0
src ::/0 dst ::/0
socket in priority 0
src ::/0 dst ::/0
socket out priority 0
ip xfrm 策略输出VPN 下
src yy.26.199.18/32 dst 0.0.0.0/0
dir out priority 383615
tmpl src yy.16.209.132 dst xx.xx.124.58
proto esp spi 0xc787ea42 reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32
dir fwd priority 383615
tmpl src xx.xx.124.58 dst yy.16.209.132
proto esp reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32
dir in priority 383615
tmpl src xx.xx.124.58 dst yy.16.209.132
proto esp reqid 2 mode tunnel
src fe80::/64 dst fe80::/64
dir fwd priority 134463
src fe80::/64 dst fe80::/64
dir in priority 134463
src fe80::/64 dst fe80::/64
dir out priority 134463
src ::1/128 dst ::1/128
dir fwd priority 68927
src ::1/128 dst ::1/128
dir in priority 68927
src ::1/128 dst ::1/128
dir out priority 68927
src yy.16.209.0/24 dst yy.16.209.0/24
dir fwd priority 175423
src yy.16.209.0/24 dst yy.16.209.0/24
dir in priority 175423
src yy.16.209.0/24 dst yy.16.209.0/24
dir out priority 175423
src 169.254.0.0/16 dst 169.254.0.0/16
dir fwd priority 183615
src 169.254.0.0/16 dst 169.254.0.0/16
dir in priority 183615
src 169.254.0.0/16 dst 169.254.0.0/16
dir out priority 183615
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0
src ::/0 dst ::/0
socket in priority 0
src ::/0 dst ::/0
socket out priority 0
src ::/0 dst ::/0
socket in priority 0
src ::/0 dst ::/0
socket out priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket in priority 0
src 0.0.0.0/0 dst 0.0.0.0/0
socket out priority 0
src ::/0 dst ::/0
socket in priority 0
src ::/0 dst ::/0
socket out priority 0
src ::/0 dst ::/0
socket in priority 0
src ::/0 dst ::/0
socket out priority 0
通过比较输出我可以看到这一部分是在 VPN 连接时添加的:
src yy.26.199.18/32 dst 0.0.0.0/0
dir out priority 383615
tmpl src yy.16.209.132 dst xx.xx.124.58
proto esp spi 0xc787ea42 reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32
dir fwd priority 383615
tmpl src xx.xx.124.58 dst yy.16.209.132
proto esp reqid 2 mode tunnel
src 0.0.0.0/0 dst yy.26.199.18/32
dir in priority 383615
tmpl src xx.xx.124.58 dst yy.16.209.132
proto esp reqid 2 mode tunnel
我尝试了很多方法但都没有成功。
- 尝试将
Metric
yy.26.199.18 增加到 1050 和 1100。 route del default
&&ip route add default via yy.26.199.18 dev ens33
- 尝试删除路由条目 yy.26.199.18,但没有任何变化
以及许多其他愚蠢的东西。
因此,我想使用我的连接来访问“普通互联网”,同时通过 VPN 路由特定地址。
这可能吗?
答案1
在当前状态下,charon-nm
没有“设置”来定义隧道另一端的远程网络。VPN 客户端默认建议完整的地址空间,并依靠 VPN 响应器将流量选择器缩小到更具体的远程子网或子网。您可以在Charon-nm 代码。在Strongswan 维基用于 NetworkManager 插件。
如您所见,隧道没有子网配置。我们让服务器管理部门选择子网;客户端始终为远程网络建议 0.0.0.0/0,服务器将其缩小到配置的子网。
因此,如果响应者没有缩小范围,那么离开主机的所有单播流量都将被直接进入隧道。
然而路由解决这个问题的办法是,VPN 响应器分配一个虚拟 IP。它通过 charon-nm 附加到外部接口。这是设置所要求的virtual=yes
。从给定的数据来看,它是外部接口上的第二个地址。
Strongswan 默认使用路由表 ID 220 和优先级为 220 的路由策略规则来调用该表。该表实际上将发往 VPN 的数据包的来源设置为您这边的虚拟 IP,然后它们被 xfrm 策略规则捕获。因此,您可以使用优先级较低的规则(如执行较早的规则)绕过这些规则,并避免与 xfrm 策略匹配。
例如如果您只希望到 192.168.0.1/16 的流量进入隧道:
ip rule add from all to 192.168.0.1/16 table 220 priority 218
ip rule add table main priority 219
第一条规则捕获您“想要的”流量并将其发送到 Strongswan 表,第二条规则跳过 Strongswan 表到主表(如果您未指定表,则在此处添加路由)。
或者使用一条否定规则:
ip rule add not from all to 192.168.0.1/16 table main priority 128
/etc/NetworkManager/dispatcher.d/
您可以使用内部./pre-up.d/
和中的网络挂钩自动添加和删除此类规则./pre-down.d/
,只需将可执行脚本放在那里,模式为 0755,所有者为“root”。将分别$2
包含vpn-pre-up
或。将包含外部接口的名称。将是路径。vpn-pre-down
$1
$CONNECTION_FILENAME
/etc/NetworkManager/system-connections/yourfilename
例如:
#!/bin/bash
if [[ "$2" == "vpn-pre-up" ]]
then
ip rule ...
fi
查看到某个地址的路由是否不是来自表 220
ip route get address/32
如果不通过 VPN,则不应看到表 220,否则会看到。此外,VPN 路由将虚拟 IP 显示为源,而“主”表将正常的外部 IP 显示为源。
显示表 220 中的规则:
ip route show table 220
当反复更改 VPN 或路由表中的设置时,刷新缓存的路由会很有用:
ip route flush cache
也许还应该知道,启动 VPN 还会切断已经运行的 IP 层通信,这些通信以“纯文本”形式运行,应该通过 VPN。但是,如果在绕过路由之前打开具有完整地址空间流量选择的 VPN 连接,这也意味着您将丢失当时所有正在运行的 TCP 连接。即使 NetworkManager 调度程序调用其钩子预启动,在调用预启动脚本时,表 220 中的 ip xfrm 规则和路由已经启动,因此您需要考虑这一点,并可能在启动时设置表 220 的路由旁路。