有朋友用的是windows phone 8.1。需要在手机上翻墙。

我看了一下,windows phone 8.1 支持的是ipsec+ikev2。通过google,发现strongswan可以支持。

因此,就在linux中安装了一个strongswan。特此做一下笔记。

我是直接通过编译source包来安装了。编译时所用的参数是:

##############################

./configure –prefix=/usr/local/strongswan-5.2.0 –enable-eap-identity –enable-eap-md5 –enable-eap-mschapv2 –enable-eap-tls –enable-eap-ttls –enable-eap-peap –enable-eap-tnc –enable-eap-dynamic –enable-eap-radius –enable-xauth-eap –enable-xauth-pam –enable-dhcp –enable-openssl –enable-addrblock –enable-unity –enable-certexpire –enable-radattr –enable-tools –enable-openssl –disable-gmp –enable-charon

##############################

编译前,要先确保系统的python版本较新,否则编译strongswan时会出现错误。

成功后,strongswan会安装到/usr/local/strongswan-5.2.0下。

下一步,生成服务器所需要的数字证书(之前我自己通过openssl生成的证书无法在strongswan下使用,问题症状是windows phone不认我的证书,所以只能再生成一套证书给strongswan用。

(下面的内容,如果你要参考,记得把里面相关内容替换掉)

##############################

/usr/local/strongswan/sbin/ipsec pki –gen –type rsa –size 4096 –outform pem > vpnca.key
/usr/local/strongswan/sbin/ipsec pki –self –flag serverAuth –in vpnca.key –type rsa –digest sha1 –dn “C=CN, O=Jacky He Ltd., CN=jackyhe.com” –ca > vpnca.crt
/usr/local/strongswan/sbin/ipsec pki –gen –type rsa –size 4096 –outform pem > server.key.pem
/usr/local/strongswan/sbin/ipsec pki –pub –in server.key.pem –type rsa > server.key.csr
/usr/local/strongswan/sbin/ipsec pki –issue –cacert vpnca.crt –cakey vpnca.key –digest sha1 –dn “C=CN, O=Jacky He Ltd., CN=vpn.jackyhe.com” –san “vpn.jackyhe.com” –flag serverAuth –outform pem < server.key.csr > server.crt
/usr/local/openssl/bin/openssl rsa -in server.key.pem -out server.key -outform DER
cp vpnca.crt /usr/local/strongswan-5.2.0/etc/ipsec.d/cacerts
cp server.crt /usr/local/strongswan-5.2.0/etc/ipsec.d/certs
cp server.key /usr/local/strongswan-5.2.0/etc/ipsec.d/private

##############################

下一步,配置ipsec.conf

# vi /usr/local/strongswan-5.2.0/etc/ipsec.conf

(下面的配置的意思是,创建一个叫“windows-eap-mschapv2”的VPN连接,VPN的左边是服务器本身,右边是客户端。左边通过服务器的数字证书做验证,右边是通过eap-mschapv2方式验证。)

(left=<ServerIP>  : 记得改为自己服务器的public IP)

(leftsubnet=0.0.0.0/0 : 这里定义的是哪些IP段需要通过VPN访问。如果你只是想让VPN客户端访问你VPN服务器后面的某个网段的话,就把leftsubnet定义为那个网段的IP段。可定义多个网段,网段与网段间用逗号分隔)

(leftid :这里定义是服务器段的数字证书的标识,请改为你的数字证书一样的标识。)

(right=%any : 这里定义的是客户端的IP,如果是动态IP,就写%any,如果静态IP,就改为对应的IP)

(rightsourceip=10.0.8.0/24 : 这里定义的是分配给客户端的VPN IP段,系统会从10.0.8.1开始分配IP给客户端。)

(rightsendcert=never : 这里定义的是是否要求客户段提供合法的数字证书。因为strongswan VPN可以通过“用户名+密码”,“数字证书”,“数字证书+用户名+密码”三种验证方式。我这里是用“用户名+密码”方式,所以不需要用户提供合法数字证书。)

(eap_identity=%any : 意思是这个“windows-eap-mschapv2” 连接中,可以用来登录的用户名是什么。如果你想给所有用户登录,就用%any。如果想给某些用户登录,就在这里列出。用户名间用逗号分隔。)

##############################

config setup
# strictcrlpolicy=yes
# uniqueids = no

# Add connections here.

conn windows-eap-mschapv2
keyexchange=ikev2
ike=aes256-sha1-modp1024!
esp=aes256-sha1,aes128-sha1!
dpdaction=clear
dpddelay=300s
rekey=no
leftfirewall=yes
left=<ServerIP>
leftsubnet=0.0.0.0/0
leftauth=pubkey
leftcert=server.crt
leftid=”C=CN, O=Jacky He Ltd., CN=vpn.jackyhe.com”
right=%any
rightsourceip=10.0.8.0/24
rightauth=eap-mschapv2
rightsendcert=never
eap_identity=%any
auto=add
compress=yes

##############################

下一步,配置strongswan.conf

# vi /usr/local/strongswan-5.2.0/etc/strongswan.conf

(在这里,可以定义分配给用户的DNS)

##############################

charon {
dns1=8.8.8.8
dns2=8.8.4.4
ndns1=8.8.8.8
ndns2=8.8.4.4
load_modular = yes
plugins {
include strongswan.d/charon/*.conf
}
}

include strongswan.d/*.conf

##############################

下一步,配置strongswan.d/charon/eap-peap.conf

# vi /usr/local/strongswan-5.2.0/etc/strongswan.d/charon/eap-peap.conf

##############################

eap-peap {
load = yes
phase2_method = mschapv2
}

##############################

最后,配置验证信息

# vi /usr/loca/strongswan/etc/ipsec.secrets

(RSA 后面跟着是服务器段的私钥,这就是我们之前生成的,并放在/usr/local/strongswan-5.2.0/etc/ipsec.d/private下的server.key。)

(第二和第三行是定义VPN客户端的登录用户名和密码,第三行多了个“device name\”原因是我发现如果用windows phone 8.1 登录时,客户端发来的用户名是带有设备的机器名的。)

##############################

: RSA server.key

“username” : EAP “password”

“device name\username” : EAP “password”

##############################

到此,所有配置完成。

你可以通过/usr/local/strongswan-5.2.0/sbin/ipsec start 来启动。

如果你是通过iptables来做Linux防火墙的话,还需要做如下设置:

(下面假设你的服务器的网卡eth0是与Internet连接的那张网卡。其中记得让VPN的IP10.0.8.0/24通过你的eth0网卡,并FORWARD到其他地方。)

##############################

echo “1” > /proc/sys/net/ipv4/ip_forward

iptables -A INPUT -i eth0 -p udp -s $IP -m multiport –dport 500,4500 -j ACCEPT

iptables -A FORWARD -i eth0 -s 10.0.8.0/24 -j ACCEPT

##############################

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Post Navigation