無法從家庭客戶端 VPN 到 AWS EC2 OpenVPN 伺服器
我已經按照本指南在 Ubuntu 機器上從頭開始設置我自己的 OpenVPN 伺服器,只是我使用的是 AWS EC2 而不是 Digital Ocean。我已經啟動並執行了 OpenVPN 伺服器以及正確配置的客戶端(我的家庭桌面)。我可以在兩者之間建立 VPN 連接,因為我可以
Initialization Sequence Completed
在客戶端上看到消息,但僅此而已。在那之後,我無法從客戶端訪問 Internet,也無法 ping 任何東西,甚至連 OpenVPN 伺服器本身也不能。以下是有關我的設置的一些詳細資訊:
AWS
Ubuntu 16.04.2 在其自己的 VPC 和安全組上的 EC2 nano(1 核,512MB RAM)實例上執行。VPC 的路由表在這裡:http: //i.imgur.com/iil7uVE.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]: openvpn@server.service: 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, emailAddress=anon@anon.com 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, emailAddress=anon@anon.com 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 安全組問題、配置文件問題(例如客戶端和伺服器 conf 文件之間的設置不匹配)、兩端的防火牆問題,我什至在伺服器上執行了 tcpdump並且可以看到來自客戶端的傳入數據包,儘管我不是分析網路數據包轉儲的專家,所以我無法通過查看它得出任何可靠的結論……有人可以提供一些幫助嗎?我將不勝感激!
OpenVPN 配置以及路由表似乎都很好。
最好有客戶端的日誌(以防萬一),以及您正在客戶端和伺服器之間進行的測試的輸出(traceroute?ping?nc?)。
但無論如何,我認為問題在於您在伺服器作業系統上缺少一些配置。
看看:https ://community.openvpn.net/openvpn/wiki/BridgingAndRouting (使用路由)
你會注意到你應該:
- 啟用 IP 轉發
- 允許使用 IPTables 轉發流量。從 VPN 到“世界”,建立連接,並拒絕其他一切(或將拒絕定義為預設規則)。
- 啟用從 VPN 到“世界”的偽裝
也就是說,如果您不想使用 VPN 訪問同一 VPC 上的其他 EC2(在這種情況下,您將需要添加更多規則以在 VPN 和 VPC 之間進行轉發)。