Ipsec VPN-centos7使用strangwang搭建vpn

本教学介绍了如何使用 Strongswan 5.x.x 在 centos7+ 服务器上架设支持 ikev1/ikev2 的 Ipsec VPN。适用于 openSUSE、iOS、Android、Windows 和其它 Linux。

简介:

什么是 IPsec?

IPsec 是 虚拟私密网络(VPN) 的一种,用于在服务器和客户端之间建立加密隧道并传输敏感数据之用。它由两个阶段组成,第一阶段(Phrase 1, ph1),交换金钥建立连接,使用互联网金钥交换(ike)协议; 第二阶段(Phrase 2, ph2),连接建立后对数据进行加密传输,使用封装安全载荷(esp)协议。参考:维基百科 IPsec 词条

其中,第一阶段和第二阶段可以使用不同的加密方法(cipher suites)。甚至,第一阶段 ike 协议的第一版(ikev1)有两种模式,主力模式(main mode)和积极模式(aggressive mode),主力模式进行六次加密握手,而积极模式并不加密,以实现快速建立连接的目的。

第一阶段的 ike 协议有两个版本(ikev1/ikev2),不同的开源/闭源软件实现的版本均不同,不同的设备实现的版本也不同。再联系到第一阶段/第二阶段使用的各种不同加密方法,使得 IPsec 的配置有点黑魔法的性质,要么完全懂,通吃; 要么完全不懂,照抄

本文以公司内网192.168.0.0/21和腾讯vpc内网10.125.0.0/16做ike vpn,互联网络通信

网络图示:

介绍:

系统:centos 7

软件:strongswan 5.7

补充说明

StrongSwan 的发行版已包含在 EPEL 源中, 但是CentOS源的包比较旧,所以我们手动在官网https://www.strongswan.org/download.html下载安装包

strongSwan的发行版已包含在EPEL源中, 但源中的包版本5.3.2比较低,目前官网上5.4.0已经发布了。

安装EPEL源:
yum -y install epel-release

查看SELinux状态

[root@slhk ~]# sestatus
  SELinux status: disabled

如果SELinux没有被禁用,需禁用之,并重启服务器

查看防火墙状态

systemctl status firewalld

一、安装

使用epel仓库里面的yum安装

# yum install strongswan

yum安装说明:

官方安装说明:https://centos.pkgs.org/7/epel-x86_64/strongswan-5.7.1-1.el7.x86_64.rpm.html

centos6 安装5.4版本说明 https://centos.pkgs.org/6/epel-x86_64/strongswan-5.4.0-2.el6.x86_64.rpm.html

二进制安装说明:

官方安装说明:https://wiki.strongswan.org/projects/strongswan/wiki/InstallationDocumentation

官方页面: https://www.strongswan.org/download.html

二、配置strongswan

strongSwan包含3个配置文件,在目录/etc/strongswan/下。 strongswan.conf strongSwan各组件的通用配置 ipsec.conf IPsec相关的配置,定义IKE版本、验证方式、加密方式、连接属性等等 ipsec.secrets 定义各类密钥,例如:私钥、预共享密钥、用户账户和密码

1.公司内网192.168.1.228上配置说明

vim /etc/strongswan/ipsec.conf

config setup
       uniqueids=never
     #  charondebug="ike 4, knl 4, net 4, cfg 4"
conn %default
     authby=psk
     type=tunnel
     #compress = yes
     #keyexchange=ike
     #ike=aes256-sha256-sha1-modp2048-modp1024,3des-sha256-sha1-modp2048-modp1024!
     #esp=aes256-sha256-sha1,3des-sha256-sha1!
conn marketing1
     keyexchange=ikev2
     left=192.168.1.228
     leftid=218.17.157.34
     leftsubnet=192.168.0.0/21
     right=129.204.65.204
     rightid=129.204.65.204
     rightsubnet=10.125.0.0/16
     auto=route
     ike=aes-sha1-modp1024
     ikelifetime=86400s
     esp=aes-sha1-modp1024
     lifetime=86400s
     type=tunnel

其中 config setup 只能出现一次,而 conn <连接名称> 可以有很多个。这里的名称不是预定义的,可以随意写,只要你能识别就行,主要用来定义一种连接,就是为了让你在日志里好找。

新版 strongswan 里 config setup 的内容不如旧版的多,许多旧版必须有的选项都被作废了。比如:

  • plutostart 新版所有的 ike 协议都由原来 ikev2 的 daemon:charon 接管。根本就没有 pluto 了。

  • nat_traversal 新版所有的 ike 协议都是可以穿越路由器(NAT)的。

  • virtual_private 定义服务器的局域网 IP 地址。现在被魔术字 0.0.0.0/0 取代了。

  • pfs 完美向前保密,用于 rekey 时。意思是你现在的金钥互换过程如果被攻破了,会不会对已经互换过的金钥产生影响。以前一般设置成 no 来适用于 iOS 这种客户端会以积极模式发出非加密的 rekey 请求的情况。现在这个选项完全没作用了。第一阶段永远是完美向前保密的,第二阶段(esp)如果指定了 DH 组那么也是完美向前保密的,但是默认加密方法就已经指定了 DH 组。所以该选项永远为 yes。

更多说明查考 https://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan&variant=zh

密码文件ipsec.secrets文件默认不存在,需要自己生成。 vi /etc/strongswan/ipsec.secrets

# ipsec.secrets - strongSwan IPsec secrets file
218.17.157.34 10.125.0.19 : PSK 68p63kt6
192.168.1.228 10.125.0.19 : PSK 68p63kt6

CentOS配置转发

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

sysctl -p 

CentOS配置iptables防火墙,允许UDP500,UDP4500,并配置转发和NAT规则

若是开启访问,请参考配置 Iptables 转发

参考:配置 Iptables 转发

iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.0.0/21 -o eth0 -j MASQUERADE  #地址与上面地址池对应
iptables -A FORWARD -s 192.168.0.0/21 -j ACCEPT     #同上
#为避免VPS重启后NAT功能失效,可以把如上5行命令添加到 /etc/rc.local 文件中,添加在exit那一行之前即可。

公司内网设置路由

把去往10.125.0.0/16段路由代理到192.168.1.228

启动

systemctl enable strongswan.service
systemctl start strongswan.service

2.公司内网10.125.0.19上配置说明

vim /etc/strongswan/ipsec.conf

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration
# Add connections here.

# Sample VPN connections

config setup
       uniqueids = never
       charondebug="cfg 2, dmn 2, ike 2, net 2"
conn %default
     authby=psk
     type=tunnel
conn marketing
    keyexchange=ikev2
    left=10.125.0.19
    leftid=129.204.65.204
    leftsubnet=10.125.0.0/16
    right=218.17.157.34
    rightid=218.17.157.34
    rightsubnet=192.168.0.0/21
    ike=aes-sha1-modp1024
    auto=route
    ikelifetime=86400s
    esp=aes-sha1-modp1024
    lifetime=86400s
    type=tunnel

密码文件ipsec.secrets文件默认不存在,需要自己生成。

vi /etc/strongswan/ipsec.secrets

# ipsec.secrets - strongSwan IPsec secrets file
10.125.0.19 218.17.157.34 : PSK 68p63kt6
129.204.65.204 218.17.157.34 : PSK 68p63kt6

CentOS配置转发

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

sysctl -p 

CentOS配置iptables防火墙,允许UDP500,UDP4500,并配置转发和NAT规则

参考,公司可通腾讯云,但腾讯云却不能通公司就是缺失nat转发

iptables -t nat -A POSTROUTING -j MASQUERADE
# 停用firewalld,启用iptables
systemctl stop firewalld
systemctl disable firewalld
yum install -y iptables-services iptables-devel
systemctl enable iptables
systemctl start iptables
systemctl status iptables

# 启用转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# 添加nat
iptables -t nat -A POSTROUTING -j MASQUERADE

# 设置允许转发。默认是拒绝所有转发,-I 插入一下规则
iptables -I FORWARD -s 192.168.0.0/16 -j ACCEPT
iptables -I FORWARD -d 192.168.0.0/16 -j ACCEPT
service iptables save

腾讯内网安全组放开4500和500

启动

systemctl enable strongswan.service
systemctl start strongswan.service

三、检查

自此vpn配置完毕,可以互ping进行检查

排查故障

tcpdump -i enp2s0 -nNX -s0 port 4500 or 500 查看有没有发包进行连接

查考文档

扩展GRE VPN: https://blog.csdn.net/zhydream77/article/details/81051429

https://gist.github.com/losisli/11081793

https://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan&variant=zh

https://zh.opensuse.org/index.php?title=SDB:Setup_Ipsec_VPN_with_Strongswan&variant=zh

Last updated