Amazon-Ec2

無法從家庭客戶端 VPN 到 AWS EC2 OpenVPN 伺服器

  • June 4, 2017

我已經按照本指南在 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 之間進行轉發)。

引用自:https://serverfault.com/questions/853944