设置如下:
[OpenVPN server] --- WAN --- [RouterOS client] --- [Local subnet client]
10.5.0.0 10.5.0.14 10.10.10.2
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 123.45.128.1 0.0.0.0 UG 0 0 0 eth0
10.5.0.0 10.5.0.2 255.255.255.0 UG 0 0 0 tun0
10.5.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
123.45.128.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 123.45.67.89 netmask 255.255.240.0 broadcast 123.45.123.255
inet6 fe80::b47f:49ff:fe42:8567 prefixlen 64 scopeid 0x20<link>
ether b6:7f:49:42:85:67 txqueuelen 1000 (Ethernet)
RX packets 106602 bytes 58005294 (58.0 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 129890 bytes 57533013 (57.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 296 bytes 89008 (89.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 296 bytes 89008 (89.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.5.0.1 netmask 255.255.255.255 destination 10.5.0.2
inet6 fe80::8d8b:2759:671:2327 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 1015 bytes 69353 (69.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2248 bytes 325055 (325.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$sudo ufw status
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
$ ping 10.5.0.14
reachable, 0% packet loss
❔ 如何从 [OpenVPN 服务器] 路由到 [本地子网]?例如ping 10.10.10.2
答案1
如果您想要访问 openvpn 客户端后面的子网,您需要两样东西(这仅适用于基于路由的(tun 设备)VPN):
- 激活客户端特定配置(
--client-config-dir
) - 在正确客户端的配置中,使用交换机
--iroute
告诉 openvpn 它应路由隧道内的子网
之后,您需要在客户端上激活 IP 转发 - 并调整防火墙。应该就是这样...
这里是我提到的开关的详细描述。
希望能帮助到你!
答案2
主动路由需要配置两端来识别允许它们访问对方网络地址的节点,此外还需要配置防火墙规则来让流量通过。
我猜想这些信息对应于 OpenVPN 服务器;它的末尾说要到达 10.5.0.0/24 应该经过节点 10.5.0.2,而要到达 10.18.0.0/16 应该经过默认网关 (eth0)。没有到 10.10.10.0/24 的路由,那么你应该添加它:
ip route add 10.10.10.0/24 via 10.5.0.14
那么路径的前半部分是
openvpn(10.5.0.1)-->10.5.0.2-->10.5.0.14(RouterOS)-->10.10.10.x
另一方面,RouterOS 位于 vpn 网络段 10.5.0.0 中,因此它应该已经有一条到达 10.5.0.1 服务器的路由,路径为:
RouterOS(10.5.0.14)-->10.5.0.1(openvpn)
但是任何客户端 10.10.10.x 也必须知道如何到达 10.5.0.1;如果 RouterOS 是它们的默认网关,地址可能是 10.10.10.254 或 10.10.10.1,这就足够了,我们有以下返回路径:
client 10.10.10.2-->10.10.10.1(RouterOS)10.5.0.14-->10.5.0.1(openvpn)
如果 RouterOS 不是默认网关,则需要在该网关中添加一条规则(以便任何客户端都可以连接),否则在每个所需的客户端中添加一条规则。因此,如果 10.10.10.2 是 Linux,则需要指示路径的下一步在哪里:
ip route add 10.5.0.0/24 via 10.5.0.14
如果 10.10.10.2 也作为客户端连接到 VPN 并具有 10.5.0.x 地址,则它应该已经具有到 10.5.0.x 的路由(如 RouterOS 一样),并且能够遍历显示的路径而无需更多路由。
我希望这个说明能够澄清所需的路由概念:“我知道如何联系你,你也知道如何联系我,让我们谈谈吧。”:)