带有OpenVPN的Google Compute Engine上的VPN服务器


13

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

在GCE上有关于VPN的迷你教程,但它是关于GCE内的两台服务器之间的网络,而不是与OpenVPN之间的网络。

我已经完成了另一篇教程的所有步骤,关于在Debian上使用OpenVPN设置VPN,我可以从客户端连接到VPN,但是后来我无法打开连接(甚至无法ping google)。在服务器上,我可以像往常一样ping和下载所有内容。

我在Linode上具有相同设置的VPN,并且工作正常。因此,问题出在GCE网络路由或防火墙规则中。

我尝试了很多变体,但没有任何效果。请查看设置,并告诉我应该更改什么。

//删除了配置行,因为问题已解决//


有没有办法启用IP转发?回声1> / proc / sys / net / ipv4 / ip_forward
Alec Istomin 2014年

@AlecIstomin,是的,完成了。我在Linode上具有相同设置的VPN,并且工作正常。因此,问题出在GCE网络路由或防火墙规则中。
OZ_ 2014年

也许需要GCE支持?这似乎是他们可以快速回答的问题。
Bill Weiss 2014年

@BillWeiss支持计划的价格从每月150美元起,但是如果这个问题不能在一周内解决,我想我会付钱的。另外,我会尝试在oDesk上找到某人进行修复,然后将其写在我的博客中。
OZ_ 2014年

odesk.com/jobs/~01c4b1438a64f31fdd-如果可以帮助,请随时申请。
OZ_ 2014年

Answers:


7

首先,感谢@Shivox的回答

这是快速的操作方法:

  • 我建议您创建其他网络(请参见“网络”选项卡”)。在网络首选项中,添加以下允许规则:tcp:22(如果不存在),tcp:9700,tcp:17619。此处的17619是可变的-将其更改为任何您喜欢的端口(范围是9075-65534),您只需要3条规则和2条默认路由,就没有其他要求了。
  • 转到“创建Compute Engine实例”,单击“显示高级选项”,允许端口转发,选择服务器的位置。
  • 现在(选择位置后),将静态IP添加到服务器。
  • 选择Ubuntu 14.04映像(正是此版本)。
  • 创建实例
  • 通过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
  • 有关数据库的问题,请单击“保存”
  • 在登录窗口中,用作用pritunl户名和密码
  • 现在更改管理员用户的用户名和密码
  • 添加单位,然后添加2个用户(适用于台式机和移动设备)
  • 在“服务器”选项卡中单击“添加服务器”
  • 使用第一步中的端口号(例如17619)和tcp协议。
  • 将组织附加到服务器
  • 启动服务器
  • 在“用户”选项卡中,两个用户的下载密钥(其中包含ovpn文件的tar存档)。

我将Viscosity用于OS X,并将OpenVPN connect用于iOS作为客户端。在Viscosity中,打开“网络”选项卡中的“通过VPN连接发送所有流量”选项。


只需注意:Google Cloud Platform可以免费试用60天,收费300美元。
OZ_

1
:说明资讯在Ubuntu 14.04安装改变Pritunl github.com/pritunl/pritunl#ubuntu-trusty
motobói

6

您可以通过以下两种方式之一来解决尽管能够ping,traceroute ...但仍然无法通过VPN浏览网络的问题:

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

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

虽然不确定是什么问题,但从Google的角度来看这似乎是一个问题。


1
你是我的英雄!非常感谢你!切换到TCP就可以了。我将在单独的答案中扩展完整的“方法”。当长久的梦想成真时的那种感觉……谢谢!
OZ_'2

4

请记住,Google VPC丢弃的数据包source_ip不是具有外部IP的VM的内部IP。

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

VPC网络重写IP标头,以将实例的外部IP地址声明为源。如果该实例没有外部IP地址,则不允许该呼叫,并且VPC网络会丢弃该数据包而不会通知发送方。

因此,如果您的openVPN只是从其他网络转发数据包,则与公共source_ip虚拟机内部IP不匹配的数据包将被丢弃到公共内部。因此,您需要对离开本地网络(例如在VPN节点上)的数据包进行NAT。

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

OZ_答案中提到的“ Pritunl”有效,因为它会自动配置NAT。


3

这并不是真正的答案,但是该网站不允许我将其添加为您的问题的评论。

不过,我的配置几乎与您上面详述的完全相同(我没有在服务器上配置dnsmaq)

不幸的是,VPN无法正常工作。我可以解析地址,对一些Internet主机执行ping操作,甚至可以在连接到VPN时进行完整的跟踪。但是,当我打开浏览器并导航到站点时,连接速度确实很慢。我不知道什么会影响连接,但确实是一个奇怪的问题。

也许Google的某人可以帮助我们了解发生了什么。

PS 1.正如其他人之前所建议的,您可以验证是否启用了IP转发吗?对我来说,确保net.ipv4.ip_forward值在重启后正确还原的唯一方法是在/etc/sysctl.d上使用自定义规则后

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

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

PS 2.如果转发对您有用,是否可以在连接到VPN时测试到外部主机的跟踪路由?这样做时得到的输出有点奇怪(为什么同一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

PS3。似乎唯一能正常工作的是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>

@OZ_很高兴听到您现在可以在连接到VPN时ping和traceroute。现在,您可以发布其中一个traceroute的结果吗?我对输出的第一行感到好奇,因为似乎该软件包至少在前8个跳转中被循环路由(尽管不是网络专家)
Mario

抱歉,这里是:gist.github.com/jamm/028ae858a03e40495740。是的,这看起来很奇怪。也许我们需要一些特定的路线。
OZ_


1

您需要为Google云端中的VM实例启用IP转发,否则数据包将不会到达您的VM。注意,这与net.ipv4.ip_forward = 1您可以在VM中设置的设置不同。

IP转发只能在创建VM之前设置一次,以后不能修改。要为新的VM启用它,请单击Management, security, disks, networking, sole tenancy在此处输入图片说明

然后,在Networking标签中,点击Network Interface并将IP转发设置为ON

在此处输入图片说明



0

关于网络。

1)在控制台启用来自OpenVPN子网(例如10.8.0.0/24)的所有流量

2)我强烈建议您将化妆舞会添加到您的网络中

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.