networkmanager-strongswan vpn - IKEv2 路由問題
直到今天,我與公司的 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”。
資料來源:
- https://dev.freebox.fr/bugs/task/33846
- https://dev.freebox.fr/bugs/task/31957
- https://www.geeek.org/tunnel-vpn-iphone-android-freebox-181/
搜尋引擎的法語關鍵字:
Problème de connexion VPN IKEv2 strongswan avec 網路管理器 - 免費免費盒