Ipsec

隧道已開通,但我無法 ping

  • December 28, 2016

我需要了解並解決我的問題。我知道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 我的內部伺服器,這些伺服器的 IP 為 192.168.1.xxx。

這是我的 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

任何幫助將不勝感激。

因為 Comcast 對其整個網路使用 NAT(此處為您的 10.0.0.0/8 地址),您需要nat_traversal在使用 Comcast 時啟用此連接。

這樣做的原因是因為 IPSEC 數據包包括整個數據包的散列,包括源地址。但是 NAT 將源地址從 10.232.204.146 更改為一些你不知道的公共 IP,所以現在雜湊不再匹配數據包,並且另一端將丟棄該數據包,因為它已被篡改(同樣來自另一端的數據包end 將目標地址從任何公共 IP 更改為 10.232.204.146 並被丟棄)。

NAT Traversal 改變了數據包的發送方式。加密的數據包不是直接發送數據包,而是包裝在一個沒有散列的正常 UDP 數據包中。然後 NAT 可以更改 UDP 數據包上的 IP 地址,以確保它到達它需要去的地方,而原始加密數據包保持不變並且仍然可以驗證。

我相信像這樣包裝數據包會有額外的成本,所以最好只在必要時打開它。

引用自:https://serverfault.com/questions/823073