Iptables
同一台機器上的 OpenVPN 客戶端和伺服器 - 連接客戶端時伺服器不允許連接
我是這個社區的新手,希望有人可以幫助我。如果我沒有發布所有必需的資訊,請告訴我。
情況:
- 我有一個 linux 伺服器(樹莓派,192.168.1.2),作為付費 VPN 提供商的 OpenVPN 客戶端(tun1)。我通過使用 linux 伺服器作為預設網關 (192.168.1.2) 在本地與 LAN 客戶端共享此 VPN 連接。這工作沒有任何問題。
- 在同一台 linux 伺服器上,我正在執行一個單獨的 openVPN 實例(VPN 伺服器,tun0)以允許 WAN 客戶端連接。只要未建立與付費 VPN 提供商的 VPN 客戶端連接,這也可以正常工作。
- 我的最終目標是與通過單獨的 openVPN 伺服器 (tun0) 實例連接的 WAN 客戶端共享付費 VPN 連接 (tun1)。
我的本地網路設置方案:
問題:
- 只要我不同時執行它們,openVPN 客戶端和 openVPN 伺服器實例就可以正常工作。一旦他們的 openVPN 客戶端連接到付費 VPN 提供商,WAN 客戶端就無法連接到 openVPN 伺服器。
- 通過查看日誌文件,我發現只要建立付費 VPN 連接,WAN 客戶端握手就會失敗。我認為這是因為一旦建立了這個付費 VPN 連接,所有傳出的網際網路流量都會通過隧道 (tun1) 路由,因此客戶端的握手請求仍然沒有得到答复。我不知道如何解決這個問題。
如果配置
pi@server:~ $ ifconfig -a eth0 Link encap:Ethernet HWaddr b8:27:eb:f2:c1:98 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth1 Link encap:Ethernet HWaddr 58:82:a8:8d:9a:fa inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:203 errors:0 dropped:0 overruns:0 frame:0 TX packets:165 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:22948 (22.4 KiB) TX bytes:24938 (24.3 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.77.0.1 P-t-P:10.77.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.130.1.70 P-t-P:10.130.1.69 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
iptables
pi@server:~ $ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- anywhere anywhere udp dpt:1199 Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- 10.77.0.0/24 anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination
Route -n(當 tun0/tun1未執行且未連接時)
pi@server:~ $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
Route -n(當 tun0 正在執行和連接時)
pi@server:~ $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 10.77.0.0 10.77.0.2 255.255.255.0 UG 0 0 0 tun0 10.77.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
Route -n(當 tun1 正在執行和連接時)
pi@raspi-cyberghost:~ $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.130.0.133 128.0.0.0 UG 0 0 0 tun1 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 10.77.0.0 10.77.0.2 255.255.255.0 UG 0 0 0 tun0 10.77.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.130.0.1 10.130.0.133 255.255.255.255 UGH 0 0 0 tun1 10.130.0.133 0.0.0.0 255.255.255.255 UH 0 0 0 tun1 107.183.241.2 192.168.1.1 255.255.255.255 UGH 0 0 0 eth1 128.0.0.0 10.130.0.133 128.0.0.0 UG 0 0 0 tun1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
在連接 OpenVPN 客戶端 (tun1) 時嘗試連接時的 OpenVPN 伺服器 (tun0) 錯誤日誌
Tue Mar 21 08:06:19 2017 us=593849 172.56.28.50:24844 TLS: Initial packet from [AF_INET]172.56.28.50:24844, sid=d25df6fb 2136a7cc Tue Mar 21 08:07:19 2017 us=128339 172.56.28.50:24844 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) Tue Mar 21 08:07:19 2017 us=128603 172.56.28.50:24844 TLS Error: TLS handshake failed Tue Mar 21 08:07:19 2017 us=129254 172.56.28.50:24844 SIGUSR1[soft,tls-error] received, client-instance restarting
找到了我的解決方案。問題是有必要建立兩個路由表:一個處理到 Pi 的傳入流量(及其相應的回复),另一個處理來自 Pi 的傳出流量(及其回复)。
第二個路由表為我解決了這個問題:
ip rule add from 192.168.1.2 lookup 10 # Pi server ip route add default via 192.168.1.1 table 10 # LAN router