Ipsec

客戶端數據包未通過 strongSwan IPsec 站點到站點隧道為同一伺服器上的客戶端和網關轉發

  • December 4, 2017

我在我的 CentOS 7 虛擬專用伺服器(子網 172.25.10.0/24 的公共 IP xxx233)和客戶的網路(子網 10.9.200.0/24 的公共 IP yyy24)之間設置了一個站點到站點的 IPsec 隧道。隧道似乎連接良好,但我無法讓交通通過它。我正在嘗試在充當網關的同一主機上設置 172.25.10.0/24 子網,我認為我做錯了。

VPS上的部分conn是:ipsec.conf

conn customer
   esp=aes256-sha1-modp1024
   ike=aes256-sha1-modp1024
   keyexchange=ikev1
   authby=psk
   left=%defaultroute
   leftsubnet=172.25.10.0/24
   leftfirewall=yes
   right=y.y.y.24
   rightsubnet=10.9.200.0/24
   auto=start

據我所知,隧道本身執行良好。strongswan statusallVPS上顯示:

Security Associations (1 up, 0 connecting):
     customer[29]: ESTABLISHED 110 minutes ago, x.x.x.233[x.x.x.233]...y.y.y.24[y.y.y.24]
     customer[29]: IKEv1 SPIs: 0123456789abcdef_i* 0123456789abcdef_r, pre-shared key reauthentication in 50 minutes
     customer[29]: IKE proposal: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
     customer{88}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: 01234567_i 01234567_o
     customer{88}:  AES_CBC_256/HMAC_SHA1_96/MODP_1024, 0 bytes_i, 0 bytes_o, rekeying in 7 minutes
     customer{88}:   172.25.10.0/24 === 10.9.200.0/24

我在包含公共 IP (xxx233) 的同一介面上的 VPS 上設置了一個子網 IP (172.25.10.2):

ip addr add 172.25.10.2/32 dev eth0

但是當我從 VPS ping 遠端網路上的 IP 時,ping 失敗:

# ping -I 172.25.10.2 -c 3 10.9.200.254
PING 10.9.200.254 (10.9.200.254) from 172.25.10.2 : 56(84) bytes of data.

--- 10.9.200.254 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms

tcpdump 顯示 IPsec 隧道沒有被使用:

# tcpdump -n host 10.9.200.254 or host y.y.y.24
03:51:07.193494 IP x.x.x.233 > 10.9.200.254: ICMP echo request, id 10193, seq 1, length 64
03:51:08.193449 IP x.x.x.233 > 10.9.200.254: ICMP echo request, id 10193, seq 2, length 64
03:51:09.193452 IP x.x.x.233 > 10.9.200.254: ICMP echo request, id 10193, seq 3, length 64

我猜只是將 172.25.10.2 IP 添加到eth0它不足以確定我的流量應該通過隧道路由,但我不確定正確的方法是什麼。

值得一提的是,在打開 strongSwan 之前,我還執行了以下命令:

# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
# sysctl -p
# firewall-cmd --zone=public --permanent --add-service="ipsec"
# firewall-cmd --zone=public --permanent --add-port=4500/udp
# firewall-cmd --zone=public --permanent --add-masquerade
# firewall-cmd --reload

否則我沒有觸及機器的配置/路由規則/等。

應該路由 IPsec 流量,您可能會遇到影響 IPsec 流量的預設 NAT 規則的預設 NAT 問題。補救措施是:

iptables -t nat -I POSTROUTING 1 -m policy --pol ipsec --dir out -j ACCEPT

或帶有firewall-cmd --add-rule.

如果您配置了任何 NAT 規則,例如MASQUERADEvia --add-masquerade,則必須排除與 IPsec 策略匹配的流量被 natted。否則,該流量只會被過濾到公共 IP,不再與 IPsec 策略匹配,也不會通過隧道。如strongSwan wiki上所述,您需要插入如下規則(在任何 NAT 規則之前,-I如果 NAT 規則已經存在,則嘗試執行此操作):

iptables -t nat -I POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT

如有必要,也可以更具體(例如,僅包括某些源 IP)。我不知道firewall-cmd,所以我不確定你會怎麼做。但類似以下的內容(在行前執行--add-masquerade)可能會起作用:

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -m policy --pol ipsec --dir out -j ACCEPT

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