Linux-Mint

networkmanager-strongswan vpn - IKEv2 路由問題

  • February 8, 2021

直到今天,我與公司的 VPN 連接都是使用 networkmanager-strongswan 開箱即用的。

但是今天(在核心為 5.8.0-38 的 linux mint 20.1 上),我可以建立與 VPN 主機的連接,但我無法訪問任何遠端服務(web、git、rdp …)。ping 遠端 IP 也不起作用。

我在網際網路上閱讀了很多文章和教程,並嘗試了很多愚蠢的事情,但我沒有設法解決我的問題:這就是我現在尋求幫助的原因。

唯一有效的方法是像這樣使用 charon-cmd:

sudo charon-cmd --cert <path_to_cert> --host <host_ip> --identity <identity>

但我將此解決方案視為一種解決方法,因為我喜歡使用 NetworkManager 作為 GUI 方法來連接/斷開連接,並且通過使用此解決方案,我失去了對 LAN 服務的訪問權限。

我真的不擅長網路配置,但據我了解,這可能是一個路由問題,因為 charon-cmd 定義了基於路由的連接,而 ipsec 和 networkmanager 使用了策略。我還注意到 charon-cmd 使用 ipsec0 設備,而 ipsec 和 networkmanager 都沒有。

以下是使用 networkmanager 連接到 VPN 時添加的策略:

src 10.x.x.x/32 dst 0.0.0.0/0 
   dir out priority 383615 
   tmpl src 192.168.1.55 dst <host_ip>
       proto esp spi 0xc4ec728f reqid 14 mode tunnel
src 0.0.0.0/0 dst 10.x.x.x/32 
   dir fwd priority 383615 
   tmpl src <host_ip> dst 192.168.1.55
       proto esp reqid 14 mode tunnel
src 0.0.0.0/0 dst 10.x.x.x/32 
   dir in priority 383615 
   tmpl src <host_ip> dst 192.168.1.55
       proto esp reqid 14 mode tunnel

這是 iptable-save 的輸出:

*mangle
:PREROUTING ACCEPT [58835:28708461]
:INPUT ACCEPT [58835:28708461]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [55809:6989866]
:POSTROUTING ACCEPT [55985:7014824]
:LIBVIRT_PRT - [0:0]
-A POSTROUTING -j LIBVIRT_PRT
-A LIBVIRT_PRT -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
*nat
:PREROUTING ACCEPT [306:39378]
:INPUT ACCEPT [5:2408]
:OUTPUT ACCEPT [1193:105475]
:POSTROUTING ACCEPT [1119:99608]
:LIBVIRT_PRT - [0:0]
-A POSTROUTING -j LIBVIRT_PRT
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A LIBVIRT_PRT -s 192.168.122.0/24 -d 192.168.122.0/24 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [12:1454]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8:916]
:LIBVIRT_FWI - [0:0]
:LIBVIRT_FWO - [0:0]
:LIBVIRT_FWX - [0:0]
:LIBVIRT_INP - [0:0]
:LIBVIRT_OUT - [0:0]
:ufw-after-forward - [0:0]
:ufw-after-input - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-after-logging-input - [0:0]
:ufw-after-logging-output - [0:0]
:ufw-after-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-before-input - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-before-logging-input - [0:0]
:ufw-before-logging-output - [0:0]
:ufw-before-output - [0:0]
:ufw-reject-forward - [0:0]
:ufw-reject-input - [0:0]
:ufw-reject-output - [0:0]
:ufw-track-forward - [0:0]
:ufw-track-input - [0:0]
:ufw-track-output - [0:0]
-A INPUT -j LIBVIRT_INP
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A FORWARD -j LIBVIRT_FWX
-A FORWARD -j LIBVIRT_FWI
-A FORWARD -j LIBVIRT_FWO
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A OUTPUT -j LIBVIRT_OUT
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
-A LIBVIRT_FWI -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A LIBVIRT_FWI -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A LIBVIRT_FWO -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A LIBVIRT_FWO -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A LIBVIRT_FWX -i virbr0 -o virbr0 -j ACCEPT
-A LIBVIRT_INP -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A LIBVIRT_INP -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A LIBVIRT_INP -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A LIBVIRT_INP -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A LIBVIRT_OUT -o virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A LIBVIRT_OUT -o virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A LIBVIRT_OUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A LIBVIRT_OUT -o virbr0 -p tcp -m tcp --dport 68 -j ACCEPT
COMMIT

謝謝!


編輯:

無 VPN 的路由(表 220)

192.168.1.0/24 dev enp3s0 proto static src 192.168.1.55 
192.168.122.0/24 dev virbr0 proto static src 192.168.122.1 linkdown

通過 NetworkManager 使用 VPN 的路由(表 220)

default via 192.168.1.1 dev enp3s0 proto static src 10.x.x.x 
192.168.1.0/24 dev enp3s0 proto static src 192.168.1.55 
192.168.122.0/24 dev virbr0 proto static src 192.168.122.1 linkdown

通過 charon-cmd 使用 VPN 的路由(表 220)

default dev ipsec0 proto static src 10.x.x.x 
<host_ip> via 192.168.1.1 dev enp3s0 proto static src 192.168.1.55 
192.168.1.0/24 dev ipsec0 proto static src 192.168.1.55 
192.168.122.0/24 dev ipsec0 proto static src 192.168.122.1 

注意:charon-cmd 定義了一個 ipsec0 設備,而 NetworkManager 只創建了一個虛擬 IP 地址。

最後,我通過機緣巧合解決了我的問題!:)

這週末我不在家,並嘗試按照@ecdsa 的建議查看統計數據(謝謝!)。看來,當我使用 NM 連接到 VPN 時,它正在工作。我得出結論,我的問題不是配置問題,而是 ISP 問題。

經過一番搜尋,我發現我的法國 ISP“免費”將一個 ip v4 共享給 4 個客戶(通過將埠範圍拆分為 4 個子範圍)。解決方案是讓我的 IPS 給我一個“全棧 ipv4”。

資料來源:

搜尋引擎的法語關鍵字:

Problème de connexion VPN IKEv2 strongswan avec 網路管理器 - 免費免費盒

引用自:https://unix.stackexchange.com/questions/629903