AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 590530
Accepted
OZ_
OZ_
Asked: 2014-04-23 03:59:48 +0800 CST2014-04-23 03:59:48 +0800 CST 2014-04-23 03:59:48 +0800 CST

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

  • 772

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

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

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

我在 Linode 上安装了相同设置的 VPN,它运行良好。所以问题在于 GCE 网络路由或防火墙规则。

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

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

vpn openvpn google-cloud-platform google-compute-engine
  • 8 8 个回答
  • 31066 Views

8 个回答

  • Voted
  1. Shivox
    2015-02-01T14:16:21+08:002015-02-01T14:16:21+08:00

    您可以通过以下两种方式之一解决尽管能够 ping、traceroute... 却无法通过 VPN 浏览网页的问题:

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

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

    不知道问题是什么,看来这是谷歌的问题。

    • 7
  2. Best Answer
    OZ_
    2015-02-02T04:34:35+08:002015-02-02T04:34:35+08:00

    首先,感谢@Shivox 的回答。

    这是快速操作方法:

    • 我建议您创建其他网络(请参阅“网络”选项卡“)。在网络首选项中,添加以下允许规则:tcp:22(如果不存在)、tcp:9700、tcp: 17619。17619这里是可变的 - 将其更改为任何你喜欢的端口(范围是9075-65534)。你只需要3条规则和2条默认路由,没有别的。
    • 转到“创建计算引擎实例”,单击“显示高级选项”,允许端口转发,选择服务器的位置。
    • 现在(当您选择位置时),将静态 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 存档)。

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

    • 7
  3. Piotr Tabor
    2017-05-09T13:56:50+08:002017-05-09T13:56:50+08:00

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

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

    VPC 网络重写 IP 标头以将实例的外部 IP 地址声明为源。如果实例没有外部 IP 地址,则不允许调用,VPC 网络在不通知发送方的情况下丢弃数据包。

    因此,如果您的 openVPN 只是从其他网络转发数据包,那么到公共内部的数据包将被丢弃,因为source_ip与任何现有 VM 的内部 IP 不匹配。出于这个原因,您需要对离开本地网络的数据包进行 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”有效,因为它会自动配置 NAT。

    • 4
  4. Mario
    2014-05-03T01:00:33+08:002014-05-03T01:00:33+08:00

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

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

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

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

    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
    

    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>
    
    • 3
  5. Justin Miller
    2014-05-02T11:31:33+08:002014-05-02T11:31:33+08:00

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

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

    • 1
  6. Pavel P
    2019-11-08T02:41:02+08:002019-11-08T02:41:02+08:00

    您需要在谷歌云中为您的虚拟机实例启用 IP 转发,否则数据包将无法到达您的虚拟机。net.ipv4.ip_forward = 1请注意,这与您可以在 VM 中设置的内容是分开的。

    IP转发只能在创建虚拟机之前设置一次,之后不能修改。要为新 VM 启用它,请单击Management, security, disks, networking, sole tenancy: 在此处输入图像描述

    然后,在Networking选项卡中单击Network Interface并将 IP 转发设置为ON:

    在此处输入图像描述

    • 1
  7. Paul Rudnitskiy
    2014-04-23T04:41:00+08:002014-04-23T04:41:00+08:00

    您需要添加允许 OpenVPN 本身流量的规则:

    iptables -A INPUT -p udp --dport 1194 -j ACCEPT
    
    • 0
  8. pmi
    2017-06-12T13:01:39+08:002017-06-12T13:01:39+08:00

    关于网络。

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

    2) 我强烈建议您将 Masquerade 添加到您的网络

    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
    
    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • 用 D-LINK DFL-CPG310 防火墙替换 Cisco Pix 防火墙

  • 最好的点对点 VPN?

  • WAN 上的 VLAN

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve