介绍在Linux上安装StrongSwan及Roadwarrior的配置方法。
Android12开始仅支持IKEv2。当前使用的SoftEther软件目前仅支持IKEv1,准备使用支持IKEv2的StrongSwan替代SoftEther。安装SoftEther方法参照Amazon Linux服务器上安装SoftEtherVPN。
根据StrongSwan官方的介绍有如下3种连接方式,在这里介绍的是Roadwarrior连接方式。
- Host-to-Host
- Site-to-Site
- Roadwarrior(carol为客户端既Roadwarrior,moon为StrongSwan服务器)
测试环境及使用的软件如下,根据介绍的内容完成安装及配置后,可在Android设备使用StrongSwan客户端访问StrongSwan服务器。
- 系统:Amazon Linux2
- StrongSwan版本:5.9.7(2022/9/10最新版本)
- 证书:Certbot颁发证书
- IKE版本:V2
- 客户端认证方式:EAP-MSCHAPv2
- local:0.0.0.0/0 (允许访问所有资源)
- remote: 0.0.0.0/0 (允许所有IP地址访问StrongSwan)
- StrongSwan客户端:Android版
事前准备
开始编译安装StrongSwan之前需要安装编译用的gcc包及StrongSwan需要的包。
gcc及systemd-devel的安装
启动Amazon Linux2 EC2之后,使用yum update命令进行Package的最新化后,安装编译安装所需的gcc及charon-systemd所需的systemd-devel。
# yum update -y
# yum install gcc systemd-devel
安装gmp包
yum安装m4及libgmp-dev包之后,编译安装gmp包。
# yum install m4 libgmp-dev
# cd /tmp
# wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
# xz -d gmp-6.2.1.tar.xz; tar xvf gmp-6.2.1.tar
# cd gmp-6.2.1
# ./configure
# make
# make check
# make install
修改内核参数
编辑/etc/sysctl.conf文件,在末尾添加以下内容允许Packet的转发。
# vi /etc/sysctl.conf
在/etc/sysctl.conf文件添加以下内容
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
生效配置
# sysctl -p
安装StrongSwan
将SgrongSwan下载至/tmp目录后,进行解压后进行编译安装。configure参数比较多,主要有如下3个。
- 指定配置文件的路径为/etc(也是StrongSwan官方的推荐)
- 使用systemd启动及停止StrongSwan,而无需自己定义systemd-unit
- 激活eap-mschapv2等认证方式(默认eap-mschapv2认证方式不会被激活)
# cd /tmp
# wget https://download.strongswan.org/strongswan-5.9.7.tar.gz
# tar zxvf strongswan-5.9.7.tar.gz; cd strongswan-5.9.7
# ./configure --prefix=/usr --sysconfdir=/etc --enable-systemd \
--enable-swanctl --disable-charon --disable-stroke \
--disable-scepclient --enable-eap-dynamic \
--enable-eap-md5 --enable-eap-mschapv2
# make
# make check
# make install
配置证书
首先参照Certbot获取免费SSL/TLS证明书文档,获取StrongSwan里使用的证明书。接下来将Certbot获取到的证书,软链接到/etc/swanctl目录下的对应目录。
# ln -s /etc/letsencrypt/live/moto.sys-blog.net/cert.pem /etc/swanctl/x509/
# ln -s /etc/letsencrypt/live/moto.sys-blog.net/chain.pem /etc/swanctl/x509ca/
# ln -s /etc/letsencrypt/live/moto.sys-blog.net/privkey.pem /etc/swanctl/private/
配置StrongSwan
完成StrongSwan安装及证书的配置后,进行StrongSwan的配置。创建/etc/swanctl/conf.d/moto.sys-blog.net.conf文件,并添加以下内容。
# vi /etc/swanctl/conf.d/moto.sys-blog.net.conf
添加以下内容
connections {
ikev2-eap-mschapv2 {
version = 2
rekey_time = 0s
pools = moto-pool
fragmentation = yes
local_addrs = %any
local {
auth = pubkey
certs = cert.pem
# your certication domain name
id = moto.sys-blog.net
}
remote {
auth = eap-mschapv2
eap_id = %any
}
children {
ikev2-eap-mschapv2 {
local_ts = 0.0.0.0/0
}
}
send_certreq = no
}
}
pools {
moto-pool {
# virtual ip address,既分配给carol客户端的IP地址段
addrs = 10.3.1.0/24
dns = 10.1.0.2
}
}
secrets {
eap-moto {
# 定义用户名和密码
id = moto
secret = 6yhn7ujm
}
}
配置NAT
使用iptables将客户端carol发送的Packet以NAT的形式发送到moon后端的服务器。
安装iptables服务
# yum install iptables-services
启动iptables服务
# systemctl start iptables
配置NAT转发规则
# iptables -t nat -A POSTROUTING -s 10.3.1.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
# iptables -t nat -A POSTROUTING -s 10.3.1.0/24 -o eth0 -j MASQUERADE
保存NAT转发规则
# service iptables save
确认保存内容
# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.8.4 on Sat Sep 10 13:23:58 2022
*nat
:PREROUTING ACCEPT [4490:776385]
:INPUT ACCEPT [2100:94947]
:OUTPUT ACCEPT [1025:79292]
:POSTROUTING ACCEPT [1025:79292]
-A POSTROUTING -s 10.3.1.0/24 -o eth0 -m policy --dir out --pol ipsec -j ACCEPT
-A POSTROUTING -s 10.3.1.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Sat Sep 10 13:23:58 2022
将iptables服务设定为开机自动启动
# systemctl enable iptables
启动StrongSwan
启动StrongSwan服务
# systemctl start strongswan
确认StrongSwan服务的状态
# systemctl status strongswan
strongswan.service - strongSwan IPsec IKEv1/IKEv2 daemon using swanctl
Loaded: loaded (/usr/lib/systemd/system/strongswan.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2022-09-10 09:35:16 UTC; 4h 10min ago
Main PID: 2920 (charon-systemd)
Status: "charon-systemd running, strongSwan 5.9.7, Linux 5.10.130-118.517.amzn2.x86_64, x86_64"
CGroup: /system.slice/strongswan.service
└─2920 /usr/sbin/charon-systemd
将StrongSwan服务设定为开机自动启动
# systemctl enable strongswan
动作确认
下载StrongSwan客户(Android)
在Androdi设备访问 Android客户端下载地址 下载地址后,点击下载后进行安装。
客户端的设定
打开StrongSwan客户端后,点击「ADD VPN PROFILE」开始配置。
输入以下内容后点击「SAVE」。
- Server:moto.sys-blog.net(或者IP地址)
- VPN Type:IKEv2 EAP(Username/Password)
- Username:用户名(secrets部分里设定的用户名)
- Password:密码(secrets部分里设定的密码)
连接测试
最后一步,点击连接如下面的页面出现「Connected」表示成功连接StrongSwan服务器。
当连接失败时,可查看StrongSwan客户端的日志文件及服务器端的/var/log/messages文件里的错误内容。并使用swanctl命令查看StrongSwan服务相关信息。
小结
第一次接触StrongSwan,花费1天时间终于连接成功。例如编译安装时没有指定eap-mschapv2导致认证失败等,遇到各种错误。StrongSwan所需要的知识面比较多,有网络,系统相关操作,证书及认证相关等知识。
将StrongSwan作为网关,可轻松地实现让外部设备访问内部资源。但基于目前越来越高的安全需求,使用场景还需慎重考虑。
参考StrongSwan官网的URL如下。
Introduction to strongSwan
charon-systemd
Forwarding and Split-Tunneling
Autoconf Options
Configuration Quickstart