我需要了解并解决我的问题。我知道 openswan 可以工作,因为当我从内部 IP 地址为 10.0.0.97 的家庭网络连接到工作 VPN 时,我可以 ping 通,但当我使用公共 xFinity wifi 时,它表明隧道已启动,但我无法 ping 通我的 VPN 的内部主机。
当我成功连接到公共 Xfinity wifi 时,我的 IP 是:
inet addr:10.232.204.146 Bcast:10.255.255.255 Mask:255.224.0.0
这是路线-n
root@ubuntu:/etc# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.224.0.1 0.0.0.0 UG 0 0 0 wlan0
0.0.0.0 10.224.0.1 0.0.0.0 UG 0 0 0 wlan0
10.224.0.0 0.0.0.0 255.224.0.0 U 9 0 0 wlan0
当我到达此时点时,我可以正常 ping 和浏览互联网。
当我启动 ipsec/openswan 时,我明白了。
root@ubuntu:/etc# /etc/init.d/ipsec status
IPsec running - pluto pid: 4483
pluto pid 4483
1 tunnels up
但是我无法 ping 通具有 192.168.1.xxx IP 的内部服务器。
这是我的 ipsec.conf
config setup
dumpdir=/var/run/pluto/
#
# NAT-TRAVERSAL support, see README.NAT-Traversal
# nat_traversal=yes
# exclude networks used on server side by adding %v4:!a.b.c.0/24
# It seems that T-Mobile in the US and Rogers/Fido in Canada are
# using 25/8 as "private" address space on their 3G network.
# This range has not been announced via BGP (at least upto 2010-12-21)
virtual_private=%v4:10.0.0.0/8,%v4:192.168.1.0/24,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
# OE is now off by default. Uncomment and change to on, to enable.
oe=off
# which IPsec stack to use. auto will try netkey, then klips then mast
#protostack=netkey
# Use this to log to a file, or disable logging on embedded systems (like openwrt)
plutostderrlog=/var/log/pluto
plutodebug="all"
protostack=netkey
conn work
authby=secret
auto=start
type=tunnel
left=10.232.204.146
leftsubnet=10.0.0.0/8
right=99.xx.xx.xx
rightsubnet=192.168.1.0/24
ike=aes256-sha1,aes128-sha1,3des-sha1
leftxauthusername=xxxxx
这是我的 ipsec.secrets
@massivedude : XAUTH "password"
10.232.204.146 vpnserver-01 : PSK "YouWillNeverKnow"
顺便说一句,尽管隧道已启动,我无法 ping 通内部主机,但我仍然可以 ping 通 yahoo.com 和 google.com
任何帮助将不胜感激。
答案1
由于 Comcast 对其整个网络使用 NAT(此处为 10.0.0.0/8 地址),因此您在使用 Comcast 时需要启用nat_traversal
此连接。
原因是 IPSEC 数据包包含整个数据包的哈希值包括源地址但是 NAT 将源地址从 10.232.204.146 更改为某个您不知道的公共 IP,因此现在哈希不再与数据包匹配,另一端将丢弃该数据包,因为它已被篡改(同样,另一端的数据包的目标地址将从任何公共 IP 更改为 10.232.204.146 并被丢弃)。
NAT Traversal 改变了数据包的发送方式。加密数据包不是直接发送,而是被包裹在未经哈希处理的常规 UDP 数据包中。然后,NAT 可以更改 UDP 数据包上的 IP 地址,以确保它到达目的地,而原始加密数据包保持不变,仍可进行验证。
我相信像这样包装数据包会产生额外的开销,因此最好只在必要时打开它。