Debian 10 安装strongswan 和 xl2tpd 支持ipsec 与 l2tp 虚拟专用网
一、软件安装
ipsec 与 l2tp,一般常见的操作系统都直接支持,不需要额外安装软件。所以在选择上优先考虑。
在Debian 10下面安装非常容易,执行以下命令:
apt-get install strongswan xl2tpd strongswan-pki
二、软件配置
StrongSwan 的配置主要为 ipsec.conf、strongswan.conf;
xl2tpd 的配置主要为 xl2tpd.conf、options.xl2tpd;
以下为四个配置文件样例:
1、ipsec.conf
config setup
uniqueids=no
charondebug="cfg 2, dmn 2, ike 2, net 0"
conn %default
dpdaction=clear
dpddelay=300s
rekey=no
left=%defaultroute
leftfirewall=yes
right=%any
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
auto=add
#######################################
# L2TP Connections
#######################################
conn L2TP-IKEv1-PSK
type=transport
keyexchange=ikev1
authby=secret
leftprotoport=udp/l2tp
left=%any
right=%any
rekey=no
forceencaps=yes
#######################################
# PSK Connections
#######################################
# Cisco IPSec
conn IKEv1-PSK-XAuth
keyexchange=ikev1
leftid=@lostend.com
leftauth=psk
rightauth=psk
rightauth2=xauth
leftsubnet=0.0.0.0/0
rightsubnet=10.0.0.0/24
rightsourceip=10.0.0.0/24
#######################################
# Certificate Connections
#######################################
conn windows7
keyexchange=ikev2
rekey=no
leftauth=pubkey
leftid=@lostend.com
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=rsa
rightsourceip=10.0.0.0/24
rightsendcert=never
eap_identity=%any
include /var/lib/strongswan/ipsec.conf.inc
2、strongswan.conf
charon {
load_modular = yes
send_vendor_id = yes
plugins {
include strongswan.d/charon/*.conf
attr {
dns = 1.2.4.8, 119.29.29.29
}
}
}
include strongswan.d/*.conf
3、xl2tpd.conf
[global]
port = 1701
auth file = /etc/xl2tpd/l2tp-secrets
debug avp = yes
debug network = yes
debug state = yes
debug tunnel = yes
[lns default]
ip range = 10.1.0.2-10.1.0.254
local ip = 10.1.0.1
require chap = yes
refuse pap = yes
require authentication = yes
name = l2tpd
;ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
如上配置中,因为开启了chap的验证,拒绝了pap验证。所以验证文件是 /etc/ppp/chap-secrets ,在使用l2tp连接时,需要用到这个文件进行用户校验。上面的 /etc/xl2tpd/l2tp-secrets 文件是没什么用的。
以下是 /etc/ppp/chap-secrets 用户验证文件的示例:
# Secrets for authentication using CHAP
# client server secret IP addresses
"test" "*" "testpassword" "*"
"test"是用户名,"testpassword"是密码。多个的话,每个一行分开填写。
4、options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
ms-dns 1.2.4.8
ms-dns 119.29.29.29
noccp
auth
idle 1800
mtu 1460
mru 1460
lcp-echo-failure 10
lcp-echo-interval 60
connect-delay 5000
其中mtu,mru 需要根据实际情况填写,不确定的话,填写1280是比较保险的值。
创建好四个配置文件后将其复制到指定位置即可:
# Strongswan Configuration
sudo cp ipsec.conf /etc/ipsec.conf
sudo cp strongswan.conf /etc/strongswan.conf
# XL2TPD Configuration
sudo cp xl2tpd.conf /etc/xl2tpd/xl2tpd.conf
sudo cp options.xl2tpd /etc/ppp/options.xl2tpd
三、证书创建
对于 Windows、Android 等设备可能不支持某些登录方式,比如 IKEv2 PSK,这时需要创建证书,以支持使用 IKEv2 证书登录:
1、生成一个私钥,并基于这个私钥自己签一个 CA 证书:
# create CA certificate
ipsec pki --gen --outform pem > ca.key.pem
ipsec pki --self --in ca.key.pem --dn "C=CN, O=StrongSwan, CN=StrongSwan CA" --ca --outform pem > ca.cert.pem
2、创建服务器证书,并用我们刚才自签的 CA 证书给自己发一个服务器证书:
# create server certificate
ipsec pki --gen --outform pem > server.key.pem
ipsec pki --pub --in server.key.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.key.pem --dn "C=CN, O=StrongSwan, CN=lostend.com" --san="lostend.com" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
其中 --san 可以指定多个,但一般一个是域名,一个是外网 IP,如果经过了路由,那么只需要写本机的对外暴露网卡的 IP 即可。
--dn, --san,--flag 是一些客户端方面的特殊要求:
iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址;
Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证),--flag serverAuth;
非 iOS 的 Mac OS X 要求了「IP 安全网络密钥互换居间(IP Security IKE Intermediate)」这种增强型密钥用法(EKU),--flag ikdeIntermediate;
Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,--san。
3、创建客户端证书,然后用刚才自签的 CA 证书来签客户端证书:
ipsec pki --gen --outform pem > client.key.pem
ipsec pki --pub --in client.key.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.key.pem --dn "C=CN, O=StrongSwan, CN=Test" --outform pem > test.cert.pem
看懂了服务器的,客户端的也就不难理解了。除了没有那一堆特殊要求别的都一样。
客户端证书可以每个客户端签一个,也可以让它们共用一个。是否多签看用途,一般用于区分设备。
4、生成 pkcs12 证书(可选)
安卓等设备是不支持直接导入客户端证书的,需要转换成 p12 格式,转换过程中需要输入两次密码,该密码为证书使用密码,导入时需要输入:
openssl pkcs12 -export -inkey client.key.pem -in test.cert.pem -name "Test" -certfile ca.cert.pem -caname "StrongSwan CA" -out test.cert.p12
5、安装证书
创建完成后将证书复制到指定目录即可
sudo cp -r ca.cert.pem /etc/ipsec.d/cacerts/
sudo cp -r server.cert.pem /etc/ipsec.d/certs/
sudo cp -r server.key.pem /etc/ipsec.d/private/
sudo cp -r test.cert.pem /etc/ipsec.d/certs/
sudo cp -r client.key.pem /etc/ipsec.d/private/
CA 证书、客户端证书和 .p12 证书复制出来给客户端用。有几种 Android 配置还需要服务器证书(server.cert.pem)。
四、用户验证文件
ipsec.secrets 文件示例:
ipsec.secrets文件是需要复制到/etc/ipsec.secrets 位置的,很多网上的教程都是错的。这点需要划重点注意。
: PSK "testpassword"
: RSA server.key.pem
test : EAP "testpassword"
test : XAUTH "testpassword"
在上面的例子中,创建了认证用户test和test的密码。在添加用户的时候,请注意在冒号(:)左右两边都需要一个空格。
上面定义的是四种认证方法。它们之间是遵循「各找各妈」的原则的,可以任意混搭。
每种认证方式找各自的认证内容,具体可以参考官方说明:
https://wiki.strongswan.org/projects/strongswan/wiki/Ipsecsecrets
五、linux转发配置
使用iptables 来进行转发:
sudo iptables -A INPUT -p udp --dport 1701 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 500 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 4500 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -o eth0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -m policy --dir out --pol none -j MASQUERADE
sudo iptables -A FORWARD -s 10.1.0.0/24 -j ACCEPT
sudo iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p
其中 10.1.0.0/24 和 10.0.0.0/24 就是ipsec.conf 和xl2tpd.conf 里面配置的子网网段。自己根据情况进行修改。
eth0 的网卡名也要根据自己的机器情况作修改。
至此,所以配置就完成了。重启ipsec和xl2tpd 生效
sudo /etc/init.d/ipsec restart
sudo /etc/init.d/xl2tpd restart
六、Windows 7 ikev2 认证配置
使用自带客户端(Agile):
导入证书:
- 开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。
- 「文件」-「添加/删除管理单元」,添加「证书」单元
- 证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。
- 在左边的「控制台根节点」下选择「证书」-「个人」,然后选右边的「更多操作」-「所有任务」-「导入」打开证书导入窗口。
- 选择刚才生成的 test.cert.p12 文件。下一步输入私钥密码。下一步「证书存储」选「个人」。
- 导入成功后,把导入的 CA 证书剪切到「受信任的根证书颁发机构」的证书文件夹里面。
- 打开剩下的那个私人证书,看一下有没有显示「您有一个与该证书对应的私钥」,以及「证书路径」下面是不是显示「该证书没有问题」。
- 然后关闭 mmc,提示「将控制台设置存入控制台1吗」,选「否」即可。
至此,证书导入完成。
注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中,ipsec 守护精灵是访问不了它的。
建立连接:
- 「控制面板」-「网络和共享中心」-「设置新的连接或网络」-「连接到工作区」-「使用我的 Internet 连接」
- Internet 地址写服务器地址,使用 IP 或都是 URL。
- 描述随便写。
- 点击右下角网络图标,在新建的 VPN 连接上右键属性然后切换到「安全」选项卡。
- VPN 类型选 IKEv2
- 数据加密是「需要加密」
- 身份认证这里使用私人证书认证的话就选择「使用计算机证书」。
配置完成。