OpenVPN | 如何让服务器通过OpenVPN网关与局域网中的另一台服务器通信?

OpenVPN | 如何让服务器通过OpenVPN网关与局域网中的另一台服务器通信?

我一直在尝试让我的 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:~#

这就是我一直想要实现的目标。请看这个关联

  1. OpenVPN与RPi通过VPN连接
  2. OMD 不会连接到 VPN,它只会使用 OpenVPN 服务器作为网关
  3. 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 连接就没那么简单了。

相关内容