我正在尝试从我们公司网络边缘的 Draytek 路由器到 Digital Ocean 上的 VPS 建立 ipsec VPN。我已使用以下方式在 VPS 上设置 VPN这个脚本在 Ubuntu 14.04 机器上。我相信该脚本会下载并安装 libreswan,并提示一些基本配置问题等。我对脚本创建的 ipsec.conf 做了一些更改。我的问题是,我可以从路由器 ping 到 VPS,我可以看到到达 VPS 的数据包显示来自路由器的私有 IP 地址,但我尝试过的任何方法都无法让我将数据包路由回路由器。因此,从路由器的角度来看,ping 似乎超时了。
路由器通过其一个接口直接连接到互联网,并配置了本地 IP 地址 10.111.1.1。VPS 有一个直接连接到互联网的接口。
当 VPN 建立时,这是 VPS 上的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 178.62.64.1 0.0.0.0 UG 0 0 0 eth0
10.111.1.1 * 255.255.255.255 UH 0 0 0 eth0
178.62.64.0 * 255.255.192.0 U 0 0 0 eth0
请注意,第二个条目是在建立 VPN 时创建的。
如果我尝试 ping 10.111.1.1,我会得到:
PING 10.111.1.1 (10.111.1.1) 56(84) bytes of data.
From <public IP address - eth0> icmp_seq=1 Destination Host Unreachable
以下是 ipsec verify 的输出:
Verifying installed system and configuration files
Version check and ipsec on-path [OK]
Libreswan 3.10 (netkey) on 3.13.0-37-generic
Checking for IPsec support in kernel [OK]
NETKEY: Testing XFRM related proc values
ICMP default/send_redirects [OK]
ICMP default/accept_redirects [OK]
XFRM larval drop [OK]
Pluto ipsec.conf syntax [OK]
Hardware random device [N/A]
Two or more interfaces found, checking IP forwarding [OK]
Checking rp_filter [OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for IKE/NAT-T on udp 4500 [OK]
Pluto ipsec.secret syntax [OK]
Checking 'ip' command [OK]
Checking 'iptables' command [OK]
Checking 'prelink' command does not interfere with FIPSChecking for obsolete ipsec.conf options [OK]
Opportunistic Encryption [DISABLED]
/etc/ipsec.conf 的内容如下(注释掉的行是以前的实验结果,结果相同):
version 2.0
config setup
dumpdir=/var/run/pluto/
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!192.168.42.0/24
oe=off
protostack=netkey
nhelpers=0
interfaces=%defaultroute
conn vpnpsk
connaddrfamily=ipv4
auto=add
left=178.62.73.215
# leftid=178.62.73.215
# leftsubnet=178.62.73.215/32
leftsubnet=10.10.10.0/24
# leftnexthop=%defaultroute
leftnexthop=%direct
leftprotoport=17/1701
rightprotoport=17/%any
# right=%any
right=10.111.1.0/24
rightsourceip=10.111.1.1
leftsourceip=10.10.10.1
# rightsubnetwithin=0.0.0.0/0
forceencaps=yes
authby=secret
pfs=no
type=transport
auth=esp
ike=3des-sha1,aes-sha1
phase2alg=3des-sha1,aes-sha1
rekey=no
keyingtries=5
dpddelay=30
dpdtimeout=120
dpdaction=clear
这是路由器路由表的相关部分:
Key: C - connected, S - static, R - RIP, * - default, ~ - private
* 0.0.0.0/ 0.0.0.0 via <public IP address> WAN2
S~ 10.10.10.0/ 255.255.255.0 via 178.62.73.215 VPN-10
C~ 10.111.1.0/ 255.255.255.0 directly connected LAN
C <public IP address>/ 255.255.255.224 directly connected WAN2
如果有人指出我做错的事情我将非常感激。
谢谢。
答案1
好的,我偶然发现了解决方案,方法是删除 leftprotoport=17/1701 和 rightprotoport=17/%any 行。不知道为什么这个方法有效,但是嘿嘿!我现在可以从服务器 ping 到路由器,并且可以 ping 挂在路由器上的设备。我现在遇到了另一个问题,但我会为此发布另一个问题。谢谢大家。