OpenVPN 路由指令概述

OpenVPN 路由指令概述

我的情況如下所述: 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的幫忙。

相關內容