我试图将Google Compute Engine服务器用作所有stream量的VPN服务器(我住在俄罗斯,在这里我们有一些审查问题)。
在GCE上有关于VPN的迷你教程,但它是关于GCE内部2台服务器之间的networking,而不是OpenVPN。
我已经完成了另一个教程的所有步骤,关于在Debian上使用OpenVPN设置VPN ,我可以从客户端连接到VPN,但是我无法打开连接(甚至不能连接谷歌)。 在服务器上,我可以ping通,并像往常一样下载一切。
我有相同的设置Linode的VPN,它工作正常。 所以问题在于GCE网路由或防火墙规则。
我已经尝试了很多变体,但没有任何工作。 请看设置,告诉我应该改变什么。
/ /configuration线删除,因为问题解决
首先感谢@Shivox的回答 。
这里是快速的方法:
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 pritunl作为用户名和密码 我使用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