给ios10在ubuntu 14.04上配置IPSec服务器

写在前面的闲话

后面有篇文章,为 iOS 在 CentOS6.x 上搭建 IPSec(PSK+XAuth) VPN 服务器,说的是一样的事情,只不过平台是 CentOS 6.x。

有朋友看了本文后问,这种文章百度上不多的是吗,干嘛还要写?然后我就想这个问题也许还真有代表性,于是就把文章修改下,统一回答:

  1. 网上的方案多是ipsec+l2tp或者是ipsec+xl2tp的,我觉得不需要那么复杂,有ipsec加密数据流就OK了,所以我这方案应该是满足需求的最简方案
  2. 我写东西,多半是为了心理安慰。而且这也不算是完全原创,准确讲应该是实验报告,参照的是最后参考里列出的国外的那篇文档

缘起(Why)

需求还是来自于科学上网,iPhone设备的科学上网。话说自打最新的iOS中

  1. 不再支持pptp方式的vpn了
  2. 没有全局性的ss(Shadowsocks)可用
  3. OpenVPN的客户端软件市场中都看不见(Tunnelblicck是没找到)

所以,为了iPhone的科学上网,我们只有自力更生,搭建新的服务器系统。这里,我选用的是IPsec服务器。

具体步骤(Howto)

环境准备

环境是一台ubuntu 14.04的机器(代号:Trusty Tahr)。

安装软件

首先,我们需要安装必需软件:

1
2
apt-get install strongswan \
strongswan-plugin-xauth-generic;

参数调整

1
2
3
4
sysctl -w net.ipv4.ip_forward=1;
echo \
"sysctl -w net.ipv4.ip_forward=1" \
>> /etc/rc.local;

iptables

1
2
3
4
5
6
7
8
9
10
11
12
/sbin/iptables -t nat \
-A POSTROUTING \
-s 10.0.0.0/8 \
-o eth0 \
-j MASQUERADE;
echo \
"/sbin/iptables -t nat \
-A POSTROUTING \
-s 10.0.0.0/8 \
-o eth0 \
-j MASQUERADE" \
>> /etc/rc.local;

修改配置

ipsec.secrets

1
2
3
4
5
6
7
cat <<EOF >/etc/ipsec.secrets
: PSK sharekeystring

user1 : XAUTH "password for user1"
user2 : XAUTH "password for user2"
EOF

注意:

  • user1和user2分别是用户名,相应后面的passw…….是密码
  • sharekeystring是共享秘钥,客户端连过来时也会用

ipsec.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cat <<EOF >/etc/ipsec.conf
config setup
charondebug="ike 4, knl 4, cfg 4, net 4, esp 4, dmn 4, mgr 4"
cachecrls=yes
uniqueids=yes

conn ios
keyexchange=ikev1
authby=xauthpsk
xauth=server
left=%defaultroute
leftsubnet=0.0.0.0/0
leftfirewall=yes
right=%any
rightsubnet=10.0.0.0/24
rightsourceip=10.0.0.1/24
rightdns=8.8.8.8
auto=add
EOF

这里解释下参数charondebug,上面的例子都是4是为了调试排错的需要的,当你的服务正常以后,请将这个参数值改小。

启动服务

1
2
3
4
# (手工)启动服务
service strongswan start;
# 将服务设置为自启动
update-rc.d strongswan enable;

排错及维护

  • log文件是*/var/log/strongswan.charon.log*
1
2
3
ipsec status;
ipsec statusall;
# 以上两个命令可以用来看状态

ios客户端配置

在iphone上,点击设置–>VPN–>**添加 VPN 配置…**,然后:

  • 类型:IPSec
  • 描述:随便填
  • 服务器:填部署IPSec服务的ip地址或域名
  • 账户:上面的例子中是user1user2
  • 密码:上面的文件里有
  • 使用证书:不使用证书
  • 秘钥:上面配置文件里有

参考