•
本文以 LUG VPN 为例,简述在 Debian wheezy 上部署 IPSec VPN 的方法。
安装 strongswan
首先安装软件包:strongswan
修改配置文件
修改 /etc/strongswan.conf,配置 DNS 和 NetBIOS 服务器(如果没有可以不填)。
# strongswan.conf - strongSwan configuration file
charon {
duplicheck.enable = no
dns1 = 202.141.160.99
dns2 = 202.141.160.95
nbns1 = 202.141.160.99
nbns2 = 202.141.160.95
filelog {
/var/log/strongswan.charon.log {
time_format = %b %e %T
default = 2
append = no
flush_line = yes
}
}
threads = 16
send_vendor_id = yes
}
pluto {
}
libstrongswan {
}
修改 /etc/ipsec.conf。由于 LUG VPN 的 IPSec 支持是为 Windows Phone 准备的,只支持 MSCHAPv2 认证协议。VPN 客户端分配到的虚拟 IP 是 10.5.0.0/16 网段的。
# ipsec.conf - strongSwan IPsec configuration file
config setup
# plutodebug=all
# crlcheckinterval=600
# strictcrlpolicy=yes
# cachecrls=yes
# nat_traversal=yes
charonstart=yes
plutostart=no
conn windows
keyexchange=ikev2
ike=aes256-sha1-modp1024!
rekey=no
left=%any
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.5.0.0/16
rightsendcert=never
eap_identity=%any
auto=add
include /var/lib/strongswan/ipsec.conf.inc
创建服务器端的证书
LUG VPN 的 IPSec 服务器证书是有效期三年,到 2017 年 4 月 18 日过期。下面例子写的是生成 10 年有效期的 CA 和服务器证书。需要以 root 身份执行下列命令。
cd /etc/ipsec.d
openssl req -x509 -days 3650 -newkey rsa:2048 -keyout private/ca.pem -out cacerts/ca.cert.pem
openssl req -newkey rsa:2048 -keyout private/server.pem -out reqs/server-req.pem
修改 /usr/lib/ssl/openssl.cnf,把 [ CA_default ] 一节按下面修改:
[ CA_default ]
dir = /etc/ipsec.d # Where everything is kept
certificate = $dir/cacerts/strongswanCert.pem # The CA certificate
private_key = $dir/private/strongswanKey.pem # The private key
初始化证书数据库。
cd /etc/ipsec.d
mkdir newcerts
touch index.txt
echo "00" > serial
最后生成服务器证书。
openssl ca -in reqs/server-req.pem -days 3650 -out certs/server.cert.pem -notext
把 cacerts/ca.cert.pem 交给用户,让用户参考 VPN 支持 IPSec,可用于 WinPhone 8.1 和 在 Windows 上使用 IPSec 连接 VPN 的说明,安装 CA 证书。
添加用户
编辑 /etc/ipsec.secrets 文件。每个用户的登录名和明文密码的组合占一行。
include /var/lib/strongswan/ipsec.secrets.inc
: RSA server.pem
'zhangsan@example.com' : EAP "deadbeef"
'lisi@example.com' : EAP "helloworld"
由于是明文密码,请注意检查 /etc/ipsec.secrets 文件的权限,应当是 400,即除 root 外不可读。
最后重启 ipsec 服务:service ipsec restart
如果需要接入 VPN 的用户能够通过 VPN 服务器访问外网,需要设置转发(转发规则重启后会失效,需要写进 /etc/rc.local 启动脚本):
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.5.0.0/16 ! -d 10.5.0.0/16 -j MASQUERADE