GCE + OpenVPN +子网不能正常工作

时间:2016-08-26 14:38:19

标签: networking google-compute-engine google-cloud-platform

我想在谷歌计算平台上创建一个专用网络,我只能使用vpn进入。 所以,我在GCE中创建了一台机器,并安装了openvpn。本机具有静态IP,ssh端口打开以及GCE的默认网络配置。 然后,我在同一网络中创建第二台机器(称为MachineA),但没有外部IP。 然后我创建路由规则,以便将流量从vpn-machine重定向到另一个内部实例。

我可以从我的机器连接到vpn。 我能ping到vpn机器。 我可以ping到MachineA。 我能够ssh到vpn机器。 我能够ssh到MachineA。

...但 当我连接到ssh vpn机器并运行gsutil时它工作,也ping到8.8.8.8 当我连接到ssh MachineA并运行gstult或ping 8.8.8.8不起作用。

任何想法我做错了什么?

一些信息

来自VPN-machine的

xxx@dev-vpn:~$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.240.10.1     0.0.0.0         UG        0 0          0 eth0
10.16.0.0       10.16.0.2       255.255.255.0   UG        0 0          0 tun0
10.16.0.2       0.0.0.0         255.255.255.255 UH        0 0          0 tun0
10.240.10.1     0.0.0.0         255.255.255.255 UH        0 0          0 eth0

xxx@dev-vpn:~$ traceroute 10.240.10.3
traceroute to 10.240.10.3 (10.240.10.3), 30 hops max, 60 byte packets
 1  * * instance-1.c.project.internal (10.240.10.3)  1.188 ms
来自MachineA的

traceroute to 10.240.10.2 (10.240.10.2), 30 hops max, 60 byte packets
 1  * * *
 2  * * dev-vpn.c.project.internal (10.240.10.2)  0.899 ms

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.240.10.1     0.0.0.0         UG        0 0          0 eth0
10.240.10.1     0.0.0.0         255.255.255.255 UH        0 0          0 eth0

在谷歌网络中,我添加了此规则 vpn-routing 10.16.0.0/24 1001无dev-vpn(区域us-central1-a)

1 个答案:

答案 0 :(得分:0)

我有一个可以执行此操作的工作系统。我所做的创新是添加别名 IP 范围并使 OpenVPN 服务器使用该 Google IP 范围。

因此,对于具有外部 IP 地址并将在 GCE 上运行 OpenVPN 服务器的路由器实例,您需要创建只有一个接口和一个小的 IP 别名范围的实例。这将允许从主接口到小别名范围的 IP 转发。假设您在默认网络 10.156.0.10/20 上并添加了别名范围 10.156.1.0/28,然后在 OpenVPN 服务器配置中添加服务器行:server 10.156.1.1。

因此 OpenVPN(服务器端)的 tun0 接口将出现在 10.156.1.1 上,隧道端点将出现在 10.156.1.2 上。

您必须将路由推送到 OpenVPN 客户端(因此在服务器配置中推送 10.156.0.0/20)。您还需要在服务器的 ccd/client 中使用 iroute 语句。

以下是 OpenVPN 服务器配置文件的摘录:

server 10.156.1.0 255.255.255.240

push "route 10.156.0.0 255.255.240.0"
push "route 10.164.0.0 255.255.240.0"
push "route 10.132.0.0 255.255.240.0"
route 192.168.127.0 255.255.255.0

如果您的站点网络是 192.168.127.0/24,并且您使用 3 个 Google 网络。 ccd/client 文件有这个

route 192.168.127.0 255.255.255.0
iroute 192.168.127.0 255.255.255.0

如果您有其他路线,您可能需要添加其他路线。 (OpenVPN 手册中有一节关于 ccd/ 和 iroute。)

返回 Google 云,您需要通过 10.156.0.10 上的 OpenVPN 网关添加 Google 路由才能返回 192.168.127.0/24。

为了确保主机安全,您应该采取很多防火墙措施,但您至少必须为 OpenVPN 打开 1194 端口。

在您的站点上,如果您想访问 Google Cloud 专用网络,则需要使用 Quagga 的 RIPd。这是一个相对简单的配置:

router rip
 network eth0
 passive-interface tun0
 no default-information originate
 redistribute kernel route-map GMAP
 access-list GCE permit 10.156.0.0/20
 access-list GCE permit 10.164.0.0/20
 access-list GCE permit 10.132.0.0/20
 access-list GCE deny any
 route-map GMAP permit 10
 match ip address GCE

这是 OpenVPN 客户端 网关的 RIPd 配置,它是一个路由器。此配置传播三个 Google Cloud 网络 10.{156,164,132}.0.0/20.

的任何路由

站点网络中其他主机上的 RIPd 配置不需要任何特殊配置,只需命名“router rip”和“network eth0”,即您主机的网络接口并启动 RIPd。 (VPN 客户端网关上的配置应该比这更容易,但我发现“没有默认信息来源”对我不起作用,所以我只需要传播 Google 路由。)