CentOS 6.3下Openswan实现双IDC互联

一、软件说明

1、Openswan简介
    Openswan是Linux下IPsec的最佳实现方式,其功能强大,最大程度地保证了数据传输中的安全性、完整性问题。
    Openswan支持2.0、2.2、2.4以及2.6内核,可以运行在不同的系统平台下,包括X86、X86_64、IA64、MIPS以及ARM。
    Openswan是开源项目FreeS/WAN停止开发后的后继分支项目,其分裂为两个项目,Openswan与 Strongswan,Openswan由三个主要组件构成:配置工具(ipsec命令脚本)、Key管理工具(pluto)、
内核组件(KLIPS/26sec)
    26sec使用2.6内核内建模块Netkey,用来替代Openswan开发的KLIPS模块,2.4及以下版本内核无Netkey模块支持,只能使用KLIPS。如果你用的是2.6.9以上的内核,推荐使用26sec,可以不用给内核打Nat-T补丁就可以使用NAT,2.6.9以下版本内核的NETKEY存在Bug,推荐使用KLIPS。IPSec差不多是最老的***标准了,她的依然很安全,当然是在配置好以后。言下之意,她的配置比较麻烦。本文下面将做说明。 

    因为FreeS/WAN已经在2004年三月停止开发,所以我们使用她的后继项目Openswan来做我们的IPSec实验。其相比FreeS/WAN有个好处,如果使用 26sec 的时候,Openswan不用打补丁,就可以用nat。

2、Openswan的安装
    因为IPSec工作在网络层,所以需要系统内核态的支持,上面说过,有两个选择,用自带(26sec)的或用Openswan(KLIPS)的,为了方便(如何打补丁和编译内核不是本文讨论的重点),本文使用CentOS源中编译好的Openswan来进行实验。

yum install openswan

    如果你想从源码安装,到http://www.openswan.org/code  下载软件包,然后按照包中的说明安装。由于我们使用26sec,所以只要make programs;make install就可以搞定。值得注意的是,现在的Openswan已经内建些个好用的补丁,比如x.509和NAT Traversal的支持,使用起来非常的方便。你也可以用下面的命令来检验你的安装。

ipsec verify

3、Openswan的认证方式   

    Openswan支持许多不同的认证方式,包括RSA keys、pre-shared keys、xauth或x.509证书方式。RSA Signature比较简单。

4、Openswan的连接方式

1)、Network-To-Network方式
    Network-To-Network方式是把两个网络连接成一个虚拟专用网络。当连接建立后,每个子网的主机都可透明地访问远程子网的主机。要实现此种连接方式,要满足以下两个条件:
    I. 每个子网各自拥有一台安装有OpenSWan的主机作为其子网的出口网关或者路由;
    II.每个子网的IP段不能有叠加
2)、Road Warrior方式
    当使用Network-To-Network方式时,作为每个子网网关的主机不能像子网内部主机那样透明访问远程子网的主机,也就是说:如果你是一个使用LClient的移动用户,经常出差或是在不同的地点办公,你的LClient将不能用Network-To-Network方式与公司网络进行连接。Road Warrior方式正是为这种情况而设计的,连接建立后,你的LClient就可以连接到远程的网络了。

   更多详情请参见OpenSWan项目主页:http://www.openswan.org

5、本文将从以下几点进行测试

net-to-net模型

1)基于pre-shared keys认证方式(PSK)

2)基于RSA Signature认证方式(RSA数字签名)

3)基于数字证书认证方式(x.509证书)

4)基于XAUTH认证方式(IPSec/Xauth PSK)

RoadWarrior

5)基于pre-shared keys认证方式(PSK)

6)基于RSA Signature认证方式(RSA数字签名)

7)基于数字证书认证方式(x.509证书)

8)基于XAUTH认证方式(IPSec/Xauth PSK)

9)基于XAUTH认证方式(IPSec/Xauth RSA)

10)基于L2TP认证方式(L2TP/IPSec PSK)

11)基于L2TP认证方式(L2TP/IPSec RSA)


二、环境说明

1、网络拓扑

wKioL1XDJ4aCPi5VAAIzq5ajK40319.jpg

2、实验目的

    本使用目的是为了实现client1和client2两个不同地区不同子网的互通。

3、实验环境介绍 

设备名称
IP地址信息所属机房
***server1

外网eth0  192.168.0.50     桥接

内网eth1  192.168.20.1     VMnet4

网    关  192.168.0.1

北京
***server2

外网eth0  192.168.0.51     桥接

内网eth1  192.168.10.1     VMnet5

网    关  192.168.0.1

上海
client1

eth0      192.168.20.2     VMnet4

网关      192.168.20.1

北京
client2

eth0      192.168.10.2     VMnet5

网关      192.168.10.1

上海

    我本地的网络是192.168.0.0/24网段,为了让***Server可以上网,我这边把***Server的eht0设定到了192.168.0.0/24网段,并且网卡设定为桥接,其他的网络安装上面表格配置好,这样我们就可以全部远程操作了,把每个主机的主机名修改好,这样便于我们观察。


三、Openswan环境部署

1、开启数据转发

# vim /etc/sysctl.conf 

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

2、关闭icmp重定向

sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print$1"= 0"}' >> /etc/sysctl.conf
sysctl -p

3、关闭SELinux

setenforce 0

4、安装epel源

rpm -ivh http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm

5、安装openswan

yum install openswan lsof -y
rpm -ql openswan                #查看安装了那些文件。
ipsec --version                 #查看ipsec的版本

wKioL1XBeEnywQy8AAB9890ojiQ851.jpg

    这里并没有加载任何的IPsec stack,当启动IPsec后悔自动加载系统自带的netkey。

service ipsec start
ipsec verify               #对ipsec进行验证

wKiom1XBdrTTPQ_zAAI3NgDgmy8054.jpg

netstat -anp

wKiom1XDJaHjQ2RNAAIbzWgUBKM917.jpg

    我们可以看到openswan监听在UDP的500和4500两个端口,其中500是用来IKE密钥交换协商,4500的NAT-T是nat穿透的。

四、Openswan配置(network-to-network)

1、基于pre-shared keys认证方式(PSK

    在192.168.0.50上面作如下修改,里面的配置参数很多,大家可以参照man ipsec.conf里面的讲解

# vim /etc/ipsec.conf

version 2.0     
config setup
        protostack=netkey      #使用2.6内核内建模块netkey,2.6以下是KLIPS模块 
        nat_traversal=yes      #NAT-T 即NAT穿越
        virtual_private=
        oe=off
conn net-to-net
        authby=secret          #使用预共享密钥方式进行认证
        type=tunnel
        left=192.168.0.50      #一端IP地址
        leftsubnet=192.168.20.0/24      #一端内网网段地址
        leftid=@test1          #一端的标识符,可以任意填写,如果多个连接需要区分
        leftnexthop=%defaultroute
        right=192.168.0.51
        rightsubnet=192.168.10.0/24
        rightid=@test2
        rightnexthop=%defaultroute
        auto=add      #add代表只是添加,但并不会连接,如果为start则代表着启动自动连接

wKioL1XDJ6jC1HUFAAMxCp9SxUQ036.jpg

    同样在另一台***server上面配置,信息和上面一下,不需要做什么修改。

# vim /etc/ipsec.secrets

192.168.0.50 %any 0.0.0.0 : PSK "123"

    这个文件的格式为:“Local Ip address”  “remote ip address” : PSK “your key”    

    在192.168.0.51上面修改成如下

# vim /etc/ipsec.secrets

192.168.0.51 %any 0.0.0.0 : PSK "123"

    重启两个***服务

# service ipsec restart

然后启动一下我们的con

# ipsec auto --up net-to-net

wKiom1XDJbqA4Bo6AALFiwuvYMg596.jpg

    当我们看到ipsec sa estabilished,就证明我们连接成功了,也可以从中看到一些加密方法,密钥交换参数,我们也可以在配置文件里面添加如下信息进行修改。

ike=aes256-sha2_256;modp2048
phase2alg=aes256-sha2_256;modp2048

    然后在clinet1上面去ping对端子网的设备,可以看到如下,但是***Server是不能ping通对方子网的设备的。

wKioL1XDJ77TzZNLAAGAQPZYEHQ153.jpg

    我们可以在任意***Server网关上面抓包,查看数据信息

tcpdump -i eth0 -nn

wKioL1XDJ8njyvrSAAIkGxo7F3o542.jpg

    其中ESP(Encapsulating Security Payload)就是加密数据。

    测试通过后,可以把连接配置中auto=add更改为auto=start这样当Openswan启动时就可自动进行连接。

    到此我们net-to-net基于psk模式的***就搭建成功了。


2、基于RSA Signature认证方式(RSA数字签名)

注:因为我是接着上面的实验进行操作,一直有问题无法解决,后来重新安装了一下,安装下面的流程一次就成功了。

    openswan的安装方式同本文第三章节一样,下面我们主要讲解配置的不同。下面提到的L-Server指的是192.168.0.50(***Server1),R-Server指的是192.168.0.51(***Server2)。

在L-Server上面进行如下操作

    生成一个新的RSA密钥对

ipsec newhostkey --output /etc/ipsec.secrets

    因为这个生成过程太过缓慢,我们使用下面方面进行加速生成

rm -rf /dev/random
ln -s /dev/urandom /dev/random
ipsec newhostkey --output /etc/ipsec.secrets

    以上内容同样的方法在R-Server上面执行一遍

    在L-Server上执行ipsec showhostkey --left得到L-Server的公钥

ipsec showhostkey --left

wKiom1XDJdzy-gjfAAGUtWL2D-A419.jpg

    在R-Server上执行ipsec showhostkey --right得到R-Server的公钥

ipsec showhostkey --right

wKioL1XDJ9_SlpjtAAGrd2h-AGQ423.jpg

    请记住这两个key,后面会用到,也可以使用重定向加到配置文件里面


L-Sserver:

编辑/etc/ipsec.conf文件

# vim /etc/ipsec.conf

version 2.0     # conforms to second version of ipsec.conf specification
config setup
        protostack=netkey
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        oe=off
conn net-to-net
        left=192.168.0.50
        leftsubnet=192.168.20.0/24
        leftnexthop=%defaultroute
        right=192.168.0.51
        rightsubnet=192.168.10.0/24
        rightnexthop=%defaultroute
        auto=start

    目前先增加这些内容,然后增加各自的公钥

ipsec showhostkey --left >> /etc/ipsec.conf

    下面把R-Server的公钥增加进来,可以在R-Server服务器上面复制粘贴到这里,整理好之后传到R-Server上面,这就完整的配置文件。

egrep -v "^$|^#|^[[:space:]]+#" /etc/ipsec.conf

wKioL1XDJ-zS-4F_AANAlNcOdpw120.jpg

# scp /etc/ipsec.conf 192.168.0.51:/etc

# service ipsec start

    在一端client去ping另一端的客户机,然后我们在***server上面抓包查看。

# tcpdump -i eth0 -nn 

wKiom1XDJfzAHWqwAAOC94lnV1c653.jpg

    一切测试成功之后,我们修改ipsec.conf中的auto=add改为auto=start,让其自动建立隧道。

# chkconfig ipsec on


3、基于数字证书认证方式(x.509证书)

     环境部署请看本文第三章节

     x.509证书方式当然更灵活,要是***的客户比较多,总不能,每个都记住长长的rsasig吧。使用x.509证书认证,我们首先需要装上openssl(现在的Linux基本自带,没有的www.openssl.org下一个装上)。

    首先我们要建立私有CA,然后对证书进行签署,这个过程请查看文章,我这里不在进行演示。

     http://wangzan18.blog.51cto.com/8021085/1676529。

     根据文章要求,我们建立好了CA及证书,创建的证书如下:

     cakey.pem、cacert.prm、left.key、left.cert、right.key、right.cert.

     为了简便操作,我们把上面所有证书传到两个server上面,然后进行如下操作:

在L-Server上面操作

mkdir /etc/ipsec.d/{private,certs,cacert}
cp left.crt right.crt /etc/ipsec.d/certs/
cp left.key /etc/ipsec.d/private/
cp cacert.pem /etc/ipsec.d/cacert/

在R-Server上面操作

mkdir /etc/ipsec.d/{private,certs,cacert}
cp left.crt right.crt /etc/ipsec.d/certs/
cp right.key /etc/ipsec.d/private/
cp cacert.pem /etc/ipsec.d/cacert/

证书放置好之后,我们下面就进行ipsec.conf配置文件的修改了

L-Server

# vim /etc/ipsec.conf

version 2.0
config setup
         interfaces=%defaultroute
         nat_traversal=yes
         protostack=netkey
         oe=off
conn net-to-net
         leftrsasigkey=%cert
         rightrsasigkey=%cert
         keyingtries=1
         pfs=no
         left=192.168.0.50
         leftid=@left
         leftcert=left.cert
         leftsubnet=192.168.20.0/24
         right=192.168.0.51
         rightid=@right
         rightsubnet=192.168.10.0/24
         rightcert=right.cert
         auto=add


未完待续…………



4、基于XAUTH认证方式(IPSec/Xauth PSK)


   用的很少,因为配置起来很麻烦



四、Openswan配置(RoadWarrior模式)


1、基于pre-shared keys认证方式(PSK


   使用很少,因为很不安全


2、基于RSA Signature认证方式(RSA数字签名)


   使用很少,因为很不方便记忆


3、基于数字证书认证方式(x.509证书)


未完待续…………



4、基于XAUTH认证方式(IPSec/Xauth PSK)

config setup
   nat_traversal=yes
   virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
   oe=off
   protostack=netkey
   nhelpers=0
conn IPSec-XAUTH-PSK
   authby=secret
   pfs=no
   auto=add
   keyingtries=3
   rekey=no
   ikelifetime=8h
   keylife=1h
   type=transport
   left=123.57.241.214
   leftnexthop=%defaultroute
   leftxauthserver=yes
   leftxauthusername=yes
   leftmodecfgserver=yes
   right=%any
   rightsubnet=192.168.10.0/24
   rightnexthop=%defaultroute
   rightxauthclient=yes
   rightmodecfgclient=yes
   rightxauthusername=yes
   rightxauthpassword=yes


# cat /etc/ipsec.secrets 

  : PSK "123456a"
  @test : XAUTH "123456"


5、基于XAUTH认证方式(IPSec/Xauth RSA)


 用的非常少,并且大家是记不住这么长的密钥的



6、基于L2TP认证方式(L2TP/IPSec PSK)


1)软件的下载,请安装好epel源

# yum install openswan xl2tpd -y

2)修改openswan的配置

# vim /etc/ipsec.conf

   把下面xx.xxx.xxx.xxx换成你自己VPS实际的外网固定IP。其他的不动。

config setup
   nat_traversal=yes
   virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
   oe=off
   protostack=netkey
   nhelpers=0
   
conn L2TP-PSK-NAT
   rightsubnet=vhost:%priv
   also=L2TP-PSK-noNAT
   
conn L2TP-PSK-noNAT
   authby=secret
   pfs=no
   auto=add
   keyingtries=3
   rekey=no
   ikelifetime=8h
   keylife=1h
   type=transport
   left=xxx.xxx.xxx.xxx
   leftprotoport=17/1701
   right=%any
   rightprotoport=17/%any

配置ipsec.secrets

vim /etc/ipsec.secrets
xxx.xxx.xxx.xxx %any: PSK "YourPsk"

    xx.xxx.xxx.xxx换成你自己VPS实际的外网固定IP, YourPsk你自己定一个,到时候连***的时候可以用,比如可以填123456a,注意空格。也可以直接写成这样,前面省略代表任何%any。

: PSK "YourPsk"

3)修改/添加 /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print$1"= 0"}' >> /etc/sysctl.conf
sysctl -p
setenforce 0

4)验证ipsec运行状态

service ipsec start
ipsec verify

wKioL1XEFNKhyVAtAAMZB9PbHQg916.jpg

5)配置options.xl2tpd

# vim /etc/ppp/options.xl2tpd

require-mschap-v2
ipcp-accept-local
ipcp-accept-remote
ms-dns 223.5.5.5
ms-dns 114.114.114.114
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
logfile /var/log/xl2tpd.log

6)配置xl2tpd.conf

# vim /etc/xl2tpd/xl2tpd.conf

[global]
auth file = /etc/ppp/chap-secrets
[lns default]
ip range = 192.168.10.128-192.168.10.254
local ip = 192.168.10.99
assign ip = yes
require chap = yes
refuse pap = yes
require authentication = yes
name = openswan***
ppp debug = yes
pppoptfile =/etc/ppp/options.xl2tpd
length bit = yes

7)开启地址伪装

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

8)启动服务

service ipsec start
service xl2tpd start

9)设备连接

我们按照要求输入信息就可以了,手机上面选择l2tp或者ipsec\l2tp

windows7添加好之后,修改成如下,别忘记输入共享密钥

wKioL1XK-GzSCpnpAAG4-Y8yvYE200.jpg

10)调试

查看日志

tail -f /var/log/message
ipsec status
tail -f /var/log/xl2tpd.log

7、基于L2TP认证方式(L2TP/IPSec RSA)

    这种方式和上面的配置信息差不多,只是使用证书进行验证,这种情况用的不是很多,所有我这里不再进行实验的验证了,主要是修改ipsec.conf配置文件以及创建证书,并在/etc/ipsec.d/目录下面创建证书目录

# vim /etc/ipsec.conf

config setup
   nat_traversal=yes
   virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
   oe=off
   protostack=netkey
   nhelpers=0
   
conn L2TP-PSK-NAT
   rightsubnet=vhost:%priv
   also=L2TP-PSK-noNAT
   
conn L2TP-PSK-noNAT
   authby=rsasig
   pfs=no
   auto=add
   keyingtries=3
   rekey=no
   ikelifetime=8h
   keylife=1h
   type=transport
   left=xxx.xxx.xxx.xxx
   leftprotoport=17/1701
   leftcert=left.cert
   right=%any
   rightprotoport=17/%any
   rightcert=right.cert

# vim /etc/ipsec.secrets

: RSA  client.key
: PSK  "YourPSK"




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值