Routing

從 LAN 路由到 OpenVPN

  • October 19, 2018

我需要設置從本地網路到 VPN 的路由。也就是說,區域網路內的任何人都應該能夠與 VPN 中的機器進行通信,而無需自己成為 VPN 客戶端。問題是,說到網路,我有點傻……

本地網路有一個 8 位範圍,192.168.2.X VPN 伺服器本身在另一個網路中,在 192.168.3.20(8 位) VPN 網路有一個 16 位範圍,10.8.XX

執行openvpn伺服器的機器的eth0介面有一個靜態IP在192.168.3.20。vpn伺服器本身的tun0介面監聽10.8.0.1

我們已經在做的是將本地網路中到 10.8.xx 的數據包重新路由到伺服器:

traceroute to 10.8.0.1 (10.8.0.1), 30 hops max, 60 byte packets
1  gateway (192.168.2.1)  2.508 ms  2.364 ms  2.325 ms
2  10.8.0.1 (10.8.0.1)  1.898 ms  1.895 ms  1.911 ms

所以我已經可以通過 10.8.0.1 ssh 進入它,這很好。

但是,當我嘗試訪問 VPN 中的客戶端時,結果卻大不相同:

traceroute to 10.8.0.178 (10.8.0.178), 30 hops max, 60 byte packets
1  gateway (192.168.2.1)  2.315 ms  2.152 ms  2.036 ms
2  192.168.3.20 (192.168.3.20)  1.764 ms  1.760 ms  1.776 ms
3  * * *
etc...

讓我有點惱火的是,對伺服器的直接請求在 10.8.0.1 終止,而我原本預計它要麼不起作用,要麼在 192.168.3.20 終止。所以很明顯我不太了解這裡發生了什麼……

從那裡開始,我想我可以通過將 eth0 上的流量轉發到 tun0 來解決這個問題:

sudo iptables -A FORWARD -i eth0 -o tun0 -d 10.8.0.0/16 -j ACCEPT

但這沒有任何效果。這幾乎就是我卡住的地方。我嘗試了上述的一些變體,並在 OpenVPN 配置中使用了路由,所有這些都沒有任何明顯的變化。

有趣的是,跟踪活動實際上顯示在

*VPN log, but I don't understand much of what's going on here either:
Fri Oct 19 11:57:53 2018 us=219532 GET INST BY VIRT: 10.8.0.158 -> y18022c/185.184.117.20:1194 via 10.8.0.158
Fri Oct 19 11:57:53 2018 us=219539 y18022c/185.184.117.20:1194 TUN READ [60]
Fri Oct 19 11:57:53 2018 us=219544 y18022c/185.184.117.20:1194 TLS: tls_pre_encrypt: key_id=0
Fri Oct 19 11:57:53 2018 us=219555 y18022c/185.184.117.20:1194 ENCRYPT IV: 14c0471a 9fe7860f
Fri Oct 19 11:57:53 2018 us=219580 y18022c/185.184.117.20:1194 ENCRYPT FROM: 000000ae fa450000 3cac0400 000b1135 5ec0a803 010a0800 9e98b682 bf00282[more...]
Fri Oct 19 11:57:53 2018 us=219612 y18022c/185.184.117.20:1194 ENCRYPT TO: 14c0471a 9fe7860f 00bbfc72 b50c8915 8390d362 82f0a84c c22803b1 2a7ceca[more...]
Fri Oct 19 11:57:53 2018 us=219622 PO_CTL rwflags=0x0002 ev=4 arg=0x5654a4302150
Fri Oct 19 11:57:53 2018 us=219629 PO_CTL rwflags=0x0000 ev=5 arg=0x5654a4302068
Fri Oct 19 11:57:53 2018 us=219637 I/O WAIT Tr|Tw|Sr|SW [0/63574]
Fri Oct 19 11:57:53 2018 us=219646 PO_WAIT[0,0] fd=4 rev=0x00000004 rwflags=0x0002 arg=0x5654a4302150 
Fri Oct 19 11:57:53 2018 us=219652  event_wait returned 1
Fri Oct 19 11:57:53 2018 us=219658 I/O WAIT status=0x0002
Fri Oct 19 11:57:53 2018 us=219696 y18022c/185.184.117.20:1194 UDPv4 WRITE [101] to [AF_INET]185.184.117.20:1194: P_DATA_V1 kid=0 DATA c15dc78e ddd12705 8c3a860c 9cd9fe1e da29c4b2 14c0471a 9fe7860f 00bbfc7[more...]
Fri Oct 19 11:57:53 2018 us=219707 y18022c/185.184.117.20:1194 UDPv4 write returned 101
Fri Oct 19 11:57:53 2018 us=219715 PO_CTL rwflags=0x0001 ev=4 arg=0x5654a4302150
Fri Oct 19 11:57:53 2018 us=219722 PO_CTL rwflags=0x0001 ev=5 arg=0x5654a4302068
Fri Oct 19 11:57:53 2018 us=219730 I/O WAIT TR|Tw|SR|Sw [0/63574]
Fri Oct 19 11:57:53 2018 us=231770 PO_WAIT[0,0] fd=4 rev=0x00000001 rwflags=0x0001 arg=0x5654a4302150 
Fri Oct 19 11:57:53 2018 us=231782  event_wait returned 1
Fri Oct 19 11:57:53 2018 us=231789 I/O WAIT status=0x0001
Fri Oct 19 11:57:53 2018 us=231799 UDPv4 read returned 53
Fri Oct 19 11:57:53 2018 us=231809 GET INST BY REAL: 185.184.117.20:1194 [succeeded]
Fri Oct 19 11:57:53 2018 us=231837 y18022c/185.184.117.20:1194 UDPv4 READ [53] from [AF_INET]185.184.117.20:1194: P_DATA_V1 kid=0 DATA 1196c495 845bb7fd e61cc8d8 ed4d427a b901d6c8 e81fe5a9 3ab1acce b5687f0[more...]
Fri Oct 19 11:57:53 2018 us=231846 y18022c/185.184.117.20:1194 TLS: tls_pre_decrypt, key_id=0, IP=[AF_INET]185.184.117.20:1194
Fri Oct 19 11:57:53 2018 us=231859 y18022c/185.184.117.20:1194 DECRYPT IV: e81fe5a9 3ab1acce
Fri Oct 19 11:57:53 2018 us=231876 y18022c/185.184.117.20:1194 DECRYPT TO: 00000036 fa2a187b f3641eb4 cb07ed2d 0a981fc7 48
Fri Oct 19 11:57:53 2018 us=231897 y18022c/185.184.117.20:1194 PID_TEST [0] [SSL-0] [>EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE] 0:53 0:54 t=1539943073[0] r=[0,64,15,0,1] sl=[11,53,64,528]
Fri Oct 19 11:57:53 2018 us=231905 y18022c/185.184.117.20:1194 RECEIVED PING PACKET*

我最大的問題是我真的不知道這裡到底發生了什麼……為什麼對 10.8.0.1 的請求沒有通過 192.168.3.20 路由?我的意思是,在終止 VPN 之前必須通過實際伺服器是合乎邏輯的……?當請求到達 eth0 時(從 192.168.3.20 顯示在跟踪中可以看出),為什麼不將它們轉發到 tun0?openVPN 本身是否在這裡阻止了某些東西?

我沒有足夠的評論點,但我想知道你是如何連接 192.168.2.X 和 192.168.3.X 的?猜測一下,您需要將 192.168.3.X 的路由推回 VPN 的另一端。在 /etc/openvpn/server.conf 中添加到 192.168.2.X 的路由:(你可能已經有 192.168.3.X 網路)

# /etc/openvpn/server.conf
# Router Subnet
route 192.168.3.0 255.255.255.0
push "route 192.168.3.0 255.255.255.0"
# The other local Subnet that you need to tell the far end about
route 192.168.2.0 255.255.255.0
push "route 192.168.2.0 255.255.255.0"

現在假設本地 vpn 伺服器是 LAN 的預設網關,每一方都應該能夠路由到另一方。

你是這個意思嗎?

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