
strongSwan是一个开源、跨平台、功能齐全且广泛使用的基于IPsec的VPN(虚拟私人网络)实现,能够在Linux、FreeBSD、OS X、Windows、Android和iOS上运行。它主要是一个密钥守护程序,支持互联网密钥交换协议(IKEv1和IKEv2),以在两个对等方之间建立安全关联(SA)。
本文将介绍如何在Ubuntu和Debian服务器上使用strongSwan设置站点到站点的IPSec VPN网关。这里的站点到站点意味着每个安全网关后面都有一个子网。此外,对等方将使用预共享密钥(PSK)相互认证。
测试环境
请记得用您实际的IP地址替换以下IP,以配置您的环境。
站点1网关(tecmint-devgateway)
操作系统:Debian或Ubuntu
公共IP:10.20.20.1
私有IP:192.168.0.101/24
私有子网:192.168.0.0/24
站点2网关(tecmint-prodgateway)
操作系统:Debian或Ubuntu
公共IP:10.20.20.3
私有IP:10.0.2.15/24
私有子网:10.0.2.0/24
第一步:启用内核数据包转发
-
首先,您需要通过在两个安全网关的
/etc/sysctl.conf
配置文件中添加适当的系统变量来启用数据包转发。bash sudo vim /etc/sysctl.conf
找到以下行,取消注释并设置其值,如下所示(有关更多信息,请阅读文件中的注释)。plaintext net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0
-
接下来,通过运行以下命令加载新设置。
bash sudo sysctl -p
-
如果您启用了UFW防火墙服务,您需要在任一安全网关的
/etc/ufw/before.rules
配置文件中,在过滤规则之前添加以下规则。
站点1网关(tecmint-devgateway)
plaintext
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/24 -j MASQUERADE
COMMIT
站点2网关(tecmint-prodgateway)
plaintext
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -d 10.0.2.0/24 -j MASQUERADE
COMMIT
- 添加防火墙规则后,通过以下命令重新启动UFW以应用新更改。
bash sudo ufw disable sudo ufw enable
第二步:在Debian和Ubuntu中安装strongSwan
-
在两个安全网关上更新您的软件包缓存,并使用APT包管理器安装strongswan包。
bash sudo apt update sudo apt install strongswan
-
安装完成后,安装程序脚本将启动strongswan服务,并使其在系统启动时自动启动。您可以使用以下命令检查其状态及是否已启用。
bash sudo systemctl status strongswan.service sudo systemctl is-enabled strongswan.service
第三步:配置安全网关
- 接下来,您需要使用
/etc/ipsec.conf
配置文件配置安全网关。
站点1网关(tecmint-devgateway)
bash
sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
sudo nano /etc/ipsec.conf
将以下配置复制并粘贴到文件中。
plaintext
config setup
charondebug="all"
uniqueids=yes
conn devgateway-to-prodgateway
type=tunnel
auto=start
keyexchange=ikev2
authby=secret
left=10.20.20.1
leftsubnet=192.168.0.101/24
right=10.20.20.3
rightsubnet=10.0.2.15/24
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
aggressive=no
keyingtries=%forever
ikelifetime=28800s
lifetime=3600s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
站点2网关(tecmint-prodgateway)
bash
sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
sudo nano /etc/ipsec.conf
将以下配置复制并粘贴到文件中。
plaintext
config setup
charondebug="all"
uniqueids=yes
conn prodgateway-to-devgateway
type=tunnel
auto=start
keyexchange=ikev2
authby=secret
left=10.20.20.3
leftsubnet=10.0.2.15/24
right=10.20.20.1
rightsubnet=192.168.0.101/24
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
aggressive=no
keyingtries=%forever
ikelifetime=28800s
lifetime=3600s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
- 这里是每个配置参数的含义:
- config setup – 指定适用于所有连接的IPSec通用配置。
- charondebug – 定义应记录多少调试输出。
- uniqueids – 指定特定参与者ID是否应保持唯一。
- conn prodgateway-to-devgateway – 定义连接名称。
- type – 定义连接类型。
- auto – 在IPSec启动或重新启动时如何处理连接。
- keyexchange – 定义要使用的IKE协议版本。
- authby – 定义对等方如何相互认证。
- left – 定义左侧参与者的公共网络接口IP地址。
- leftsubnet – 说明左侧参与者后面的私有子网。
- right – 指定右侧参与者的公共网络接口IP地址。
- rightsubnet – 说明右侧参与者后面的私有子网。
- ike – 定义要使用的IKE/ISAKMP SA加密/认证算法列表。
- esp – 定义要用于连接的ESP加密/认证算法列表。
- aggressive – 指定是否使用攻击模式或主模式。
- keyingtries – 指定应尝试协商连接的次数。
- ikelifetime – 指定连接的密钥通道在重新协商之前应持续多长时间。
- lifetime – 定义连接的特定实例应持续多长时间,从成功协商到过期。
- dpddelay – 指定发送R_U_THERE消息/信息交换的时间间隔。
- dpdtimeout – 指定超时间隔,在此期间如果没有活动,则删除与对等方的所有连接。
- dpdaction – 定义如何使用死对等检测(DPD)协议来管理连接。
第四步:配置PSK以进行对等认证
-
配置完两个安全网关后,使用以下命令生成用于对等方的安全PSK。
bash head -c 24 /dev/urandom | base64
-
接下来,在两个网关的
/etc/ipsec.secrets
文件中添加PSK。bash sudo vim /etc/ipsec.secrets
复制并粘贴以下行。 ```plaintext ------- 站点1网关(tecmint-devgateway) -------10.20.20.1 10.20.20.3 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac="
------- 站点2网关(tecmint-prodgateway) -------
10.20.20.3 10.20.20.1 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac=" ```
-
重新启动IPSec程序并检查其状态以查看连接。
bash sudo ipsec restart sudo ipsec status
-
最后,通过运行ping命令验证您是否可以从任一安全网关访问私有子网。
bash ping 192.168.0.101 ping 10.0.2.15
-
此外,您可以通过以下方式停止和启动IPSec。
bash sudo ipsec stop sudo ipsec start
-
要了解更多有关IPSec命令的信息,以手动启动连接等,请查看IPSec帮助页面。
bash ipsec --help
总结
本文介绍了如何在Ubuntu和Debian服务器上使用strongSwan设置站点到站点的IPSec VPN,两个安全网关配置为使用PSK相互认证。如果您有任何问题或想法,请通过下面的反馈表与我们联系。
希望这篇文章对您有所帮助!如果您有其他问题,欢迎随时提问。