无法通过 VPN 从家庭客户端连接到 AWS EC2 OpenVPN 服务器

无法通过 VPN 从家庭客户端连接到 AWS EC2 OpenVPN 服务器

我已经关注本指南在 Ubuntu 机器上从头开始设置我自己的 OpenVPN 服务器,只是我使用的是 AWS EC2 而不是 Digital Ocean。我已经启动并运行了 OpenVPN 服务器,并且客户端(我的家用台式机)也已正确配置。我可以在两者之间建立 VPN 连接,因为我可以Initialization Sequence Completed在客户端上看到消息,但这就是它所能达到的程度。之后,我无法从客户端访问互联网,也无法 ping 任何东西,甚至连 OpenVPN 服务器本身都无法 ping 通。

以下是有关我的设置的一些细节:

AWS

Ubuntu 16.04.2 在 EC2 nano(1 核,512MB RAM)实例上运行,该实例有自己的 VPC 和安全组。VPC 的路由表如下:https://i.stack.imgur.com/wIwtm.png。它有自己的 Internet 网关(不是 NAT 网关)。

route -n服务器

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.31.1.1      0.0.0.0         UG    0      0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
172.31.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0

该服务器还分配有一个弹性 IP(静态 IP),因此我可以通过 SSH 进入服务器(请注意,当我没有使用 VPN 时),没有任何问题。至于安全组,我的出站流量设置基本上允许任何类型的流量到任何类型的主机,而我的入站设置允许来自我的 IP 地址的 SSH 流量和来自任何来源的端口 1194 上的所有 UDP 流量(我会大大缩小这个范围,但目前我只想让它正常工作)。

服务器

iptable 设置(基本没有)

iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

ifconfig -a

eth0      Link encap:Ethernet  HWaddr 02:2e:e3:58:d0:26  
          inet addr:172.31.1.187  Bcast:172.31.1.255  Mask:255.255.255.0
          inet6 addr: fe80::2e:e3ff:fe58:d026/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:18447 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15656 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2083132 (2.0 MB)  TX bytes:2408726 (2.4 MB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:160 errors:0 dropped:0 overruns:0 frame:0
          TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:11840 (11.8 KB)  TX bytes:11840 (11.8 KB)

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.1  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:320 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:96332 (96.3 KB)  TX bytes:0 (0.0 B)

服务器配置文件

port 1194
proto udp

dev tun

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key

dh /etc/openvpn/keys/dh2048.pem

topology subnet

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"

# Use Google's DNS servers to resolve external addresses
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

keepalive 10 120

cipher AES-128-CBC
auth SHA1
comp-lzo

persist-key
persist-tun

status openvpn-status.log

verb 3

OpenVPN 版本

OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Feb  2 2016
library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08

启动时和客户端连接时的 OpenVPN 系统日志片段

Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2525]: OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Feb  2 2016
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2525]: library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08
Jun  4 21:12:53 ip-172-31-1-187 systemd[1]: [email protected]: PID file /run/openvpn/server.pid not readable (yet?) after start: No such file or directory
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: Diffie-Hellman initialized with 2048 bit key
Jun  4 21:12:53 ip-172-31-1-187 systemd[1]: Started OpenVPN connection to server.
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: Socket Buffers: R=[212992->212992] S=[212992->212992]
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: TUN/TAP device tun0 opened
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: TUN/TAP TX queue length set to 100
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: /sbin/ip link set dev tun0 up mtu 1500
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: /sbin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: UDPv4 link local (bound): [undef]
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: UDPv4 link remote: [undef]
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: MULTI: multi_init called, r=256 v=256
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=0
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: ifconfig_pool_read(), in='client-with-pass,10.8.0.4', TODO: IPv6
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: succeeded -> ifconfig_pool_set()
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: ifconfig_pool_read(), in='client-pass,10.8.0.8', TODO: IPv6
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: succeeded -> ifconfig_pool_set()
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: IFCONFIG POOL LIST
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: client-with-pass,10.8.0.4
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: client-pass,10.8.0.8
Jun  4 21:12:53 ip-172-31-1-187 ovpn-server[2528]: Initialization Sequence Completed
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: <ip>:31969 TLS: Initial packet from [AF_INET]<ip>:31969, sid=f42796e8 a043209b
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: <ip>:31969 VERIFY OK: depth=1, C=GB, ST=CA, L=Cambridge, O=Anonymous, OU=Anonymous, CN=Anonymous CA, name=EasyRSA, [email protected]
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: <ip>:31969 VERIFY OK: depth=0, C=GB, ST=CA, L=Cambridge, O=Anonymous, OU=Anonymous, CN=client-pass, name=EasyRSA, [email protected]
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: <ip>:31969 Data Channel Encrypt: Cipher 'AES-128-CBC' initialized with 128 bit key
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: <ip>:31969 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: <ip>:31969 Data Channel Decrypt: Cipher 'AES-128-CBC' initialized with 128 bit key
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: <ip>:31969 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: <ip>:31969 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 DHE-RSA-AES256-GCM-SHA384, 2048 bit RSA
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: <ip>:31969 [client-pass] Peer Connection Initiated with [AF_INET]<ip>:31969
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: client-pass/<ip>:31969 MULTI_sva: pool returned IPv4=10.8.0.8, IPv6=(Not enabled)
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: client-pass/<ip>:31969 MULTI: Learn: 10.8.0.8 -> client-pass/<ip>:31969
Jun  4 21:13:06 ip-172-31-1-187 ovpn-server[2528]: client-pass/<ip>:31969 MULTI: primary virtual IP for client-pass/<ip>:31969: 10.8.0.8
Jun  4 21:13:07 ip-172-31-1-187 ovpn-server[2528]: client-pass/<ip>:31969 PUSH: Received control message: 'PUSH_REQUEST'
Jun  4 21:13:07 ip-172-31-1-187 ovpn-server[2528]: client-pass/<ip>:31969 send_push_reply(): safe_cap=940
Jun  4 21:13:07 ip-172-31-1-187 ovpn-server[2528]: client-pass/<ip>:31969 SENT CONTROL [client-pass]: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 8.8.8.8,dhcp-option DNS 8.8.4.4,route-gateway 10.8.0.1,topology subnet,ping 10,ping-restart 120,ifconfig 10.8.0.8 255.255.255.0' (status=1)

客户

客户端.ovpn

ca ca.crt
cert client-pass.crt
key client-pass.key

remote <server_public_ip> 1194
comp-lzo
client
dev tun
redirect-gateway def1

remote-cert-tls server
cipher AES-128-CBC
auth SHA1

proto udp
resolv-retry infinite
nobind

topology subnet
pull

persist-key
persist-tun

verb 3
mute 20

OpenVPN 版本

OpenVPN 2.4.2 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 11 2017
library versions: OpenSSL 1.0.2k-fips  26 Jan 2017, LZO 2.08

客户端连接到 VPN 服务器时的路由表

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.8.0.1        128.0.0.0       UG    0      0        0 tun0
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 enp3s0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
<vpn_server_public_ip>   192.168.1.1     255.255.255.255 UGH   0      0        0 enp3s0
128.0.0.0       10.8.0.1        128.0.0.0       UG    0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp3s0

正如我所说,根据两端打印的标准输出日志来判断,VPN 连接似乎已成功建立,但客户端根本没有网络/互联网访问。

我花了大量时间排除此故障,查看可能的 AWS 安全组问题、配置文件问题(例如客户端和服务器配置文件之间的设置不匹配)、两端的防火墙问题,我甚至在服务器上运行了 tcpdump,可以看到来自客户端的传入数据包,尽管我不是分析网络数据包转储的专家,所以我无法通过查看它得出任何可靠的结论... 有人可以提供帮助吗?我将不胜感激!

答案1

OpenVPN 配置似乎很好,路由表也是如此。

如果也能有客户端的日志(以防万一)以及在客户端和服务器之间进行的测试(traceroute?ping?nc?)的输出,那就太好了。

但无论如何,在我看来,问题在于您在服务器操作系统上缺少一些配置。

看一下:https://community.openvpn.net/openvpn/wiki/BridgingAndRouting(使用路由)

你会发现你应该:

  • 启用 IP 转发
  • 允许使用 IPTables 转发流量。对于已建立的连接,从 VPN 到“世界”,并拒绝其他所有内容(或将拒绝定义为默认规则)。
  • 启用从 VPN 到“世界”的伪装

也就是说,如果您不想使用 VPN 访问同一 VPC 上的其他 EC2(在这种情况下,您将需要添加更多规则以在 VPN 和 VPC 之间转发)。

相关内容