使用 OpenVPN 的 AWS VPC 到 Office 网络

使用 OpenVPN 的 AWS VPC 到 Office 网络

我有在 AWS VPC 中运行的 OpenVPN 服务器,并且能够使用 OpenVPN 客户端将本地服务器连接到 AWS。

能够 ping 在 AWS VPC 中运行的实例。但无法从 EC2 ping 本地服务器。以下是图表。

          (办公网络)10.24.11.1/24(AWS VPC)10.2.0.0/16
+--------------------------------------------+ +----------------------------------+
| | | |
| OpenVPN 客户端(Pi) | | OpenVPN 服务器(Ubuntu) |
| | | |
| +-----------------------------+ | | +-----------------------------+ |
| | | | | | | |
| eth0 | | |tun0 | | | |
| <--+-->| 10.8.0.2|<--|--+----|->|10.8.0.1 10.2.2.101 |ens5|
| | | | | | | |
|br0|10.24.11.15|||||||
| | | | | | | |
| | WLAN0 | | | | | |
| +-----------------------------+ | | +-----------------------------+ |
| ^ | | |
| | | | |
| WiFi客户端 | | | |
| +------------------+ | | | +----------+ |
| |wlan0:10.24.11.201| | | | | 主机1 | |
| | |--+ | | | | |
| +------------------+ | | |10.2.1.145| |
+--------------------------------------------+ | +----------+ |
                                                     +---------------------------------+

OpenVPN Server路线 :

ubuntu@openvpn:~$ ip route
default via 10.2.2.1 dev ens5 proto dhcp src 10.2.2.101 metric 100
10.2.2.0/24 dev ens5 proto kernel scope link src 10.2.2.101
10.2.2.1 dev ens5 proto dhcp scope link src 10.2.2.101 metric 100
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1
10.24.11.0/24 via 10.8.0.2 dev tun0 proto static src 10.8.0.1

OpenVPN Client路线 :

pi@accesspoint:~ $ ip route
default via 10.24.11.1 dev br0 src 10.24.11.15 metric 203
10.2.0.0/16 via 10.8.0.1 dev tun0 proto static src 10.8.0.2
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
10.24.11.0/24 dev br0 proto kernel scope link src 10.24.11.15 metric 203
35.176.225.61 via 10.24.11.1 dev br0

WiFi Client路线 :

pi@client:~ $ ip route
default via 10.24.11.1 dev wlan0 src 10.24.11.201 metric 303
10.2.0.0/16 via 10.24.11.15 dev wlan0 proto static
10.24.11.0/24 dev wlan0 proto kernel scope link src 10.24.11.201 metric 303

在 VPC 路由表中添加了10.24.11.0/24& 的路由10.8.0.1/16以指向私有 IP。OpenVPN Server

也有net.ipv4.ip_forward=1OpenVPN/etc/sysctl.conf服务器和 OpenVPN 客户端。

我能够10.2.0.0/16OpenVPN Client& ping 通子网的任何 IP WiFi Client,但无法10.24.11.0/24从ping 通子网的任何 IP 10.2.0.0/16

防火墙规则OpenVPN server

ubuntu@openvpn:~$ sudo iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

如果我 ping 的 IPOpenVPN 服务器 10.2.2.101&VPN 隧道 IP10.8.0.1来自主持人 1我看到带有sudo tcpdump -i ens5 -nn icmp

10.24.11.0/24因此,在 VPC 路由表中添加的指向私有 IP10.8.0.1/16的路由OpenVPN Server不起作用。

在 上禁用源/目标检查后,OpenVPN Server我能从 ping 通 的 IP 10.8.0.0/2410.2.0.0/16但不能10.24.11.0/24

当我从主机 1 ping IP 时10.24.11.0/24,我确实看到数据包进入OpenVPN 服务器 sudo tcpdump -i tun0 -nn icmp但无法从 OpenVPN 客户端的隧道中出来sudo tcpdump -i tun0 -nn icmp

更新

我运行sudo iptables -I INPUT -s {OpenVPN-Server-Public-IP} -j ACCEPT,然后OpenVPN Client尝试ping 10.24.11.15Host 1。能够在 OpenVPN 服务器上看到进入隧道的数据包

ubuntu@openvpn:~$ sudo tcpdump -i tun0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
09:38:42.344238 IP 10.2.2.46 > 10.24.11.15: ICMP echo request, id 12967, seq 203, length 64
09:38:43.344222 IP 10.2.2.46 > 10.24.11.15: ICMP echo request, id 12967, seq 204, length 64
09:38:44.344280 IP 10.2.2.46 > 10.24.11.15: ICMP echo request, id 12967, seq 205, length 64

但在 OpenVPN 客户端服务器上,没有包从隧道中传出

pi@accesspoint:~ $ sudo tcpdump -i tun0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes

当我Host 1从 OpenVPN 客户端 ping 时,它起作用了:

pi@accesspoint:~ $ ping 10.2.2.46
PING 10.2.2.46 (10.2.2.46) 56(84) bytes of data.
64 bytes from 10.2.2.46: icmp_seq=1 ttl=63 time=72.5 ms
64 bytes from 10.2.2.46: icmp_seq=2 ttl=63 time=72.4 ms
64 bytes from 10.2.2.46: icmp_seq=3 ttl=63 time=72.4 ms

以下是 tcpdump:

ubuntu@openvpn:~$ sudo tcpdump -i tun0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
16:47:06.002682 IP 10.8.0.2 > 10.2.2.46: ICMP echo request, id 2807, seq 1, length 64
16:47:06.003034 IP 10.2.2.46 > 10.8.0.2: ICMP echo reply, id 2807, seq 1, length 64
16:47:07.003467 IP 10.8.0.2 > 10.2.2.46: ICMP echo request, id 2807, seq 2, length 64
16:47:07.003799 IP 10.2.2.46 > 10.8.0.2: ICMP echo reply, id 2807, seq 2, length 64
16:47:08.004003 IP 10.8.0.2 > 10.2.2.46: ICMP echo request, id 2807, seq 3, length 64
16:47:08.004353 IP 10.2.2.46 > 10.8.0.2: ICMP echo reply, id 2807, seq 3, length 64

来自Host 1

ubuntu@host-1:~$ sudo tcpdump -i eth0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:47:06.001635 IP 10.2.2.101 > 10.2.2.46: ICMP echo request, id 2807, seq 1, length 64
20:47:06.001694 IP 10.2.2.46 > 10.2.2.101: ICMP echo reply, id 2807, seq 1, length 64
20:47:07.002398 IP 10.2.2.101 > 10.2.2.46: ICMP echo request, id 2807, seq 2, length 64
20:47:07.002445 IP 10.2.2.46 > 10.2.2.101: ICMP echo reply, id 2807, seq 2, length 64
20:47:08.002915 IP 10.2.2.101 > 10.2.2.46: ICMP echo request, id 2807, seq 3, length 64
20:47:08.002961 IP 10.2.2.46 > 10.2.2.101: ICMP echo reply, id 2807, seq 3, length 64

iptables-saveOpenVPN Server

ubuntu@openvpn:~$ sudo iptables-save
# Generated by iptables-save v1.6.1 on Tue Aug 13 17:01:18 2019
*filter
:INPUT ACCEPT [83032:54462790]
:FORWARD ACCEPT [3756:403911]
:OUTPUT ACCEPT [84053:7826032]
-A FORWARD -i ens5 -o tun0 -j ACCEPT
-A FORWARD -i ens5 -o tun0 -j ACCEPT
COMMIT
# Completed on Tue Aug 13 17:01:18 2019
# Generated by iptables-save v1.6.1 on Tue Aug 13 17:01:18 2019
*nat
:PREROUTING ACCEPT [2350:165593]
:INPUT ACCEPT [276:21608]
:OUTPUT ACCEPT [12682:1773625]
:POSTROUTING ACCEPT [12672:1773673]
-A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 10.2.2.101
COMMIT
# Completed on Tue Aug 13 17:01:18 2019

答案1

我能够从 OpenVPN 客户端和 WiFi 客户端 ping 通子网 10.2.0.0/16 的任何 IP,但无法从 10.2.0.0/16 ping 通子网 10.24.11.0/24 的任何 IP。

这表明您的路由是正确的,但很可能是防火墙出了问题。请确保:

  • 防火墙Ubuntu允许从 VPC 到 Office 的新连接。开始时应该执行如下操作:

    iptables -I FORWARD -i ens5 -o tun0 -j ACCEPT
    
  • 防火墙切入点允许从隧道到 Wifi 的新连接。

    iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
    

如果仍然不起作用,请从AWS 主机 1Wifi 客户端tcpdump并在两者上使用Ubuntu切入点验证数据包去往何处。

  1. 验证 ping 数据包是否来自主机 1。如果不是,请检查安全组和 EC2源/目标检查

    [aws ubuntu] # tcpdump -i ens5 -nn icmp
    
  2. 验证数据包是否进入 OpenVPN 隧道。如果没有,请检查Ubuntu的 iptables 防火墙。

    [aws ubuntu] # tcpdump -i tun0 -nn icmp
    
  3. 验证数据包是否到达接入点的隧道。

    [office accesspoint] # tcpdump -i tun0 -nn icmp
    
  4. 验证它们是否从隧道转发到 Wifi。如果没有,请检查接入点上的防火墙。

    [office accesspoint] # tcpdump -i br0 -nn icmp
    

更新根据附加信息...

当我从主机 1 ping IP 时10.24.11.0/24,我确实看到数据包进入 OpenVPN 服务器上的隧道sudo tcpdump -i tun0 -nn icmp,但没有从 OpenVPN 客户端上的隧道出来sudo tcpdump -i tun0 -nn icmp

这很奇怪。这听起来像是切入点防火墙可能阻止来自Ubuntu

您可以尝试将这条规则添加到接入点的防火墙吗:

iptables -I INPUT -s {aws-ubuntu-public-ip} -j ACCEPT

希望有帮助:)

相关内容