使用OpenVPN的Google Compute Engine上的VPN服务器

我试图将Google Compute Engine服务器用作所有stream量的VPN服务器(我住在俄罗斯,在这里我们有一些审查问题)。

在GCE上有关于VPN的迷你教程,但它是关于GCE内部2台服务器之间的networking,而不是OpenVPN。

我已经完成了另一个教程的所有步骤,关于在Debian上使用OpenVPN设置VPN ,我可以从客户端连接到VPN,但是我无法打开连接(甚至不能连接谷歌)。 在服务器上,我可以ping通,并像往常一样下载一切。

我有相同的设置Linode的VPN,它工作正常。 所以问题在于GCE网路由或防火墙规则。

我已经尝试了很多变体,但没有任何工作。 请看设置,告诉我应该改变什么。

/ /configuration线删除,因为问题解决

首先感谢@Shivox的回答 。

这里是快速的方法:

  • 我build议你创build额外的networking(见“networking”选项卡)。在networking首选项中,添加允许规则:tcp:22(如果不存在),tcp:9700,tcp: 17619.1769这里是variables -你喜欢的端口(范围是9075-65534),你只需要3条规则和2条默认路由,没有别的。
  • 转到“创build计算引擎实例”,单击“显示高级选项”,允许端口转发,select服务器的位置。
  • 现在(当你select的位置),添加静态IP到服务器。
  • selectUbuntu 14.04映像(正是这个版本)。
  • 创build实例
  • 通过SSH连接(最简单的方法 – 使用GCE面板中的浏览器工具)
  • sudo su
  • apt-key update && apt-get update && apt-get -y upgrade && apt-get -y install python-software-properties && apt-get -y install software-properties-common && add-apt-repository -y ppa:pritunl && apt-get update && apt-get -y install pritunl
  • 在浏览器中打开https://instance_ip:9700
  • 在关于数据库的问题上,点击“保存”
  • 在login窗口中,使用pritunl作为用户名和密码
  • 现在更改pipe理员用户的用户名和密码
  • 添加组织,然后添加2个用户(用于桌面和移动)
  • 点击“服务器”标签中的“添加服务器”
  • 使用第一步的端口号(例如17619 )和tcp协议。
  • 将组织连接到服务器
  • 启动服务器
  • 在“用户”选项卡下载两个用户的密钥(tar档案与ovpn文件里面)。

我使用OS X的Viscosity和OpenVPN connect作为客户端。 在Viscosity中,打开“networking”选项卡中的“通过VPN连接发送所有stream量”选项。

您可以通过以下两种方式之一来解决无法通过VPN浏览网页的问题,即使可以ping,traceroute …也可以:

首先,您可以使用TCP协议而不是UDP,在客户机和服务器conf文件中将“proto udp”更改为“proto tcp”。

其次,通过在客户机和服务器conf文件中将“dev tun”更改为“dev tap”,您可以使用tap设备而不是tun。

不知道是什么问题,但这似乎是谷歌的一个问题。

请记住,Google VPC正在丢弃包含具有外部IP的虚拟机的内部IP以外的source_ip数据包。

此文档https://cloud.google.com/compute/docs/vpc/advanced-vpc指出:

VPCnetworking重写IP头以声明实例的外部IP地址作为源。 如果该实例没有外部IP地址,则不允许该呼叫,并且VPCnetworking在不通知发送方的情况下丢弃该分组。

因此,如果您的openVPN只是转发来自其他networking的数据包,那么由于source_ip与任何现有虚拟机的内部IP不匹配,所以公共内部的数据包将被丢弃。 出于这个原因,你需要对离开本地networking的数据包进行NAT转换,例如在你的VPN节点上。

 Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 192.168.0.0/16 !192.168.0.0/16 

在OZ_答案中提到的“Pritunl”起作用,因为它自动configurationNAT。

通过取消注释#net.ipv4.ip_forward=1编辑/etc/sysctl.conf

这应该允许OpenVPN引导您的stream量。

这不是一个真正的答案,但该网站不允许我添加它作为你的问题的评论。

尽pipe如此,我几乎完全相同的configuration,你在上面详细(我没有在服务器上configurationdnsmaq艰难)

不幸的是,VPN没有按预期工作。 我可以parsing一个地址,ping一些互联网主机,甚至在连接到VPN时完成一个完整的跟踪。 但是,当我打开浏览器并导航到一个网站,连接是非常缓慢的。 我不知道什么可以影响连接,但确实是一个奇怪的问题。

也许Google的某个人可以帮助我们了解正在发生的事情。

PS 1.正如其他人之前所build议的,你可以validationIP转发是否启用? 对我来说,确保net.ipv4.ip_forward值的唯一方法是在我使用/etc/sysctl.d上的自定义规则后重新启动后正确地恢复

例如,您可以使用以下命令添加规则:

 $ sudo echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/90-useroverrides.conf 

PS 2.如果转发为您工作,您可以在连接到VPN时testing到外部主机的跟踪路由吗? 当我这样做的时候,我得到的输出有点奇怪(为什么在同一个IP上有多个跳数?):

 $ sudo traceroute www.yahoo.com -T -p 80 -N 1 -z 0.5 -q 1 traceroute to www.yahoo.com (98.139.183.24), 30 hops max, 60 byte packets 1 209.85.241.26 (209.85.241.26) 0.764 ms 2 209.85.241.34 (209.85.241.34) 0.668 ms 3 209.85.241.26 (209.85.241.26) 0.966 ms 4 209.85.241.36 (209.85.241.36) 0.702 ms 5 209.85.241.28 (209.85.241.28) 0.865 ms 6 209.85.241.36 (209.85.241.36) 0.642 ms 7 209.85.241.26 (209.85.241.26) 0.921 ms 8 209.85.241.28 (209.85.241.28) 18.837 ms 9 72.14.238.107 (72.14.238.107) 13.378 ms 10 72.14.237.131 (72.14.237.131) 38.275 ms 11 209.85.254.131 (209.85.254.131) 13.349 ms 12 * 13 ae-8.pat1.bfz.yahoo.com (216.115.101.231) 44.903 ms 14 ae-4.msr1.bf1.yahoo.com (216.115.100.25) 45.323 ms 15 xe-10-3-1.clr1-a-gdc.bf1.yahoo.com (98.139.232.101) 47.382 ms 16 et18-25.fab6-1-sat.bf1.yahoo.com (98.139.128.103) 45.793 ms 17 po-13.bas1-7-prd.bf1.yahoo.com (98.139.129.209) 41.143 ms 18 ir2.fp.vip.bf1.yahoo.com (98.139.183.24) 42.451 ms 

PS 3.似乎正常工作的唯一的事情是VPN使用来自我的主机的外部IP访问Internet

 $ sudo curl --interface tun0 checkip.dyndns.org <html><head><title>Current IP Check</title></head><body>Current IP Address: 107.178.XXX.XXX</body></html> 

您需要添加允许OpenVPN自身stream量的规则:

 iptables -A INPUT -p udp --dport 1194 -j ACCEPT 

关于networking。

1)在Console中启用来自OpenVPN子网(例如10.8.0.0/24)的所有stream量

2)我强烈build议你添加伪装到你的networking

 firewall-cmd --zone=trusted --add-masquerade --permanent firewall-cmd --reload-all 

3)不要忘记在内核中启用分组路由

a)一次

  echo 1 > /proc/sys/net/ipv4/ip_forward 

b)永远在/etc/sysctl.conf中:

  net.ipv4.ip_forward = 1