OpenVPN 路由命令概述

OpenVPN 路由命令概述

我的情况如下: 1-我有 2 个 OpenVPN 服务器(服务器 A 和服务器 B)。

2- 客户端通过 VPN 连接到每个服务器,没有直接的 LAN。

3-服务器 B 作为 VPN 客户端连接到服务器 A。

4- 服务器 B 运行 2 个 OpenVPN 实例

5- Asuume 笔记本电脑 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 无法通过 VPN 服务器 IP 而不是客户端 IP 访问服务器 B。

网络结构(图片)

网络配置如下:

服务器 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:网络不可访问”

服务器A端口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/client 或仅进入服务器配置(如果它适用于所有客户端)。

# 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的帮助。

相关内容