172173.com

安装 openswan 及其环境

一、openswan 介绍

  • OpenSWan是linux选Ipsec及I2tp协议的一个不错的实现方案。他支持和ipsec相关的大多数的扩展(RFC+IETF drafts)。Openswan项目起源于FreeS/WAN 2.04项目,该项目的功能很强大,可以很大程度上保证数据在跨网传输中的安全性、完整性,特别是通过它,可以很好地实现跨机房或异地办公场所实现局域网互联解决方案,如果和openvpn工具配合,可以实现将注入门户网站的多机房互访及vpn的各种强大解决方案.
  • ucloud和公司网络打通,实现内网互通:
    环境:
    服务器:(外) 106.75.x.x (内) 10.10.68.61
    公司:(外) 58.22.x.x(内)192.168.99.168

二、安装 openswan 及其环境(两台都要装)

2.1 软件安装

Centos:

1
2
yum install -y gmp gmp-devel gawk flex bison iproute2 iptables sed awk cut python xmlto lsof
yum install -y openswan

Ubuntu:

1
2
apt-get update
apt-get install -y openswan lsof

(ubuntu 会交互安装,第一个询问启用 X.509 证书的时候选择 no,第二个只要点 ok 就可以。)

2.2、开启 linux 主机的路由功能(所有为ipsec vpn server 的主机都要开启)

vim /etc/sysctl.conf

1
2
3

## Controls IP packet forwarding
net.ipv4.ip_forward = 1

(开启主机路由转发)

1
2
##Controls source route verification
net.ipv4.conf.default.rp_filter = 0

(关闭源路由验证)
修改 /etc/sysctl.conf文件,加入以下内容:

1
2
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0

修改完成后执行 sysctl -p 加载配置。

2.3、在控制台上的防火墙添加 ipsec vpn 所用的端口

1
2
云服务商(阿里 腾讯 金山)开放端口 UDP 500 4500
两边服务器有限制,iptab 也要开放

2.4 测试udp端口

1
nc -vuz 58.22.x.x 500

Connection to 58.22.x.x 500 port [udp/isakmp] succeeded!

2.5 验证环境

1
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
Verifying installed system and configuration files

Version check and ipsec on-path [OK]
Libreswan 3.15 (netkey) on 2.6.32-754.9.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]

三、配置服务

3.1 检测服务正常(所有为 ipsec vpn server 的主机)

1
2
3
4
5
service ipsec start
Starting pluto IKE daemon for IPsec: [ OK ]
service ipsec status
pluto (pid 1397) is running...
IPsec connections: loaded 3, active 1

3.2 配置认证 key(所有为 ipsec vpn server 的主机)

vim /etc/ipsec.secrets

1
2
3
4
5
#include /etc/ipsec.d/*.secrets

#源IP 目标IP: PSK "(key)" (0.0.0.0 即为所有 vpn 都使用这个 key)

0.0.0.0 0.0.0.0 : PSK "boyihuyu.com" (注意空格格式不能错)

3.3 配置VPN主体

3.3.1 跨外网云主机间(云主机和其他公司内网 linux 主机)互通

192.168.99.168:
cat /etc/ipsec.d/boyihuyu.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
conn BY-to-UC
ike=3des-sha1
authby=secret
phase2=esp
phase2alg=3des-sha1
compress=no
type=tunnel
pfs=yes

leftid=106.75.x.x
left=106.75.x.x
leftsubnet=10.10.0.0/16
leftnexthop=%defaultroute

rightid=58.22.x.x
right=192.168.99.168
rightsubnet=192.168.0.0/16
rightnexthop=%defaultroute
auto=start

106.75.x.x:
cat /etc/ipsec.d/ucloud.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
conn UC-to-BY
ike=3des-sha1
authby=secret
phase2=esp
phase2alg=3des-sha1
compress=no
type=tunnel
pfs=yes

leftid=106.75.x.x
left=10.10.68.61
leftsubnet=10.10.0.0/16
leftnexthop=%defaultroute

rightid=58.22.x.x.
right=58.22.x.x
rightsubnet=192.168.0.0/16
rightnexthop=%defaultroute
auto=add

对端网络设备(B)配置参数:
Peer 的 ip 为云主机的外网 ip 即 A.A.A.A
第一阶段选择 ikev1 主模式(main mode),参数为 3des、sha、group2。
第二阶段选择模式为 tunnel,参数为 esp、3des、sha。
启用 pfs 和 nat-t(nat 穿越)。
感兴趣流为 b.b.0.0/16 到 a.a.0.0/16,即用户端网段到云主机网段。

四、测试完成与错误定位

4.1 测试

1
2
3
4
5
ipsec auto --up BY-to-UC
002 "BY-to-UC" #371: initiating Quick Mode PSK+ENCRYPT+TUNNEL+PFS+UP+IKEV1_ALLOW+IKEV2_ALLOW+SAREF_TRACK+IKE_FRAG_ALLOW {using isakmp#370 msgid:76bf0615 proposal=3DES(3)_000-SHA1(2)_000 pfsgroup=OAKLEY_GROUP_MODP1536}
117 "BY-to-UC" #371: STATE_QUICK_I1: initiate
002 "BY-to-UC" #371: transition from state STATE_QUICK_I1 to state STATE_QUICK_I2
004 "BY-to-UC" #371: STATE_QUICK_I2: sent QI2, IPsec SA established tunnel mode {ESP/NAT=>0x26978c24 <0xdf95b93d xfrm=3DES_0-HMAC_SHA1 NATOA=none NATD=106.75.x.x:4500 DPD=passive}

这个状态即为启动成功,两端可互相 ping 通。

1
ping 10.10.68.61

4.2 VPN自动启动

1
chkconfig ipsec on

将/etc/ipsec.conf 文件中的 auto=add 改为 auto=start

4.3 其他主机路由

其他云主机如果要通过 ipsec 访问对端要增加相应的路由,或者网关指向本地的 ipsec服务器。

4.4 故障排查 发生no connection named “xxxxx”的报错时基本为配置文件错误或者conn名字错误,检查conn名称、配置文件格式,并查看/var/log/messages中具体错误参数/格式提示。

发生第一阶段(STATEMAINI1)或者第二阶段(STATEQUICKI1)初始化超时报错的时候,多为两端参数配置错误导致的协商失败,需要查看/var/log/secure以及对端的日志确定具体哪个参数协商错误。

 评论