openswan简介,安装,部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openswan简介,安装,部署相关的知识,希望对你有一定的参考价值。

1. OpenSWan介绍

1.1 OpenSWan概述

OpenSWanlinuxIpsecI2tp协议的一个不错的实现方案。他支持和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信息可查看软件包下面的INSTALLREADMEDOCS

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)提示:Lserver1Rserver1可以互相ping

2)Lclient可以pingLserver1,甚至可以pingRserver1的外网卡

3)Rclient可以pingRclient

4)Lclient可以pingrserver1,同时可以pinglserver1

5)lclient不能和rclient1互通。

6)最终目的就是lclient能和rclient1互通

 

1)在部署前进行主机规划的意义非常重大,它可以让我们思路清晰,避免走冤枉路

2)如无特殊说明,上述规划中的子网掩码均为24

3)上述中L表示leftR表示right

生产环境网段划分

技术分享


技术分享

技术分享

 

2.2 检查主机间的连接是否正常

7)Lserver1Rserver1可以互相ping

8)Lclient可以pingLserver1,甚至可以pingRserver1的外网卡

9)Rclient可以pingRclient

10)Lclient可以pingrserver1,同时可以pinglserver1

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连接方式

1Network-to-Network

条件:

每个子网各自拥有一台安装有Openswan的主机作为其子网的出口网关

每个子网的IP段不能有叠加

2)Road Warrior方式

当使用Network-to-Network方式时,作为每个子网网关的之际不能像子网内部主机那样透明访问远程子网的之际,也就是说:如果你是一个使用笔记本电脑的移动用户,经常出差或是在不同的地点办公,你的PC将不能用Network-to-Network方式与公司网络进行连接。

Road Warrior方式正是为这种情况而设计的,连接建立后,你的pc就可以链接到远程的网络了

5.4 使用RSA数字签名(RSASIG)认证方式配置openswan

1)Lserver1Rserver1上分别生成新的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)对每个子网IPNAT映射

所有主机都通过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.180Rclient 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)跨机房跨办公场所互联解决方案(vpnipsec)  <==修路搭桥

4)拨号到一个主机房,然后直接方案其他机房的内部服务器方案(借助23

5)跨机房的数据同步方案(文件同步rsync,inotify,unsion,csync<==跑汽车,火车

6)跨机房的数据同步方案(m-s

7)跨机房之间的业务访问解决方案

a.要尽可能多的本地访问,少量异地访问,例如,A机房的web原来是访问B机房的DB(开发人员的思路)改成远程写B机房的数据库,然后都本地的数据库(从对端把主库数据同步到A端从数据库中)

思想:远程写,本地读(包括图片文件和数据等)

8)跨机房通过队列异步同步数据(A机房写消息队列里QB机房消费A机房的消息队列Q

9)tcpdump排查故障的思路思想

10)统一认证解决方案(服务器\FTPSAMBAVPNPOSTFIXSVNHTTPJIRAGIT

11)跨机房业务的高可用可用方案(VPNIPSEC


以上是关于openswan简介,安装,部署的主要内容,如果未能解决你的问题,请参考以下文章

AWS 的站点到站点 OpenSWAN *** 隧道问题

网络重启后Openswan隧道不工作

Openswan 和 strongSwan 相比,各有啥特点

Openswan和freeswan的区别?

L2TP/IPSec一键安装脚本

如何在Ubuntu下配置L2TP VPN