![OpenVPN | 如何让服务器通过OpenVPN网关与局域网中的另一台服务器通信?](https://linux22.com/image/684168/OpenVPN%20%7C%20%E5%A6%82%E4%BD%95%E8%AE%A9%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%9A%E8%BF%87OpenVPN%E7%BD%91%E5%85%B3%E4%B8%8E%E5%B1%80%E5%9F%9F%E7%BD%91%E4%B8%AD%E7%9A%84%E5%8F%A6%E4%B8%80%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%9A%E4%BF%A1%EF%BC%9F.png)
我一直在尝试让我的 EC2 实例 (OMD) 通过另一个 EC2 实例 (OpenVPN) 与我的 LAN 服务器 (Raspberry Pi) 通信,但我无法让它工作。
OMD 服务器可以 ping 通 RPi,但无法通过 SSH 连接到它,尽管 SSH 设置是默认的,并且没有防火墙。不过端口 6556 可以访问。
OMD 服务器的端口扫描
[root@omd ~]# nc -zvv 192.168.16.150 6556
Connection to 192.168.16.150 6556 port [tcp/*] succeeded!
[root@omd ~]# nc -zvv 192.168.16.150 22
nc: connect to 192.168.16.150 port 22 (tcp) failed: Connection timed out
[root@omd ~]#
RPi 的 22 和 6556 对所有人开放,但为什么 OMD 无法通过 SSH 连接到它?
root@rpi:~# netstat -tunlp | egrep "6556|22"
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 535/sshd
tcp 0 0 0.0.0.0:6556 0.0.0.0:* LISTEN 743/xinetd
tcp6 0 0 :::22 :::* LISTEN 535/sshd
root@rpi:~#
这就是我一直想要实现的目标。请看这个关联。
- OpenVPN与RPi通过VPN连接
- OMD 不会连接到 VPN,它只会使用 OpenVPN 服务器作为网关
- OMD 将通过 OpenVPN 服务器与 RPi 通信,反之亦然
你能帮我一下吗?
如果您需要更多信息,请告诉我。
提前谢谢大家!
AWS-OMD
eth0:10.0.0.4
=======================
PING
=======================
[root@omd ~]# ping -c 3 192.168.16.150
PING 192.168.16.150 (192.168.16.150) 56(84) bytes of data.
64 bytes from 192.168.16.150: icmp_seq=1 ttl=63 time=100 ms
64 bytes from 192.168.16.150: icmp_seq=2 ttl=63 time=100 ms
64 bytes from 192.168.16.150: icmp_seq=3 ttl=63 time=159 ms
--- 192.168.16.150 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2159ms
rtt min/avg/max/mdev = 100.072/119.877/159.357/27.917 ms
[root@omd ~]#
=======================
TRACEROUTE
=======================
[root@omd ~]# traceroute 192.168.16.150
traceroute to 192.168.16.150 (192.168.16.150), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
[root@omd ~]#
=======================
ROUTE TABLE
=======================
[root@omd ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.16.0 10.0.0.5 255.255.255.0 UG 0 0 0 eth0
172.17.0.0 10.0.0.5 255.255.255.0 UG 0 0 0 eth0
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
[root@omd ~]#
AWS-OpenVPN
eth0:10.0.0.5
tun0:172.17.0.1
=======================
PING
=======================
[root@openpvn ~]# ping -c 3 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=0.502 ms
64 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=0.639 ms
64 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=0.570 ms
--- 10.0.0.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.502/0.570/0.639/0.059 ms
[root@openpvn ccd]# ping -c 3 192.168.16.150
PING 192.168.16.150 (192.168.16.150) 56(84) bytes of data.
64 bytes from 192.168.16.150: icmp_seq=1 ttl=64 time=173 ms
64 bytes from 192.168.16.150: icmp_seq=2 ttl=64 time=142 ms
64 bytes from 192.168.16.150: icmp_seq=3 ttl=64 time=120 ms
--- 192.168.16.150 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 120.684/145.486/173.209/21.546 ms
[root@openpvn ~]#
=======================
ROUTE
=======================
[root@openvpn ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.169.254 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.16.0 172.17.0.2 255.255.255.0 UG 0 0 0 tun0
[root@openvpn ~]#
=======================
IPTABLES
=======================
[root@openvpn ~]# cat /etc/sysconfig/iptables
*nat
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 172.17.0.0/24 -d 0.0.0.0/0 -o eth0 -j MASQUERADE
COMMIT
[root@openvpn ~]#
=======================
SYSCTL
=======================
[root@openvpn ~]# grep forward /etc/sysctl.conf
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
[root@openvpn ~]#
LAN - 树莓派
eth0:192.168.16.150
tun0:172.17.0.253
=======================
PING
=======================
root@rpi:~# ping -c 3 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_seq=1 ttl=63 time=128 ms
64 bytes from 10.0.0.4: icmp_seq=2 ttl=63 time=106 ms
64 bytes from 10.0.0.4: icmp_seq=3 ttl=63 time=126 ms
--- 10.0.0.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 106.837/120.409/128.312/9.644 ms
root@rpi:~#
=======================
TRACEROUTE
=======================
root@rpi:~# traceroute 10.0.0.4
traceroute to 10.0.0.4 (10.0.0.4), 30 hops max, 60 byte packets
1 172.17.0.1 (172.17.0.1) 177.150 ms 200.416 ms 199.949 ms
2 10.0.0.4 (10.0.0.4) 205.052 ms 216.804 ms 223.456 ms
root@rpi:~#
=======================
ROUTE TABLE
=======================
root@rpi:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.17.0.1 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 192.168.16.254 0.0.0.0 UG 202 0 0 eth0
0.0.0.0 192.168.8.1 0.0.0.0 UG 203 0 0 eth1
5X.XX.XX.XXX 192.168.8.1 255.255.255.255 UGH 0 0 0 eth1
128.0.0.0 172.17.0.1 128.0.0.0 UG 0 0 0 tun0
172.17.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.8.0 0.0.0.0 255.255.255.0 U 203 0 0 eth1
192.168.16.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
root@rpi:~#
答案1
根据我看到的图表,它指定您正在使用 tun 适配器,即路由网络,而不是第 2 层 vpn 网络。您需要让 IP 转发正常工作。此外,对于您的情况,由于 ssh 协议涉及安全性,您还需要在 VPN 服务器上进行一些 NAT,以确保流量通过相同的服务器跳转来回传输。
要实现这个功能,有几个步骤。以下所有内容适用于稍旧的 CentOS 系统。
在任何连接了 LAN 的 OpenVPN(客户端或服务器)机器上设置 IP 转发。
- vi /etc/sysconfig/network 并添加行 FORWARD_IPV4=true
- vi /etc/sysctl.conf 并更改 net.ipv4.ip_forward = 1
要设置所需的 NAT,如果您使用 iptables 作为防火墙,则任何连接了 LAN 的 OpenVPN(客户端或服务器)机器都需要这些命令。
- iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
- iptables --table nat --append POSTROUTING --out-interface tun0 -j MASQUERADE
禁用防火墙会破坏它。您可能还可以使用firewalld,但我手边没有所需的命令。此外,一旦对iptables规则感到满意,请记住保存它们,以便它们在重新启动后仍然存在。
此外,VPN 的每一端都知道如何为 VPN 另一端的 LAN 路由流量,以便服务器能够通过隧道进行通信
- 配置行路由远程网络子网对于每个连接了 LAN 的远程站点,以便本地服务器知道通过该隧道路由发往这些子网的流量。
- 配置行推“路由网络子网”因此每个连接的客户端都知道通过隧道为这些子网路由流量。这将包括服务器 LAN 和所有客户端 LAN。
- 配置行客户端配置目录 ccd因此服务器知道检查文件夹 /etc/openvpn/ccd 中是否有包含 LAN 客户端名称的文件
- ccd/client-name 文件,内容如下iroute 网络子网因此 VPN 软件知道当该客户端连接时,该子网的流量将被发送到该客户端。
拥有所有这些线路是必需的,或者至少在有多个客户端 LAN 连接时特别有用。当只有一个客户端连接到单个服务器时,情况会简单得多。单个 LAN 到 LAN 连接就没那么简单了。