资料来源 https://medium.com/@earlg3/setting-up-an-ipsec-vpn-to-google-cloud-with-libreswan-ubiquiti-edgerouter-39f064559fcb
使用Libreswan和Ubiquiti EdgeRouter为Google Cloud设置IPsec VPN
使用Google Cloud设置Site-to-Site IPsec VPN 的最佳做法是使用Cloud VPN服务。GCP中的云端VPN服务提供了99.9%的SLA,由Google进行管理。但是,它每个隧道的费用平均为每小时0.05美元,加上定期交通费,因此如果使用24/7将花费36.50美元,这对于生产环境来说当然是合理的。为了测试或实验目的,Google Compute Engine(GCE)实例也可以以较低的成本执行VPN功能。
对于不需要大量吞吐量的实验室用途,作为GCP免费套件一部分的Always Free f1-micro实例可以做到这一点。的F1-微已经1共享的vCPU和.6GB的RAM,但将用于测试和实验室使用工作。在这种情况下,由于f1-micro是免费的,成本将是常规流量费率以及超出Always Free层限制的任何费用。
因此,理论上讲,如果脚本设置为监视VPN并管理故障转移以及所有爵士乐,则可以使用多个功率更高的实例配置此GCE设置。然而,这将是乏味的,因此生产只需使用Google Cloud VPN。
以下指南将详细介绍将运行Libreswan的Google Compute Engine(GCE)实例连接到具有Ubiquiti EdgeRouter的单独网络的步骤。另一端没有任何需要Ubiquiti设备的东西,但它是一种流行的实验室路由器,避免了在另一端管理虚拟机。如果在另一端有其他更喜欢的东西,则交换它应该是微不足道的。该示例与AWS'“ 将多个VPC与EC2实例连接 ”教程中描述的行为相似,以供参考。
毫不费力,让我们开始吧。我们将通读以下内容:
- 为Libreswan创建GCE实例
- 为Libreswan配置GCE实例
- 配置Ubiquiti EdgeOS
- 确认直接连接
- 创建要连接的网络的GCP路由
- 确认网络连接
以下是此示例设置中使用的参数,但应更改以符合实际环境:
GCE实例名称: gcp-vpn-01 GCE实例IP(内部): 10.1.2.2 GCE实例IP(外部): 35.185.42.90 GCP XPN网络范围: 10.1.0.0/16
Lab External IP: 104.139.101.201 实验室网络范围: 192.168.1.0/24
为Libreswan创建GCE实例
概观
如果使用跨项目网络,请在您的XPN主机项目中创建实例; 如果只是为了创建单个项目的VPN,只需在该项目中创建它即可。
在这个例子中选择CentOS 7作为发行版,所以如果使用Debian或Ubuntu,那么所显示的命令将会在所使用的软件包管理器,以及可能的文件位置等方面略有变化。
联网
如果您已经设置了跨项目网络(XPN),将GCE VPN实例放入XPN网络中将使服务项目能够使用连接,而不仅仅是在单个项目中可用。
创建GCE实例时,请确保选择静态IP而不是短暂的,以便实例重新启动时不需要更改IP。记下在设置过程中使用的静态IP(例如35.185.42.90)。另外,请记下我们将在GCP端连接的子网范围(例如10.1.0.0/16)。
您还需要确保“ IP转发 ”已打开。这相当于AWS中的“禁用源/目标检查”,并允许实例路由流量。
理想情况下,一定要创建适当的防火墙规则,只允许GCE VPN实例只与其他已批准的网络通信。不建议将VPN实例保持开放。
为Libreswan配置GCE实例
实例配置完成后,继续通过SSH登录。
安装libreswan
根据您的发行版本,安装“openswan”将安装openswan或libreswan,但两者看起来大多是兼容的。在GCP实例中运行以下命令来安装openswan:sudo yum install openswan -y
配置Openswan
默认情况下,libreswan包含任何配置文件/etc/ipsec.d/*.conf
。我们将gcp-to-lab.conf
在这里创建并放置我们的配置。
conn gcp-to-lab type = tunnel authby = secret left =%defaultroute leftid = 35.185.42.90 leftnexthop =%defaultroute leftsubnet = 10.1.0.0 / 16 right = 104.139.101.201 rightsubnet = 192.168.1.0 / 24 pfs = yes auto = start
我们还需要一个.secrets文件,其中将包含我们的预共享密钥。gcp-to-lab.secrets
在里面创建/etc/ipsec.d/
。
35.185.42.90 104.139.101.201:PSK“PRESHARED_KEY_HERE”
在创建这两个文件后,您应该在里面看到它们以及一些默认文件/etc/ipsec.d/
:
启动Openswan
执行以下命令启动openswan: sudo systemctl start ipsec.service
如果你运行ps ax|grep ipsec
,你现在应该看到它正在运行:
使用以下命令启用Openswan启动: sudo systemctl enable ipsec.service
将以下内容添加到/etc/sysctl.conf中:
net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0
重新启动网络: sudo /etc/initd.network restart
此时,GCP实例已配置,因此我们转到Ubiquiti确认。
配置Ubiquiti EdgeOS
通过GUI登录到EdgeMAX; 这也可以通过CLI进行配置,但GUI非常简单。
导航到EdgeRouter的VPN部分:
选择“IPsec站点到站点”选项卡,配置对等设置,然后选择“应用”。
确认直接连接
重新启动GCP实例以确保Libreswan在启动时启动并正确连接。
重新启动后,登录并运行以下命令:service ipsec status
。显示“IPsec SA建立隧道模式”的状态。
尝试从GCP VPN实例ping实验室网络(例如192.168.1.100):
尝试从实验室网络ping通GCP VPN:
创建要连接的网络的GCP路由
直到此时,在GCP实例(即gcp-vpn-01)和实验室网络(192.168.1.0/24)之间创建了一个VPN,但其余的GCP网络尚未配置为可以到达实验室网络。为了解决这个问题,我们需要在GCP网络中创建一个路由。
导航到主机项目中的网络 - >路由。选择“创建路线”。配置类似于以下的路由:
确认网络连接
从不相关的Google Compute Engine实例中,尝试ping到实验室网络。它应该是成功的:
反之亦然:
最后的想法
实验室网络和GCP网络之间的连接已经建立。没有冗余,并且如果EdgeRouter或GCE实例发生故障,则VPN网络连接断开。配置的GCE实例很小,所以性能不是目标。也就是说,如果测试或要求允许这些注意事项,那么实验室和GCP网络之间的连接是一个很好且相对便宜的连接。
要进行制作,请使用Google Cloud VPN。