安装
strongswan 老版本和新版本不同, 老版本是基于 /etc/ipsec.conf 配置的, 而新版本是基于 /etc/swanctl/swanctl.conf, /etc/swanctl/conf.d/ 进行配置的. 配置文件语法不一样. 本文主要关注新配置的使用.
删除旧版本: sudo apt install strongswan-starter strongswan-charon (如果你不小心 sudo apt install strongswan 的话)
安装新版本: sudo apt install charon-systemd strongswan-swanctl
配置
某地的公司办公室, 通过IPsec连接到另一地区的办公室.
/etc/swanctl/conf.d/office-tunnel.conf
1 | connections { |
需要注意的点:
名字 office-tunnel, net-net, ike-psk 虽然是可以自己随意取, 但是是全局唯一的, 也就是说在本机的所有配置文件中只能出现1次. 并不存在 office-tunnel-1 下面的 net-net 和 office-tunnel-2 下面的 net-net 是不同的情况.
start_action = start 如果不配置这个, 隧道不会被自动拉起. trap 的含义是当有流量尝试走这个隧道的时候也触发一次主动握手.
close_action = start 如果不配置这个, 当对端主动发起CLOSE之后(或者断网了!!!), 隧道不会被自动拉起.
dpd_action = restart 如果不配置这个, DPD(Dead Peer Detection)检测触发掉线之后, 隧道不会被自动拉起.
(不是很懂为什么 IPsec/Strongswan 要这么设计… 非常诡异啊, 默认都是不拉起隧道…)
version = 2 表示我们在使用 IKEv2. 不写默认是 IKEv1.
mobike = yes 本端在NAT后, 启用 IKEv2 Mobility and Multihoming Protocol. 主要作用是当网络地址发生变化时尽量保持现有的IKE/IPsec SA. 当地址变化了的时候, 可以通过本协议更新对端地址. 需要双方都支持 MOBIKE.
keyingtries = 0 表示 IKE/IPsec 协商失败后无限重试, 不限制重试次数. (这也很诡异, 什么情况下会不重试啊= =)
children/net-net 里面, replay-window = 4096 配置 IPsec ESP 的抗重放窗口大小为 4096 个包. 允许最近的 4096 个包乱序但尚未收到过. 主要用于增加吞吐量, 底层网络有抖动时, 或底层网络包会乱序时重传窗口能够防止因为乱序而丢弃ipsec包.