1. OpenSWan介绍
1.1 OpenSWan概述
OpenSWan是linux选Ipsec及I2tp协议的一个不错的实现方案。他支持和ipsec相关的大多数的扩展(RFC+IETF drafts)。Openswan项目起源于FreeS/WAN 2.04项目,该项目的功能很强大,可以很大程度上保证数据在跨网传输中的安全性、完整性,特别是通过它,饿哦没可以很好地实现跨机房或异地办公场所实现局域网互联解决方案,如果和openvpn工具配合,可以实现将注入门户网站的多机房互访及vpn的各种强大解决方案
OpenSWan也并不都是优点,首先,其官方社区还不完善,官方文档信息比较少
大中型企业最需要的方案-------跨公网实现多个机房通过局域网互联的重要生产应用场景(network-to-network or sete-to-site)
OpenSWan由三个主要组件构成
a.配置工具(ipsec命令脚本)
b.Key管理工具(pluto)
c.内核组件(KLIPS/26sec)
更多的openswan信息可查看软件包下面的INSTALL、README、DOCS。
2. 安装环境与主机规划
主机名 |
网卡eth0(外网) |
网卡eth1(内网) |
默认网关 |
用途 |
Lserver1 |
192.168.1.80 |
192.168.2.80 |
192.168.1.1 |
Left1网关 |
Rserver1 |
192.168.1.81 |
192.168.3.81 |
192.168.1.1 |
|
Lclient1 |
192.168.2.180 |
192.168.2.80 |
Left1客户机 |
|
Rclient1 |
192.168.3.181 |
192.168.3.81 |
Right1客户机 |
1)提示:Lserver1和Rserver1可以互相ping通
2)Lclient可以ping通Lserver1,甚至可以ping通Rserver1的外网卡
3)Rclient可以ping通Rclient
4)Lclient可以ping通rserver1,同时可以ping通lserver1
5)lclient不能和rclient1互通。
6)最终目的就是lclient能和rclient1互通
1)在部署前进行主机规划的意义非常重大,它可以让我们思路清晰,避免走冤枉路
2)如无特殊说明,上述规划中的子网掩码均为24位
3)上述中L表示left,R表示right
生产环境网段划分
2.2 检查主机间的连接是否正常
7)Lserver1和Rserver1可以互相ping通
8)Lclient可以ping通Lserver1,甚至可以ping通Rserver1的外网卡
9)Rclient可以ping通Rclient
10)Lclient可以ping通rserver1,同时可以ping通lserver1
11)lclient不能和rclient1互通。
12)最终目的就是lclient能和rclient1互通
3. 安装技术软件及配置系统参数
3.1 安装基础软件包
yum -y install ipsec-tools
yum -y install gmp gmp-devel gawk flex bison
3.2 检查安装的基础软件包
rpm -aq gmp gmp-devel gawk flex bison ipsec-tools
3.3 配置内核参数
cp /etc/sysctl.conf /etc/sysctl.conf.$(date +%F)
sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" ‘{print $1 "=0"}‘ >> /etc/sysctl.conf
强调:如果不进行内核调优,后面会出现问题
sed -i ‘s#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g ‘ /etc/sysctl.conf
sed -i ‘s#net.ipv4.conf.default.rp_filter = 1#net.ipv4.conf.default.rp_filter = 0#g ‘ /etc/sysctl.conf
egrep "rp_filter|forward" /etc/sysctl.conf
sysctl -p
4. 安装OpenSwan软件
4.1 下载编译并安装
wget https://download.openswan.org/openswan/openswan-2.6.40.tar.gz
mkdir -p /home/yan/tools
cd /home/yan/tools
tar -xf openswan-2.6.40.tar.gz
cd openswan-2.6.40
make programs
make install
4.2 验证安装结果
[[email protected] ~]# ipsec --version
Linux Openswan U2.6.40/K(no kernel code presently loaded)
See `ipsec --copyright‘ for copyright information.
[[email protected] ~]# ipsec verify
4.3 启动服务
/etc/init.d/ipsec start
ipsec_setup: Starting Openswan IPsec 2.6.40...
ipsec_setup: No KLIPS support found while requested, desperately falling back to netkey
ipsec_setup: NETKEY support found. Use protostack=netkey in /etc/ipsec.conf to avoid attempts to use KLIPS. Attempting to continue with NETKEY
4.4 检查服务
[[email protected] ~]# /etc/init.d/ipsec status
IPsec running - pluto pid: 15141
pluto pid 15141
No tunnels up
[[email protected] ~]# ipsec verify
Checking if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Openswan U2.6.40/K2.6.32-431.el6.x86_64 (netkey)
See `ipsec --copyright‘ for copyright information.
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]
Hardware random device check [N/A]
Two or more interfaces found, checking IP forwarding[OK]
Checking rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/eth0/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/eth1/rp_filter [ENABLED]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for IKE on tcp 500 [NOT IMPLEMENTED]
Pluto listening for IKE/NAT-T on udp 4500 [OK]
Pluto listening for IKE/NAT-T on tcp 4500 [NOT IMPLEMENTED]
Pluto listening for IKE on tcp 10000 (cisco) [NOT IMPLEMENTED]
Checking NAT and MASQUERADEing [TEST INCOMPLETE]
Checking ‘ip‘ command [IP XFRM BROKEN]
Checking ‘iptables‘ command [OK]
解决方法:
echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
4.5 查看pluto端口
[[email protected] ~]# netstat -ntlpu | grep pluto
udp 0 0 127.0.0.1:500 0.0.0.0:* 29543/pluto
udp 0 0 192.168.1.81:500 0.0.0.0:* 29543/pluto
udp 0 0 192.168.3.81:500 0.0.0.0:* 29543/pluto
udp 0 0 127.0.0.1:4500 0.0.0.0:* 29543/pluto
udp 0 0 192.168.1.81:4500 0.0.0.0:* 29543/pluto
udp 0 0 192.168.3.81:4500 0.0.0.0:* 29543/pluto
udp 0 0 ::1:500 :::* 29543/pluto
5. 配置OpenSwan
5.1 Openswan主要配置文件
/etc/ipsec.secrets用来保存private RSA keys 和 preshared secrets (PSKs)
/etc/ipsec.confOpenSWan主要配置文件(settings, options, defaults, connections)
5.2 Openswan主要配置说明
/etc/ipsec.d/cacerts存放X.509认证证书
/etc/ipsec.d/certs存放X.509客户端证书
/etc/ipsec.d/crls存放X.509证书撤销文件
/etc/ipsec.d/private存放X.509认证私钥
/etc/ipsec.d/ocspcerts存放X.509 OCSP证书
/etc/ipsec.d/policies存放Opportunistic Encryption 策略组
5.3 OpenSWan连接方式
1)Network-to-Network
条件:
每个子网各自拥有一台安装有Openswan的主机作为其子网的出口网关
每个子网的IP段不能有叠加
2)Road Warrior方式
当使用Network-to-Network方式时,作为每个子网网关的之际不能像子网内部主机那样透明访问远程子网的之际,也就是说:如果你是一个使用笔记本电脑的移动用户,经常出差或是在不同的地点办公,你的PC将不能用Network-to-Network方式与公司网络进行连接。
Road Warrior方式正是为这种情况而设计的,连接建立后,你的pc就可以链接到远程的网络了
5.4 使用RSA数字签名(RSASIG)认证方式配置openswan
1)在Lserver1、Rserver1上分别生成新的hostkeys
备份:
cp /etc/ipsec.secrets /etc/ipsec.secrets.$(date +%U%T)
ipsec newhostkey --output /etc/ipsec.secrets (有时候长时间没反应,需要多等下)
2)在Lserver上执行下面的命令获得leftrsasigkey(即Lserver的公钥Public Key)
[[email protected] ~]# ipsec showhostkey --left
[[email protected] ~]# ipsec showhostkey --left >tmp.log
3)在Rserver上执行下面的命令获得leftrsasigkey(即Lserver的公钥Public Key)
[[email protected] ~]# ipsec showhostkey --right
[[email protected] ~]# ipsec showhostkey --right >tmp.log
4)编辑配置文件ipsec.conf
模板文件cat /usr/local/share/doc/openswan/ipsec.conf-sample
vim /etc/ipsec.conf
两边重新启动
/etc/init.d/ipsec restart
/etc/init.d/ipsec status
IPsec running - pluto pid: 15761
pluto pid 15761
8 tunnels up
some eroutes exist
不出意外,已经配置正确
5)对每个子网IP做NAT映射
所有主机都通过openswan网关出网
Lserver1:
iptables -t nat -I POSTROUTING -o eth0 -s 192.168.2.0/24 -j MASQUERADE
echo “iptables -t nat -I POSTROUTING -o eth0 -s 192.168.2.0/24 -j MASQUERADE” >> /etc/rc.local
(此时Lclient可以上网了)
Rserver1:
iptables -t nat -I POSTROUTING -o eth0 -s 192.168.3.0/24 -j MASQUERADE
echo “iptables -t nat -I POSTROUTING -o eth0 -s 192.168.3.0/24 -j MASQUERADE” >> /etc/rc.local
(此时Rclient可以上网了)
6. 启动OpenSwan服务
6.1 分别重启OpenSwan服务
/etc/init.d/ipsec restart
此时Lclient 192.168.2.180和 Rclient 192.168.3.181 互ping能通,目标完成
7.
7.2 通过route实战解决跨机房间的故障
此类问题,最多的就是排查路由的问题,因为有些服务器的网关并不是openswan网关的地址,即不符合本文开头的约定。
此时就需要route命令为网关地址不是openswan网关的地址的客户端添加特定路由。
7.3 通过tcpdump实战解决跨机房间的故障
tcpdump检查实际上是对数据包去和回进行跟踪,然后采取措施纠正其错误
tcpdump -nnn -i eth0 -s 10000 | grep ICMP
如果是多机房下面增加一段配置
7.4
1)大中型公司代码上线的解决方案
2)IDC机房或办公室vpn拨号访问解决方案
3)跨机房跨办公场所互联解决方案(vpn和ipsec) <==修路搭桥
4)拨号到一个主机房,然后直接方案其他机房的内部服务器方案(借助2,3)
5)跨机房的数据同步方案(文件同步rsync,inotify,unsion,csync) <==跑汽车,火车
6)跨机房的数据同步方案(m-s)
7)跨机房之间的业务访问解决方案
a.要尽可能多的本地访问,少量异地访问,例如,A机房的web原来是访问B机房的DB(开发人员的思路)改成远程写B机房的数据库,然后都本地的数据库(从对端把主库数据同步到A端从数据库中)
思想:远程写,本地读(包括图片文件和数据等)
8)跨机房通过队列异步同步数据(A机房写消息队列里Q,B机房消费A机房的消息队列Q)
9)tcpdump排查故障的思路思想
10)统一认证解决方案(服务器\FTP,SAMBA,VPN,POSTFIX,SVN,HTTP,JIRA,GIT)
11)跨机房业务的高可用可用方案(VPN,IPSEC)