Debian 10下StrongSwan服务器的安装与配置
Debian 10自带了StrongSwan 5.7.2,安装时注意将libstrongswan-extra-plugins和libcharon-extra-plugins插件包也安装上,否则缺少了eap-mschapv2等的认证方式,windows客户端无法连接。
apt install strongswan strongswan-pki libstrongswan-extra-plugins libcharon-extra-plugins
进入/etc/ipsec.d目录,生成系统CA私匙和CA证书:
pki --gen --outform pem > caKey.pem pki --self --in caKey.pem --dn "C=CN, O=MyVPS, CN=Domain_or_IP" --ca --lifetime 3650 --outform pem >caCert.pem
生成VPN服务器用于认证客户端的私匙和证书,由于Windows操作系统ikev2认证时并不会交换整个DN而只发送CN,因此需要绑定–san参数与CN值一致,而且需要加上serverAuth的标志,ikeIntermediate标志则是为了兼容旧的osX系统:
pki --gen --outform pem > vpnKey.pempki --pub --in vpnKey.pem | pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CN, O=MyVPS, CN=Domain_or_IP" --san Domain_or_IP --flag serverAuth --flag ikeIntermediate --outform pem > vpnCert.pem
私匙和证书生成了之后,将caKey.pem和vpnKey.pem放入/etc/ipsec.d/private目录,caCert.pem放入/etc/ipsec.d/cacerts目录,vpnCert.pem放入/etc/ipsec.d/certs目录,StrongSwan会在相应的目录中寻找需要的密匙和证书文件,因此不能搞错。
然后进入配置StrongSwan服务器的阶段。首先是/etc/strongswan.conf文件:
charon { load_modular = yes # 这个配置项会加载所有安装了的charon插件,若想只加载部分插件,用下面的load=配置项,空格分隔插件名 #load = random nonce aes des sha1 sha2 md4 pem pkcs1 curve25519 gmp x509 curl revocation hmac stroke kernel-netlink socket-default fips-prf eap-mschapv2 eap-identity updown plugins { include strongswan.d/charon/*.conf } dns1 = 8.8.8.8 dns2 = 8.8.4.4 }
strongswan.d目录下的配置文件是对插件和服务器其它行为的配置,一般不需要手工调整。
接下来是/etc/ipsec.conf的配置,这是配置VPN连接的,以下是配置macOS和iOS使用PSK(预共享密匙)连接和Windows的EAP-mschap2认证的:
config setup # strictcrlpolicy=yes uniqueids = no conn %default #ikelifetime=60m #keylife=20m rekeymargin=3m keyingtries=1 keyexchange=ikev2 leftfirewall=yes # 打开leftfirewall选项,strongswan服务器会在建立连接的时候自动生成数据转发的iptables条目 conn windows-eap ike=aes256-sha1-modp1024! esp=aes256-sha1! dpdaction=clear dpddelay=300s rekey=no left=%any leftsubnet=0.0.0.0/0 leftid=这里是vpnCert.pem证书中CN(--san参数)的字符串 leftcert=vpnCert.pem leftauth=pubkey right=%any leftsubnet=0.0.0.0/0 leftid=这里是vpnCert.pem证书中CN(--san参数)的字符串 leftcert=vpnCert.pem leftauth=pubkey right=%any rightsourceip=10.1.0.0/24 rightauth=eap-mschapv2 rightsendcert=never eap_identity=%any auto=add conn macos-psk ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024 esp=aes256-sha256,3des-sha1,aes256-sha1 dpdaction=clear rekey=no compress=no type=tunnel fragmentation=yes left=%any leftsubnet=0.0.0.0/0 leftid=这里是vpnCert.pem证书中的CN字符串 right=%any rightsourceip=10.1.0.0/24 rightid=%any authby=secret auto=add然后在/etc/ipsec.secrets文件里配置各连接的认证用户名和密码:
# Windows EAP-MSCHAPv2认证方式,需要在客户端安装vpnCert.pem证书文件 : RSA vpnKey.pem 用户名 : EAP "密码" # 预共享密匙认证方式 : PSK "预共享密匙"
Debian 10默认使用firewalld作为防火墙的前端管理,需要打开ipsec服务的端口,另外,由于打开了ipsec.conf里的leftfirewall选项,StrongSwan服务器会在VPN连接建立的时候自动配置转发规则,因此需要打开防火墙的masquerade规则:
firewall-cmd --zone=public --add-service=ipsec --permanent firewall-cmd --zone=public --add-masquerade --permanent firewall-cmd --reload
配置完成。可以启动StrongSwan服务器,并查询其状态:
systemctl start strongswan systemctl enable strongswan ipsec statusall