Openvpn

無法通過 OpenVPN 路由到 GCE 網路中的其他主機

  • December 16, 2016

OpenVPN 已使用此腳本安裝在 Google Cloud 實例上。Google Cloud 實例是 Ubuntu 14.04 LTS,已標記為“vpn”,並啟用了 IP 轉發。此外,還設置了 3 個防火牆:

  • 允許來自任何源 ICMP,應用於所有目標
  • 允許來自任何源的 TCP 埠 22,適用於所有目標
  • 允許來自任何源 UDP 埠 1194,適用於“vpn”標記的目標

使用腳本生成的 client.ovpn 文件,可以使用 OpenVPN 連接到實例。可以 ping 實例的內部 IP 地址(即 10.20.0.2),但無法 ping 同一虛擬子網中的其他主機(即 10.20.0.3)。

啟用日誌記錄後,當與實例建立連接並且子網上的其他主機被遠端 ping 時,以下是系統日誌的輸出。

root@vpn:/home/user# tail /var/log/syslog 
Dec 15 03:54:26 vpn ovpn-server[2633]: client/118.209.255.26:64219 MULTI_sva: pool returned IPv4=10.8.0.2, IPv6=(Not enabled)
Dec 15 03:54:26 vpn ovpn-server[2633]: client/118.209.255.26:64219 MULTI: Learn: 10.8.0.2 -> client/118.209.255.26:64219
Dec 15 03:54:26 vpn ovpn-server[2633]: client/118.209.255.26:64219 MULTI: primary virtual IP for client/118.209.255.26:64219: 10.8.0.2
Dec 15 03:54:29 vpn kernel: [  630.713536] iptables denied: IN=eth0 OUT= MAC=42:01:0a:14:00:02:42:01:00:00:00:00:08:00 SRC=118.209.255.26 DST=10.20.0.2 LEN=140 TOS=0x00 PREC=0x00 TTL=50 ID=19209 PROTO=UDP SPT=64219 DPT=1194 LEN=120 
Dec 15 03:54:29 vpn ovpn-server[2633]: client/118.209.255.26:64219 PUSH: Received control message: 'PUSH_REQUEST'
Dec 15 03:54:29 vpn ovpn-server[2633]: client/118.209.255.26:64219 send_push_reply(): safe_cap=940
Dec 15 03:54:29 vpn ovpn-server[2633]: client/118.209.255.26:64219 SENT CONTROL [client]: 'PUSH_REPLY,dhcp-option DNS 8.8.8.8,dhcp-option DNS 8.8.4.4,redirect-gateway def1 bypass-dhcp,route-gateway 10.8.0.1,topology subnet,ping 10,ping-restart 120,ifconfig 10.8.0.2 255.255.255.0' (status=1)
Dec 15 03:54:40 vpn kernel: [  641.643199] iptables denied: IN=eth0 OUT= MAC=42:01:0a:14:00:02:42:01:00:00:00:00:08:00 SRC=118.209.255.26 DST=10.20.0.2 LEN=173 TOS=0x00 PREC=0x00 TTL=50 ID=25886 PROTO=UDP SPT=64219 DPT=1194 LEN=153 
Dec 15 03:54:52 vpn kernel: [  653.789393] iptables denied: IN=eth0 OUT= MAC=42:01:0a:14:00:02:42:01:00:00:00:00:08:00 SRC=74.125.41.32 DST=10.20.0.2 LEN=104 TOS=0x00 PREC=0x00 TTL=53 ID=23017 PROTO=TCP SPT=35702 DPT=22 WINDOW=29016 RES=0x00 ACK PSH URGP=0 
Dec 15 03:55:05 vpn kernel: [  667.589193] iptables denied: IN=eth0 OUT= MAC=42:01:0a:14:00:02:42:01:00:00:00:00:08:00 SRC=74.125.41.32 DST=10.20.0.2 LEN=104 TOS=0x00 PREC=0x00 TTL=53 ID=29539 PROTO=TCP SPT=35702 DPT=22 WINDOW=29358 RES=0x00 ACK PSH URGP=0 

此外:

  • net.ipv4.ip_forward = 1已設置在/etc/sysctl.conf
  • 已使用這些規則配置 iptables
  • TCP 和 UDP OpenVPN 協議配置都不起作用
  • 當通過 SSH 連接時,可以從 VPN 伺服器 ping 其他實例,而不是從通過 VPN 連接的遠端主機

查看 iptables nat 表,它PREROUTING已經有一條規則並且具有更高的優先級。

root@vpn5:/home/user# iptables -t nat -L
...
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  10.8.0.0/24          anywhere             to:104.199.150.74

該問題已通過發布解決:

iptables -t nat -F
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

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