本文以 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