无法通过 OpenVPN 路由到 GCE 网络中的其他主机

无法通过 OpenVPN 路由到 GCE 网络中的其他主机

OpenVPN 已安装在 Google Cloud Instance 上,使用这个脚本。Google Cloud Instance 是 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 连接的远程主机 ping 通

答案1

查看 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

相关内容