本配置为2个linux 的通过IKE 协议连接

环境如下:

客户端(Centos7) -- 服务器端(Centos7)首先假定服务器端的IP地址为:1.2.3.4

一、服务器端安装与配置

1、安装准备

yum install epel-release
yum install openssl-devel

2、安装strongswan

yum install strongswan
service strongswan start

注意:服务器端不能安装 strongswan-libipsec 否则客户端连接不上

3、配置证书

vi /root/zhengshu.sh

strongswan pki --gen --outform pem > ca.key.pem
strongswan pki --self --in ca.key.pem --dn "C=CN, O=ITnmg, CN=strongSwan CA" --ca --lifetime 3650 --outform pem > ca.cert.pem
strongswan pki --gen --outform pem > server.key.pem
strongswan pki --pub --in server.key.pem --outform pem > server.pub.pem
strongswan pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in server.pub.pem --dn "C=CN, O=huayu, CN=1.2.3.4" --san="1.2.3.4" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
strongswan pki --gen --outform pem > client.key.pem
strongswan pki --pub --in client.key.pem --outform pem > client.pub.pem
strongswan pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in client.pub.pem --dn "C=CN, O=huayu, CN=1.2.3.4" --outform pem > client.cert.pem
openssl pkcs12 -export -inkey client.key.pem -in client.cert.pem -name "strongSwan Client Cert" -certfile ca.cert.pem -caname "strongSwan CA" -out client.cert.p12
cp -r ca.key.pem /etc/strongswan/ipsec.d/private/
cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/
cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/
cp -r server.key.pem /etc/strongswan/ipsec.d/private/
cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/
cp -r client.key.pem /etc/strongswan/ipsec.d/private/
echo "ok"
chmod +x /root/zhengshu.sh

/root/zhengshu.sh

提示输入密码时直接回车

 

4、编辑strongswan配置文件

vi /etc/strongswan/ipsec.conf

内容如下

config setup
    uniqueids=never              #允许多个客户端使用同一个证书
#供linux客户端
conn ipke2vpn
    keyexchange=ikev2
    ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=aes256-sha256,aes256-sha1,3des-sha1!
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%defaultroute
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    leftid="2.2.2.2"
    right=%any
    rightsourceip=10.0.0.0/24
    authby=secret
    rightsendcert=never
    eap_identity=%any
    auto=add

修改共享密钥

vi /etc/strongswan/ipsec.secrets

增加如下内容:

www.beijinghuayu.com.cn : PSK fastvpn123

 

二、linux 客户端安装与配置

1、安装准备

yum install epel-release
yum install openssl-devel
yum install strongswan-libipsec

2、安装strongswan

yum install strongswan
service strongswan start

3、将 VPN 服务器端生成的 CA 证书 ca.cert.pem 复制到客户端的/etc/pki/ca-trust/source/anchors,然后在客户端运行

/bin/update-ca-trust

4、将客户端的 /etc/strongswan/ipsec.secrets 文件内容与 服务器端对应的文件内容配置一致.

vi /etc/strongswan/ipsec.secrets

内容如下:

www.beijinghuayu.com.cn : PSK fastvpn123

5、修改客户端strongswan配置文件

vi /etc/strongswan/ipsec.conf

config setup
    uniqueids=never
conn centos
  keyexchange=ikev2
  ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
  esp=aes256-sha256,aes256-sha1,3des-sha1!
  left=%any
  leftid=zhuchunmao  #id任意
  leftsourceip=%any
  authby=secret
  right=2.2.2.2
  rightid=2.2.2.2
  rightsubnet=0.0.0.0/0    #访问服务器的哪个网络
  type=tunnel
  auto=add

6、连接服务器端VPN

服务器端:

service strongswan start

客户端:

strongswan start
strongswan up centos

7、验证连接状态

在客户端使用ifconfig 命令查看

[root@KvmServer ~]# ifconfig ipsec0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1400 inet 10.0.0.1 netmask 255.255.255.255 destination 10.0.0.1 inet6 fe80::9294:d172:36e2:d7d4 prefixlen 64 scopeid 0x20<link> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) RX packets 4808 bytes 6188956 (5.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4822 bytes 349627 (341.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@KvmServer ~]# strongswan status
Security Associations (1 up, 0 connecting):
      centos[2]: ESTABLISHED 16 minutes ago, 192.168.0.20[jack]...1.2.3.4[1.2.3.4]
      centos{2}:  INSTALLED, TUNNEL, reqid 2, ESP in UDP SPIs: e2e1dc71_i c2dc4e7e_o
      centos{2}:   10.0.0.1/32 === 0.0.0.0/0

6、连接vpn后无法访问局域网

Linux 连接 ikev2 VPN Server 后, 会无法访问本地局域网内其他机器, 因为 ikev2 VPN 自动添加的路由表 (table id 和优先级都是 220.) 比系统默认路由表优先级高.

[root@iZ25w2u145vZ ~]# ip route show table 220
1.2.3.4 via 客户端网关地址 dev eth1  proto static  src 客户端ip地址 
default dev ipsec0  proto static  src 10.0.0.1

解决方法

ip rule add from 192.168.0.0/24 table main prio 1
ip rule add from 100.101.100.0/24 table main prio 1

其中192.168.0.0/24与 100.101.100.0/24 为Linux VPN客户端物理接口地址的路由网段,可以通过

ip route命令来查看

 

7、客户端共享VPN给其它用户

sysctl -w net.ipv4.ip_forward=1
# 10.0.0.1 是客户端从服务器分配到的虚拟VPN地址
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.0.0.1

则其它机器将 Gateway 设为 VPN 客户端的地址 即可自动通过 VPN 访问 Internet.

 

8、如果VPN作为中转,可以通过下面命令

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ipsec0 -j MASQUERADE

注意事项:如果VPN断开后,需要先将这条nat删除,否则将出现无法连接诶

 

参考文献

https://oogami.name/1467/

https://wiki.strongswan.org/projects/strongswan/wiki/IKEv2ClientConfig