Ubuntu

對 Google Cloud Platform 上的 Compute Engine OpenVPN 網際網路訪問進行故障排除

  • March 14, 2019

我在Google云平台的計算引擎上執行 Ubuntu 18.04。我使用 Nyr很棒的腳本在 1194/UDP 上設置了一個 VPN (我也嘗試過 443/TCP)。VPN 已連接,但連接後我無法訪問網際網路。

greg@vpn:~$ sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  10.8.0.0/24         !10.8.0.0/24          to:104.154.-.- #removed

VPN 上的跟踪路由

greg@vpn:~$ traceroute 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets
1  209.85.241.122 (209.85.241.122)  10.729 ms 216.239.63.174 (216.239.63.174)  9.965 ms 209.85.241.122 (209.85.241.122)  10.771 ms
2  108.170.243.187 (108.170.243.187)  10.086 ms 108.170.243.196 (108.170.243.196)  10.330 ms  10.285 ms
3  141.101.73.2 (141.101.73.2)  10.867 ms  10.860 ms  11.104 ms
4  one.one.one.one (1.1.1.1)  10.753 ms  9.886 ms  9.930 ms

連接到 VPN 時的本地跟踪路由

greg ~ $traceroute 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 64 hops max, 52 byte packets
1  * * *
2  * * *
3  * * *
4  * * *
5  * * *
6  * * *
7  * * *
8  * * *
9  * * *
10  * * *
...

Nyr 的 repo 上有一個問題,表明這是一個網路配置問題。我的問題是,我該如何解決這個問題?如果 VPN 伺服器可以訪問 Internet,這會是防火牆/GCP 配置問題嗎?

/etc/openvpn/server.conf

port 1194
proto udp
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem

我確保 iptables 是正確的

greg@vpn:~$ iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o ens4 -j SNAT --to 104.154.x.x

這是我的ip route show

greg@vpn:~$ ip route show
default via 10.128.0.1 dev ens4 proto dhcp metric 100 
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1 
10.128.0.1 dev ens4 proto dhcp scope link metric 100

子網

greg@vpn:~$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         _gateway        0.0.0.0         UG        0 0          0 ens4
10.8.0.0        0.0.0.0         255.255.255.0   U         0 0          0 tun0
_gateway        0.0.0.0         255.255.255.255 UH        0 0          0 ens4

我也啟用net.ipv4.tcp_syncookies=1/etc/sysctl.conf

防火牆規則 3

防火牆規則 6

路線

網路介面詳細資訊

連接到 VPN 時來自本地的跟踪路由

greg ~ $sudo mtr 1.1.1.1
                                                My traceroute  [vUNKNOWN]
Gregs-MacBook-Pro.local (10.8.0.2)                                                                2019-03-14T13:57:40-0400
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                                                                 Packets               Pings
Host                                                                           Loss%   Snt   Last   Avg  Best  Wrst StDev
1. 10.8.0.1                                                                     0.0%    24   35.3  36.5  34.3  48.2   3.8
2. ???

我的跟踪路由直接來自 VPN 伺服器

greg@vpn:~$ mtr 1.1.1.1
                                                    My traceroute  [v0.92]
vpn (10.128.0.28)                                                                                  2019-03-14T18:11:28+0000
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                 Packets               Pings
Host                                                                            Loss%   Snt   Last   Avg  Best  Wrst StDev
1. 216.239.40.188                                                                0.0%   177   10.1  11.3  10.0  33.7   3.8
2. 108.170.243.196                                                               0.0%   177   10.5  10.6  10.4  13.9   0.5
3. 141.101.73.2                                                                  0.0%   177   10.8  14.2  10.7  52.4   7.1
4. one.one.one.one                                                               0.0%   176   11.1  11.1  10.9  12.6   0.2

您是否啟用了 IP 轉發?

您可以在GCP的實例詳細資訊頁面上或直接在 sysctl.conf 中執行此操作:net.ipv4.ip_forward=1

此外,我曾經使用過這個很棒的教程在 Ubuntu 16 上設置 OpenVPN,它執行完美,我相信它會很有幫助。

對於網際網路訪問故障排除,最好發布您的 GCP 路由表和防火牆規則

我建議嘗試以下方法:

1)使用TCP協議代替UDP;這可以通過在客戶端和伺服器 conf 文件中將“proto udp”更改為“proto tcp”來完成。

埠 443

原型 tcp

原型 udp

  1. 通過在客戶端和伺服器配置文件中將“dev tun”更改為“dev tap”,使用 tap 設備而不是 tun。TAP 設備是虛擬乙太網適配器,而 TUN 設備是虛擬點對點 IP 鏈路。您必須使用其中一種,否則不能混合使用。

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