IPSec/IKEv2 ×××搭建和使用 (最下面有一键安装脚本)

 

本次操作系统环境为centos6,其他系统也有介绍

一、编译安装Strongswan

1,安装必须的库

Ubuntu:

1

apt-get install libpam0g-dev libssl-dev make gcc gmp-devel 

 

CentOS:

1

yum install pam-devel openssl-devel  make  gcc  gmp-devel wget -y

2,下载strongswan并解压(*代表当前Strongswan版本号,当前最新版本是5.5.1)

1

2
3

wget http://download.strongswan.org/strongswan.tar.gz

tar xzf strongswan.tar.gz
cd strongswan-*

 

3,编译Strongswan:

XenKVM(实体机、虚拟机)使用以下参数: (若是想自定义路径则加上 --prefix=/data/server/strongswan)

1

2
3
4
5

./configure  --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

 

OpenVZvps云主机)需额外增加一个 enable-kernel-libipsec:

1

2
3
4
5

./configure  --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-kernel-libipsec

4,编译并安装:

1

make && make install

编译完成后如果没有报错,且使用ipsec version指令能出现版本信息,则表示安装成功

1

建立软链接:

ln ipsec /sbin/ipsec

 

二、配置证书

1,生成CA证书的私钥(添加自定义安装路径后,这些命令都在自定义的路径下面)

1

ipsec pki --gen --outform pem > ca.pem

2,自建私钥,签名CA证书

1

ipsec pki --self --in ca.pem --dn "C=com, O=my***, CN=××× CA" \

--ca --outform pem >ca.cert.pem

提示:多个vps使用同个CA根证书(客户端使用一个证书登陆不同***:

如果需要多个vps使用同一个CA根证书,则以上两步只执行一次,之后所有vps都使用上面生成的这两个ca.pemca.cert.pem文件进行后续的操作.
然后把多台vps解析到同一个域名的不同二级域名下.
这样客户端连接各个服务器时,只需要客户端安装一次根证书ca.cert.pemca.cert.cer)即可.

 

3,生成服务器证书所需的私钥:

1

ipsec pki --gen --outform pem > server.pem

4,CA证书签发服务器证书

先确定你的服务器的IP地址或域名,以后客户端连接时只能使用证书中的IP地址或域名连接(多服务器使用相同根证书CA,请先做好服务器的域名解析),

然后将下面命令中的111.111.111.111替换为自己服务器的IP地址或域名,一共需要替换两处:

1

2
3
4

ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem \

--cakey ca.pem --dn "C=com, O=my***, CN=111.111.111.111" \
--san="111.111.111.111" --flag serverAuth --flag ikeIntermediate  \
--outform pem > server.cert.pem

注意以上命令中的”C=””O=”的值要与第2CA中的C,O的值保持一致.

 

5,生成客户端证书所需的私钥:

1

ipsec pki --gen --outform pem > client.pem

6,CA签名客户端证书(ca.cert.pem改成ca.cert.cer后供手机客户端安装使用)(C,O的值要与上面第2CA的值一致,CN的值随意)

1

ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem \

--cakey ca.pem --dn "C=com, O=my***, CN=××× Client"  \

--outform pem > client.cert.pem

7,生成pkcs12证书(供电脑端安装使用,输入的密码供导入证书时候使用):

1

openssl pkcs12 -export -inkey client.pem -in client.cert.pem \

-name "client" -certfile ca.cert.pem -caname "××× CA"  \

-out client.cert.p12

注意以上命令中的”-caname”后面的引号里的值必须要与第2CA中的”CN=”的值保持一致.

8,服务端安装证书:(添加自定义安装路径后,这些都在自定义的路径下面-->/usr/local/改为/data/server/strongswan/

1

2
3
4
5

cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/

cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r server.pem /usr/local/etc/ipsec.d/private/
cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r client.pem  /usr/local/etc/ipsec.d/private/

 

三、配置Strongswan

1,编辑/usr/local/etc/ipsec.conf文件: (注意下面的ios_ikev2配置项 leftid改为当前实际的服务器的IP地址或域名111.111.111.111)

1

vim /usr/local/etc/ipsec.conf

修改为以下内容:

config setup

    uniqueids=never #多台设备同时在线

 

conn iOS_cert

    keyexchange=ikev1

    fragmentation=yes

    left=%defaultroute

    leftauth=pubkey

    leftsubnet=0.0.0.0/0

    leftcert=server.cert.pem

    right=%any

    rightauth=pubkey

    rightauth2=xauth

    rightsourceip=10.31.2.0/24

    rightcert=client.cert.pem

    auto=add

 

conn android_xauth_psk

    keyexchange=ikev1

    left=%defaultroute

    leftauth=psk

    leftsubnet=0.0.0.0/0

    right=%any

    rightauth=psk

    rightauth2=xauth

    rightsourceip=10.31.2.0/24

    auto=add

 

conn networkmanager-strongswan

    keyexchange=ikev2

    left=%defaultroute

    leftauth=pubkey

    leftsubnet=0.0.0.0/0

    leftcert=server.cert.pem

    right=%any

    rightauth=pubkey

    rightsourceip=10.31.2.0/24

    rightcert=client.cert.pem

    auto=add

 

conn ios_ikev2

    keyexchange=ikev2

    ike=aes256-sha256-modp2048,3des-sha1-modp2048,aes256-sha1-modp2048!

    esp=aes256-sha256,3des-sha1,aes256-sha1!

    rekey=no

    left=%defaultroute

    leftid="服务器的IP地址或域名"

    leftsendcert=always

    leftsubnet=0.0.0.0/0

    leftcert=server.cert.pem

    right=%any

    rightauth=eap-mschapv2

    rightsourceip=10.31.2.0/24

    rightsendcert=never

    eap_identity=%any

    dpdaction=clear

    fragmentation=yes

    auto=add

 

conn windows7

    keyexchange=ikev2

    ike=aes256-sha1-modp1024!

    rekey=no

    left=%defaultroute

    leftauth=pubkey

    leftsubnet=0.0.0.0/0

    leftcert=server.cert.pem

    right=%any

    rightauth=eap-mschapv2

    rightsourceip=10.31.2.0/24

    rightsendcert=never

    eap_identity=%any

    auto=add

 

2,使用vim编辑/usr/local/etc/strongswan.conf文件:

charon {

load_modular = yes

duplicheck.enable = no

compress = yes

plugins {

                include strongswan.d/charon/*.conf

}

dns1 = 8.8.8.8

dns2 = 8.8.4.4

nbns1 = 8.8.8.8

nbns2 = 8.8.4.4

#下面是配置日志选项,可不要

filelog {

    /tmp/charon.log {

        # add a timestamp prefix

        time_format = %b %e %T

        # prepend connection name, simplifies grepping

        ike_name = yes

        # overwrite existing files

        append = no

        # increase default loglevel for all daemon subsystems

        default = 1

        # flush each line to disk

        flush_line = yes

    }

}

}

include strongswan.d/*.conf

 

3,配置帐号文件添加账号,使用vim编辑/usr/local/etc/ipsec.secrets文件(%any表示任意:

: RSA server.pem

: PSK "1234"

: XAUTH "myXAUTHPass"

myUserName %any : EAP "myUserPass"

zhanghao %any : EAP "mima"

将上面的myPSKkey单词更改为你需要的PSK认证方式的密钥;

将上面的myXAUTHPass单词更改为你需要的XAUTH认证方式的密码,该认证方式的用户名是随意的;
将上面的zhanghao改为自己想要的登录名,mima改为自己想要的密码,可以添加多行,得到多个用户,这即是使用IKEv2的用户名+密码认证方式的登录凭据.

(添加完用户后可以使用ipsec reload重新加载配置)

 

提示:wp8.1客户端连接的用户名问题

由于wp8.1连接IKEv2***,默认会加上与手机名称相同的域,于是连接时会显示用户名或密码错误.这里有两种解决方法:
方法1:将上面/usr/local/etc/ipsec.secrets文件的最后一行改为%any %any : EAP “mima” ,这样就可以使用任意用户名登录,带上域也不会出错.
方法2:FreeRADIUS过滤掉登录名的域,搜索参考:

 

四、配置防火墙---需要打开udp 4500 500 1701端口

1,编辑/etc/sysctl.conf,将net.ipv4.ip_forward=1一行前面的#号去掉或添加这一行(否则Ikev2 ***连接上后将无法访问外网),保存后执行sysctl -p(如果执行后有报错的,重新打开sysctl.conf将报错的部分#注释掉保存,直到执行sysctl -p不再报错为止)

spacer.gif

2,配置iptables:(注意网卡名)

OpenVZvps云主机)执行:

1

2
3
4
5
6
7
8
9
10
11
12
13
14

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -s 10.31.0.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.1.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.2.0/24  -j ACCEPT
iptables -A INPUT -i venet0 -p esp -j ACCEPT
iptables -A INPUT -i venet0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i venet0 -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i venet0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i venet0 -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i venet0 -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o venet0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o venet0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o venet0 -j MASQUERADE

PS:如果VPS static IP (固定ip,将上述防火墙规则的最后3NAT规则替换为以下3条来提升处理效率:

1

2
3

iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o venet0 -j SNAT --to-source固定ip

iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o venet0 -j SNAT --to-source固定ip
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o venet0 -j SNAT --to-source固定ip

注意将上述3条规则的ELASTIC_IP替换为vps的静态ip地址.

 

XenKVM(实体机、虚拟主机)则执行:

1

2
3
4
5
6
7
8
9
10
11
12
13
14

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -s 10.31.0.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.1.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.2.0/24  -j ACCEPT
iptables -A INPUT -i eth0 -p esp -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE

 

3,开机自动载入iptables***:

Ubuntu:

1

2
3
4
5
6

iptables-save > /etc/iptables.rules

cat > /etc/network/if-up.d/iptables<<EOF
#!/bin/sh
iptables-restore < /etc/iptables.rules
EOF
chmod +x /etc/network/if-up.d/iptables

CentOS:

1

2

3

service iptables save

chkconfig iptables on

echo "/usr/local/sbin/ipsec start" >> /etc/rc.local

 

至此,IPSec/IKEv2 ×××便搭建好了,启用服务就可以使用:

1

ipsec start

 

ipsec常用指令:

ipsec start   #启动服务

ipsec stop    #关闭服务

ipsec restart  重启服务

ipsec reload  #重新读取

ipsec status  #查看状态

ipsec --help  #查看帮助

 

4,搭建httpd便于客户端下载证书

安装apache

yum install httpd –y

 

配置apache登录用户:

htpasswd -c -b /etc/httpd/htpasdb  zhanghao mima

 

apache配置文件/etc/httpd/conf/httpd.conf最后追加:

<directory />

options indexes

AuthType Basic

AuthName "!!!"

AuthBasicProvider file

AuthUserFile /etc/httpd/htpasdb

Require user zhanghao

</directory>

 

拷贝客户端证书:

mkdir /var/www/html/key

cp -p ca.cert.pem  /var/www/html/key/

cp -p client.cert.p12  /var/www/html/key/

重启服务,service httpd restart

然后就可以在客户端访问: 下载证书。

                          使用教程

Iphone

1.打开Safari访问下载安装证书:

spacer.gif

2.安装:

spacer.gif

 

3.配置***

打开设置-通用-×××,点击添加×××配置

然后:

描述填随意、服务器填搭建的***服务器ip、远程ip填搭建的***服务器ip、鉴定里用户鉴定选择用户名、填上/usr/local/etc/ipsec.secrets下面的zhanghao mima

spacer.gif

完成后就可以连接了。

 

 

Android

1.安装证书,点击下载证书:

 

2.       配置***,打开设置-更多-×××,点击添加,注意类型选择IPsec Xauth PSK

 

名称自取,服务器地址填***ipIPsec标识符不填,IPSec域共享密钥填写/usr/local/etc/ipsec.secrets配置文件里的PSK值,其他的不填

spacer.gif

  

保存后,点击连接时输入/usr/local/etc/ipsec.secrets 最下方配置的zhanghao mima

 

 

Windows

1.下载安装证书:

点击下载 (下载ca.cert.cer也可以并且不用输入证书密码)

 

  1. 2.导入证书:

打开运行,输入mmc打开

 

点击文件,选择“添加/删除管理单元”,选择证书,添加,选择“计算机用户”,下一步,确定;

 

打开证书-受信任的根证书颁发机构-证书,邮件证书,选择所有任务-导入,选择下载的证书client.cert.p12,输入证书密码。

 

  1. 3.建立连接

打开“网络和共享中心”,点击设置新的连接或网络,选择连接到工作区,创建新的连接,使用我的Internet连接(×××),输入***服务器ip,创建:

 

4.连接:

打开“网络和共享中心”,点击更改适配器设置,右键刚建立的***连接,打开属性,打开安全,选择IKEv2,身份验证选择可扩展。。,点击确定保存,右键***连接选择连接便可以连上***了。

spacer.gif

 

MAC

1.       下载安装证书,同上面几个客户端一样下载安装证书(双击证书,选择装到系统)

注意:添加完证书后,需要打开密钥管理将刚才添加的证书加到信任:

双击打开,改为始终信任:

 

2.创建***网络:

打开网络偏好设置

添加网络,选择IKEv2

服务器地址填***服务器地址,账户名称和密码填写/usr/local/etc/ipsec.secrets 下方加的zhanghao mima

 

或者添加网络,选择cisco IPSec

 

服务器地址填***服务器地址,账户名称和密码填写/usr/local/etc/ipsec.secrets 下方加的zhanghao mima,打开鉴定设置共享密钥填写PSK。其他不填:

这样就可以连接了。

 

                     一键安装脚本:

1. 上传脚本和安装包到服务器同目录

2. 修改权限,运行脚本:

chmod +x one-key-ikev2.sh

bash one-key-ikev2.sh

3.根据图片内容选择:

spacer.gif

注意:

1./etc/issue文件内容要正确脚本是通过此文件判断linux版本

spacer.gif

2.若是服务器在国外,可以不用上传安装包到服务器,打开脚本219-223行(由于国内网络差所以提前下载好安装包上传至服务器)

3.最后的证书在my_key目录下

 

strongswan安装包和一键安装脚本下载链接:

文章参考:

https://zh.opensuse.org/SDB:Setup_Ipsec_×××_with_Strongswan

https://github.com/quericy/one-key-ikev2-***