
我的情況如下所述: 1-我有 2 個 OpenVPN 伺服器(伺服器 A 和伺服器 B)。
2- 用戶端透過 VPN 連接到每個伺服器,而不是直接 LAN。
3- 伺服器 B 以 VPN 用戶端連接到伺服器 A。
4- 伺服器 B 運行 2 個 OpenVPN 實例
5-假設筆記型電腦 B 透過 VPN 連接到伺服器 B,我需要它來到達伺服器 A(至少)。
6-伺服器 A VPN DHCP 為 10.8.0.0/24
7- 伺服器 B VPN DHCP 為 172.30.0.0/16
8- 伺服器 B 具有靜態 IP 10.8.0.101(VPN 用戶端)
- 問題是我無法從筆記型電腦 B 存取伺服器 A。
網路配置如下:
伺服器A配置
[root@localhost ~]# ifconfig
eth0 inet addr:X.X.X.X Bcast:X.X.X.255 Mask:255.255.255.0
eth0:0 inet addr:X.X.X.X Bcast:X.X.255.255 Mask:255.255.0.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:629066 errors:0 dropped:0 overruns:0 frame:0
TX packets:416252 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:136006302 (129.7 MiB) TX bytes:114377768 (109.0 MiB)
伺服器B
[root@vps8887 ~]# ifconfig
eth0 inet addr:X.X.X.X Bcast:X.X.X.255 Mask:255.255.255.0
eth0:0 inet addr:X.X.X.X Bcast:X.X.X.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.30.0.1 P-t-P:172.30.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:69 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:4140 (4.0 KiB) TX bytes:240 (240.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.8.0.101 P-t-P:10.8.0.102 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:34 errors:0 dropped:0 overruns:0 frame:0
TX packets:105 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2856 (2.7 KiB) TX bytes:8820 (8.6 KiB)
伺服器A的路由:
[root@localhost ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.8.0.2 * 255.255.255.255 UH 0 0 0 tun0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
伺服器B的路由:
[root@vps8887 ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.8.0.102 * 255.255.255.255 UH 0 0 0 tun1
172.30.0.2 * 255.255.255.255 UH 0 0 0 tun0
X.X.X.0 * 255.255.255.0 U 0 0 0 eth0
10.8.0.0 10.8.0.101 255.255.255.0 UG 0 0 0 tun1
X.X.X.0 * 255.255.255.0 U 0 0 0 eth0
172.30.0.0 172.30.0.2 255.255.0.0 UG 0 0 0 tun0
link-local * 255.255.0.0 U 0 0 0 eth0
default X.X.X.1 0.0.0.0 UG 0 0 0 eth0
default X.X.X.1 0.0.0.0 UG 0 0 0 eth0
當我嘗試在伺服器 A 上新增路由時,新增以下命令時出現問題:
route add -net 172.30.0.0/16 gw 10.8.0.101
出現此錯誤:
“SIOCADDRT:網路無法存取”
serverA 連接埠 1194 的 OpenVPN 配置
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
client-to-client
duplicate-cn
server 10.8.0.0 255.255.255.0
client-config-dir ccd
push "dhcp-option DNS 10.8.0.1"
status openvpn-status.log
keepalive 10 120
comp-lzo
persist-key
persist-tun
crl-verify /etc/openvpn/crl.pem
verb 3
================ Server B Client ccd ================
push "dhcp-option DNS 8.8.8.8"
ifconfig-push 10.8.0.101 10.8.0.102
=====================================================
伺服器 B 的 OpenVPN 配置
======================= Server B ( Server Config )========================
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
client-to-client
duplicate-cn
server 172.30.0.0 255.255.0.0
push " route 10.8.0.0 255.255.255.0 "
status openvpn-status.log
keepalive 10 120
comp-lzo
persist-key
persist-tun
verb 3
==============================================================================
================= Server B ( Client Config )==============================
client
dev tun
proto udp
remote serverA 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
route-nopull
route 10.8.0.0 255.255.255.0 10.8.0.101
comp-lzo
verb 5
===============================================================================
最後:我需要這些網站相互交流。
答案1
OpenVPN 路由指令概述
路線
該route
命令進入伺服器配置並告訴伺服器將路由新增至自己的核心路由表。您不需要在指令route
中新增針對子網路的命令server
,但您確實需要route
為伺服器應處理的每個其他子網路新增命令。本質上,這將告訴核心將這些子網路傳送到 openvpn 伺服器。例如:
# serverA.conf (just a fragment)
server 10.8.0.0 255.255.255.0
...
route 172.30.0.0 255.255.255.0 # Add a route to the kernel routing table
路線
此iroute
指令建立 openvpn 的「內部」路由,以便 openvpn 伺服器知道哪些客戶端負責子網,如所述這裡和這裡。在封包到達核心路由表之前,openvpn 在封包從 tun/tap 裝置傳入時對其進行解密,並檢查它們以了解如何處理它們。如果沒有 iroute 指令,伺服器將無法辨識它們。
# ccd/ServerB.conf
iroute 172.30.0.0
推“路線...”
該push
命令也可用於其他用途,但對於路由,您需要push
子網路到客戶端的路由。這將告訴客戶端更改其核心路由表以將流量傳送到 VPN 伺服器。如果沒有這個,客戶端將不知道如何從私有子網路 10.8.0.0 到 172.30.0.0 取得封包。這些應該放在 ccd/客戶端中,或者如果對所有客戶端通用,則只放在伺服器配置中。
# ServerA.conf (more of the fragment)
server 10.8.0.0 255.255255.0
...
route 172.30.0.0 255.255.255.0 # add the route to the server's kernel
push "route 172.30.0.0 255.255.255.0" # add the route to the clients
客戶對客戶
該client-to-client
命令告訴伺服器允許客戶端相互通訊。我相信這是預設註釋的並且是必要的。
核心ip轉發
這不是 OpenVPN 配置,以下內容特定於 Linux。不過,這對於任何運行 OpenVPN 伺服器的人來說都很重要。每個伺服器必須在核心中啟用 ip 轉發,例如這。也要確保防火牆規則不會阻止轉送。
關於您的設置
您似乎缺少iroute
指令。伺服器 B 在其 ccd 檔案中需要一個條目。該iroute
指令告訴 openvpn 伺服器哪個客戶端知道該子網路。
# ccd/ServerB
iroute 172.30.0.0 255.255.255.0
編輯:再看一遍,我注意到另一件事。
伺服器 A 似乎也沒有將到伺服器 B 的路由推送到其客戶端:
# ServerA config
push " route 172.30.0.0 255.255.255.0 "
我使用兩台運行 openvpn 的伺服器來執行此操作。您不必手動新增任何到任何機器的路由。如果您的 openvpn 配置正確,伺服器 B 將告訴伺服器 A 它使用 . 處理 172.30.0.0 iroute
。伺服器 A 將告訴客戶端透過伺服器 A 發送 172.30.0.0 push " route ... "
。並且您已經有伺服器 B 推送 10.8.0.0 的路由。
為了測試這是否有效,我建議ping
不要嘗試新增路由。
答案2
我自己解決。重要的是「ipforwarding」雙方都沒有啟用。這是主要問題。 iroute 對我來說不太清楚,我看了這篇文章: OpenVPN 和 iroute 路由全部由OpenVPN完成。無需手動路由。如下圖所示:
最後感謝Danger Ginger的幫忙。