安装 openswan 及其环境
一、 openswan 介绍
OpenSWan是linux选Ipsec及I2tp协议的一个不错的实现方案。他支持和ipsec相关的大多数的扩展(RFC+IETF drafts)。Openswan项目起源于FreeS/WAN 2.04项目,该项目的功能很强大,可以很大程度上保证数据在跨网传输中的安全性、完整性,特别是通过它,可以很好地实现跨机房或异地办公场所实现局域网互联解决方案,如果和openvpn工具配合,可以实现将注入门户网站的多机房互访及vpn的各种强大解决方案.
能实现 IPsec 的目前总体上有 openswan,libreswan,strongswan 这3种。 libreswan 是基于 openswan 的 fork,所以现在各个发行版基本已经看不到 openswan 的身影了。 当然也有使用 strongswan 的。
二、环境
实现目标:外网服务器和公司网络打通,实现内网互通:
环境:
外部服务器: (外网)106.75.20.16 (内) 10.10.68.61 (VPN)
测试 10.10.68.62
公司: (外网) 58.22.123.82(内)192.168.99.168 (VPN)
测试 192.168.99.169
架构图

三、安装 openswan 及其环境(两台都要装)
3.1 软件安装
centos7:1
2
3
yum -y install ppp libreswan xl2tpd firewalld lsof
yum install -y openswan
centos6:1
2
3
4
5
6
7
8
yum -y remove libevent-devel
yum -y install libevent2-devel
yum -y install nss-devel nspr-devel pkgconfig pam-devel \
libcap-ng-devel libselinux-devel lsof \
curl-devel flex bison gcc ppp make iptables gmp-devel \
fipscheck-devel unbound-devel xmlto libpcap-devel xl2tpd
yum install -y openswan
Ubuntu:1
2apt-get update
apt-get install -y openswan lsof
(ubuntu 会交互安装,第一个询问启用 X.509 证书的时候选择 no,第二个只要点 ok 就可以。)
3.2、开启 linux 主机的路由功能(所有为ipsec vpn server 的主机都要开启)
1 | # vim /etc/sysctl.conf |
修改完成后执行 sysctl -p 加载配置。
3.3 检测服务正常(所有为 ipsec vpn server 的主机)
1 | # service ipsec start |
3.4、在控制台上的防火墙添加 ipsec vpn 所用的端口
两边开启UDP 端口500,4500
3.4 测试udp端口
1 | nc -vuz 58.22.123.82 500 |
3.5 VPN自动启动
1 | chkconfig ipsec on |
将/etc/ipsec.conf 文件中的 auto=add 改为 auto=start
四、验证环境
ipsec verify (一个 N/A 和一个 DISABLED 不影响 ipsec vpn 的建立,Ubuntu 主机可能在checking /bin/sh 会多一个 warning,也不影响。)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# ipsec verify
Verifying installed system and configuration files
Version check and ipsec on-path [OK]
Libreswan 3.15 (netkey) on 2.6.32-431.1.2.0.1.el6.x86_64
Checking for IPsec support in kernel [OK]
NETKEY: Testing XFRM related proc values
ICMP default/send_redirects [OK]
ICMP default/accept_redirects [OK]
XFRM larval drop [OK]
Pluto ipsec.conf syntax [OK]
Hardware random device [N/A]
Two or more interfaces found, checking IP forwarding [OK]
Checking rp_filter [OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for IKE/NAT-T on udp 4500 [OK]
Pluto ipsec.secret syntax [OK]
Checking 'ip' command [OK]
Checking 'iptables' command [OK]
Checking 'prelink' command does not interfere with FIPSChecking for obsolete ipsec.conf options [OK]
Opportunistic Encryption [DISABLED]
五、配置服务
5.1 配置认证 key(所有为 ipsec vpn server 的主机)
1 | # vim /etc/ipsec.secrets |
5.3 配置ipsec.conf
1 | # cat /etc/ipsec.conf |
5.2 配置VPN主体
公司服务器:192.168.99.168
1 | # cat /etc/ipsec.d/campany.conf |
外部服务器:106.75.20.16
1 | # cat /etc/ipsec.d/outside.conf |
第一阶段选择 ikev1 主模式(main mode),参数为 3des、sha、group2。
第二阶段选择模式为 tunnel,参数为 esp、3des、sha。
启用 pfs 和 nat-t(nat 穿越)。
六、测试完成与错误定位
6.1 测试
1 | ipsec auto --up BY-to-UC |
这个状态即为启动成功,两端可互相 ping 通。1
IPsec SA established tunnel mode
排查错误常用命令1
2
3
4ipsec auto --status //状态
tail -f /var/log/ipsec.log //ipsec日志
tail -f /var/log/secure //安全日志
tail -f /var/log/messages //系统日志
6.2 其他主机路由
其他云主机如果要通过 ipsec 访问对端要增加相应的路由,或者网关指向本地的 ipsec服务器。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16在10.10.68.62 (外部测试)上,执行:
# route add -net 192.168.0.0/24 gw 10.10.68.61 dev eth0
在10.10.68.61 (外部VPN)上,执行:
# route add -net 192.168.0.0/24 gw 10.10.68.61 dev eth0
在192.168.99.168 (公司VPN)上执行 :
# route add -net 10.10.0.0/16 gw 192.168.99.168 dev eth0
在192.168.99.169(公司测试)上执行:
或者 公司可以在三层交换机上添加以下路由,就所有的公司内网服务器都可以到外网服务器内网,不需要每台都加
# route add -net 10.10.0.0/16 gw 192.168.99.168 dev eth0
6.3 故障排查
1)、发生no connection named “xxxxx”的报错时基本为配置文件错误或者conn名字错误,检查conn名称、配置文件格式,并查看/var/log/messages中具体错误参数/格式提示。
1 | initiating all conns with alias="net-to-net" |
2)、发生第一阶段(STATEMAINI1)或者第二阶段(STATEQUICKI1)初始化超时报错的时候,多为两端参数配置错误导致的协商失败,需要查看/var/log/secure以及对端的日志确定具体哪个参数协商错误。
1 | 010 "sample" #2: STATE_QUICK_I1: retransmission; will wait 20s for response |
6.4 测试
相互ping