Debian 10下Windows和macOS登录StrongS
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.pem
pki --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
#nbns1 = 10.1.0.1
#nbns2 = 10.1.1.1
}
/etc/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
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 "密码"
#user@domain : EAP "password"
# 预共享密匙认证方式
: 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