我已经关注本教程使用 StrongSwan 和 IPSec 设置我的私人 VPN。效果非常好。
但是当我尝试直接连接到我的网关/服务器(使用 SSH)时,连接不会通过 VPN。
如果我在我的客户端中查找表格,我会看到:
$ netstat -nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default link#19 UCS 85 0 ipsec0
default 172.21.15.254 UGScI 18 0 en0
8.8.8.8 link#19 UHWIi 7 33 ipsec0
10.10.10.1 10.10.10.1 UH 0 0 ipsec0
13.32.153.9 link#19 UHW3I 0 3 ipsec0 10
17.248.144.80 link#19 UHWIi 2 22 ipsec0
17.252.76.33 link#19 UHWIi 1 40 ipsec0
18.184.56.218 link#19 UHWIi 1 1 ipsec0
54.37.155.XX 172.21.15.254 UGHS 397 197 en0
...
当我连接到 VPN 时,最后一行添加到我的客户端。54.37.155.XX 是我服务器的公共地址。我不明白将这一行添加到我的路由表的过程是什么。
如果我删除最后一行,它就可以正常工作:
sudo route -n delete 54.37.155.XX 172.21.15.254
我怀疑/etc/ipsec.conf
配置文件中缺少一条规则来添加此路由条目,但我无法确定是哪一个:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
ike=aes256-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha1,3des-sha1!
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=@server_name_or_ip
leftcert=/etc/ipsec.d/certs/vpn-server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightdns=8.8.8.8,8.8.4.4
rightsourceip=10.10.10.0/24
rightsendcert=never
eap_identity=%identity
任何想法 ?
答案1
这是 macOS/iOS 客户端的一个已知问题。客户端会安装一条到 VPN 服务器的直接路由,以防止 IKE 流量通过 VPN 进行隧道传输。但是,这意味着您也无法通过 VPN 通过 VPN 服务器的公共 IP 访问其他服务。
解决方法是,您可以从分配给客户端的虚拟 IP 所用的子网中为服务器分配一个虚拟 IP。例如,如果您配置了保留 IP,rightsourceip=10.10.10.2/24
则可以将保留 IP 分配10.10.10.1
给服务器的一个接口,然后您就应该能够从 VPN 客户端访问该 IP。
答案2
正如@ecdsa所建议的,我们需要更改ipsec conf:
rightsourceip=10.10.10.2/24
将这些行添加到/etc/network/interfaces.d/50-cloud-init.cfg:
iface ens3 inet static
address 10.10.10.1/24
之后,我们可以使用 10.10.10.1 地址通过 VPN 连接到服务器