用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx

上传人:b****8 文档编号:10922148 上传时间:2023-02-23 格式:DOCX 页数:14 大小:22.34KB
下载 相关 举报
用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx_第1页
第1页 / 共14页
用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx_第2页
第2页 / 共14页
用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx_第3页
第3页 / 共14页
用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx_第4页
第4页 / 共14页
用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx

《用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx》由会员分享,可在线阅读,更多相关《用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx(14页珍藏版)》请在冰豆网上搜索。

用OpenSWAN做Linux下的IPSec VPN的详细配置指南.docx

用OpenSWAN做Linux下的IPSecVPN的详细配置指南

用OpenSWAN做Linux下的IPSecVPN的详细配置指南

创建时间:

2006-10-25更新时间:

2006-10-26

文章属性:

原创

文章提交:

toorq

(toorq_at_)

用Openswan组建LinuxIPSec

bytoorq

1.概述

2.安装Openswan

3.认证和配置

3.1RSAsig认证方式的配置

3.2x.509证书认证的配置

3.3RoadWarrior模式的配置

5.Windows客户端的配置

*****

1.概述

LInux上的VPN支持主要有三种:

1)IPSec'sVPN其主要代表有FreeS/WAN、KAME

IPSec在Linux上支持主要有两个主要的分类,一为FreeS/WAN,现在已经停止开发,其分裂为两个项目,Openswan与Strongswan。

其可以用自身的IPsec内核堆栈(Kernelstack),称为KLIPS,也可以用2.6内核中的堆栈代码(下面我们称其为26sec),可以说是非常的灵活。

还有就是来自BSD世界的KAME。

KAME只能用内核堆栈。

IPSec差不多是最老的VPN标准了,她的依然很安全,当然是在配置好以后。

言下之意,她的配置比较麻烦。

本文下面将做说明。

2)SSL-BasedVPN其主要代表有OpenVPN

SSL只要跑在应用层,所以理所当然的配置简单,只要机子能跑TCP或UDP就行,也可以穿过大多的防火墙。

3)PPTP-BasedVPN有(PoPTop)

PoPTop可以说是PPTP在Linux下的实现。

不过,IPSec上跑L2TP更安全。

2.安装Openswan

因为FreeS/WAN已经在2004年三月停止开发,所以我们使用她的后继项目Openswan来做我们的IPSec实验。

其相比FreeS/WAN有个好处,如果使用26sec的时候,Openswan不用打补丁,就可以用nat。

因为IPSec工作在网络层,所以需要系统内核态的支持,上面说过,有两个选择,用自带(26sec)的或用Openswan(KLIPS)的,为了方便(如何打补丁和编译内核不是本文讨论的重点),本文使用2.6自带的实现代码。

同时本文使用DebianSarge作为实验系统,在Debian上安装。

#apt-getinstallopenswan

如果你想从源码安装,到

http:

//www.openswan.org/code

下载软件包,然后按照包中的说明安装。

由于我们使用26sec,所以只要makeprograms;makeinstall就可以搞定。

值得注意的是,现在的Openswan已经内建些个好用的补丁,比如x.509和NATTraversal的支持,使用起来非常的方便。

你也可以用

#ipsecverify来检验你的安装

3.认证和配置

3.1RSASignature(RSA数字签名)认证的配制

Openswan支持许多不同的认证方式,包括RSAkeys、pre-sharedkeys或x.509证书方式。

RSASignature比较简单,我先介绍下所要使用的命令

生成一个新的RSA密钥对

#ipsecnewhostkey--output/etc/ipsec.secert

按left或right格式生成RSASig

#ipsecshowhostkey--left(或--right)

知道了上面的命令,我们就可以配置一个net-to-net,就是网关对网关的通讯。

所在的Linux主机为通讯的网关,作为其子网的出口,对于子网的用户来所是透明的,远程的子网在通讯后可以像自己的局域网一样的访问。

本文使用VMWare架设起一个四台虚拟Linux主机来进行试验。

因为要在不同的机子上进行配置,所以请读者认清主机名。

192.168.183.44(子网客户机,计算机名RA)

192.168.49.2(Left网关主机,计算机名melin,同时eth1配置为192.168.183.1)

192.168.49.3(Right网关主机,计算机名right,同时eth1配置为192.168.233.1)

192.168.233.44(子网客户机,计算机名RB)

两个网关主机当然要安装好Openswan。

同时用iptabels配置好NAT伪装。

然后我们运行下面的命令

//melin

#ipsecnewhostkey--output/etc/ipsec.secert

#ipsecshowhostkey--right>>/etc/ipsec.conf

#vi/etc/ipsec.conf//编辑ipsec.conf配置文件

#scp/etc/ipsec.confroot@right_GW_ipaddress:

/etc/ipsec.conf//把ipsec.conf拷贝到right网关,目的是为了让right的到left的rsasig。

//right

#ipsecnewhostkey--output/etc/ipsec.secert

#ipsecshowhostkey--right>>/etc/ipsec.conf

#vi/etc/ipsec.conf

#scp/etc/ipsec.confroot@left_GW_ipadress:

/etc/ipsec.conf

然后分别从前启动ipsec服务

#ipsecsetuprestart//这个因为你的系统不同点不同

这里的编辑ipsec.conf应该为(配置文件中的#为注释,和shell中不同)

version2.0

configsetup

interfaces=%defaultroute

nat_traversal=yes

conn%default

authby=rsasig

compress=yes

#关掉OpportunisticEncryption

include/etc/ipsec.d/examples/no_oe.conf

connnet-to-net

left=192.168.49.2

leftsubnet=192.168.183.0/24

leftid=@melin

leftnexthop=%defaultroute

right=192.168.49.3

rightsubnet=192.168.233.0/24

rightid=@right

rightnexthop=%defaultroute

#RSA2192bitsmelinMonMay2903:

42:

492006

leftrsasigkey=0sAQ...(leftrsasigkey值,省略)

#RSA2192bitsrightWedMay3122:

11:

592006

rightrsasigkey=0sAQ...

auto=add

然后在任意一方网关主机运行

ipsecauto--upnet-to-net,这个时候,两个客户机之间应该可以互相ping的通,就像在一个内网一样。

比如在RA上可以

$ping192.168.233.44

在ping的过程中,在任意一个网关上用tcpdump嗅探

#tcpdump-ieth0

可以看到这样的包

IP192.168.233.44>192.168.183.44:

icmp64:

echorequestseq10

IP192.168.49.2>192.168.49.3:

ESP(spi=0xeb73b78b,sed=0xa)

IP192.168.49.3>192.168.49.2:

ESP(spi=0x1601e0bd,sed=0xb)

可以看到两个网关已经用ESP在通讯,说明成功。

值得注意的是,如果网关主机开了iptables来做IP伪装(MASQUERADE)或NAT,需要竞争两个子网地址的转发,比如在我们例子中的Left主机上原来有

#echo1>/proc/sys/net/ipv4/ip_forward

#iptables-tnat-APOSTROUTING-oeth0-s192.168.183.0/24-jMASQERADE

把改为

#iptables-tnat-APOSTROUTING-oeth0-s192.168.183.0/24-d!

192.168.233.0/24-jMASQERADE

即不转发目标地址为Right主机下的子网。

另外,这一行

include/etc/ipsec.d/examples/no_oe.conf意为关闭OpportunisticEncryption在你不知道她到底做了什么之前,还是关掉她为好,打开no_oe.conf文件,发现其内容如下,我们将在本文的第五部分讨论这个话题。

connblock

auto=ignore

connprivate

auto=ignore

connprivate-or-clear

auto=ignore

connclear-or-private

auto=ignore

connclear

auto=ignore

connpacketdefault

auto=ignore

3.2x.509证书认证的配置

x.509证书方式当然更灵活,要是VPN的客户比较多,总不能,每个都记住长长的rsasig吧。

使用x.509证书认证,我们首先需要装上openssl(现在的Linux基本自带,没有的

www.openssl.org

下一个装上)。

1)然后,找到f文件,这个文件保存着对openssl证书生成的默认值,她的位置一般为:

Debian:

/etc/ssl/f

RedHat7.x+:

/usr/share/ssl/f

用编辑器打开,变量名目繁多,比较有用的有

"default_days",证书失效的天数,默认一般为365天,改为3650,这样十年才过期:

)。

"default_bits",密钥长度,默认为1024,你可以改为2048,更安全,当然速度也更慢……

"req_distinguished_name",默认的信息设置,如果你和我一样闲每次去生成密钥的时候去填的麻烦,就改之。

2)建一个目录来放你的CA,我们这里用/root/ca,记的把他的权限设置为700,你不希望其他用户可以看到你的私钥吧。

3)找到"CA.sh"脚本的位置,在不同系统上稍有不同

Debian:

/usr/lib/ssl/misc/CA.sh

RedHat7.x+:

/usr/share/ssl/misc/CA

编辑她,把DAYS="-days365"的365改成你希望的数值,注意要比f中的"default_days"要大,当时也不要太大,一般为15年到20年就好了。

4)生成证书

~/ca$/usr/lib/ssl/misc/CA.sh-newca;生成一个待签名的根证书,用她来给其他证书进行签名认证。

默认生成在demoCA目录下的cacert.pem文件(在f中的CA_default子段设置)下。

输入的密码为用来生成其他证书的密码。

-sign的时候用。

~/ca$opensslca-gencrl-outcrl.pem生成一个与根证书相对应的crl文件

然后开始生成给主机用的证书

~/ca$/usr/lib/ssl/misc/CA.sh-newreq生成待签名认证的证书,默认名字为newreq.pem,输入的密码用在填些/etc/ipsec.secrets中。

~/ca$/usr/lib/ssl/misc/CA.sh-sign对证书进行签名认证,默认名字为newcert.pem

~/ca$/usr/lib/ssl/misc/CA.sh-verify认证一下

然后重命名文件

~ca$mvnewcert.pemmelin.pem

~ca$mvnewreq.pemmelin.key//别搞反了,小的那个文件是key:

),另外如果要生成的主机证书,填入的信息相同可能出错

用同样的方法生成right.pem和right.key文件。

这样我们就有了同样的根证书生成的两个证书文件。

把文件拷贝到相应的位置:

在Left主机主机上

melin:

~/ca#cpmelin.key/etc/ipsec.d/private

melin:

~/ca#cpmelin.pem/etc/ipsec.d/certs

melin:

~/ca#cpdemoCA/cacert.pem/etc/ipsec.d/cacerts

melin:

~/ca#cpcrl.pem/etc/ipsec.d/crls/crl.pem

用安全的渠道(scp或软盘,别用ftp)把一下文件拷贝到right上

melin.pem

right.key

right.pem

demoCA/cacert.pem

crl.pem

也拷贝到正确的地方

melin#cpright.key/etc/ipsec.d/private

melin#cpright.pem/etc/ipsec.d/certs

melin#cpmelin.pem/etc/ipsec.d/certs

melin#cpcrl.pem/etc/ipsec.d/crls

melin#cpcacert.pem/etc/ipsec.d/cacerts/cacert.pem

5)配置ipsec

首先是/etc/ipsec.secrets加上

:

RSA/etc/ipsec.d/private/right.key"password"

password就是生成主机密钥的时候输入的密码

这里有几个密码要搞清楚,在生成根证书的时候输入密码是用来生成其他证书的,CA.sh-sign的时候要填入,ipsec.secrets填入的密码是CA.sh-newreq时候输入的密码。

然后当然就是/etc/ipsec.conf在本例子中的ipsec.conf分别为

#Left(melin)

version2.0

configsetup

interfaces=%defaultroute

nat_traversal=yes

conn%default

authby=rsasig

compress=yes

leftrsasigkey=%cert

rightrsasigkey=%cert

keyingtries=1

disablearrivalcheck=no

include/etc/ipsec.d/examples/no_oe.conf

connnet-to-net

left=%defaultroute

leftsubnet=192.168.183.0/24

leftcert=melin.pem

right=%any

rightsubnet=192.168.233.0/24

pfs=yes

auto=add

#Right(right)

version2.0

configsetup

interfaces=%defaultroute

nat_traversal=yes

conn%default

authby=rsasig

compress=yes

leftrsasigkey=%cert

rightrsasigkey=%cert

keyingtries=1

disablearrivalcheck=no

include/etc/ipsec.d/examples/no_oe.conf

connnet-to-net

left=192.168.49.2

leftsubnet=192.168.183.0/24

leftcert=melin.pem

right=%defaultroute

rightsubnet=192.168.233.0/24

rightcert=right.pem

pfs=yes

auto=add

然后分别重新启动IPSec服务

#ipsecsetuprestart

在right上启动连接

#ipsecauto--upnet-to-net

如果一切正确,两个子网之间就可以互相通讯了。

3)RoadWarrior模式的配置

上面我们做的是网关对网关的配置,我们在应用中还有一种情况,员工带着比较本出差或在家,需要用IPSec连接到公司的网络。

这个就是RoadWarrior模式。

我们回到1)中RSAKeys配置的例子,在两台主机上添加这样的配置字段

#RoadWarrior,Road的机子,比如到处带着跑的笔记本,我们这里用right

connroad

left=192.168.49.3#如果是动态ip地址,可以填上%defaultroute

leftnexthop=%defaultroute

leftid=@melin

leftrsasigkey=0sAQ...#本机的RSAKey

right=192.168.49.2

rightsubnet=192.168.183.0/24

rightid=@right

rightrsasigkey=0sAQO...#远程机子的RSAKey

auto=add

############################

#Host主机,我们这里用melin

connroad

left=192.168.49.2

leftid=@melin

leftsubnet=192.168.183.0/24

leftrsasigkey=0sAQ...

rightnexthop=%defaultroute

right=%any#不知道要传入的连接,所以用%any

rightid=@right

rightrsasigkey=0sAQ...

auto=add

可以看出,RoadWarrior模式和Net-to-Net模式配置的区别,关键就是在于net-to-net模式Left和Right是相同的,通讯的主机处于固定的位置上,而RoadWarrior配置,Left就是自己(Local),Right就是远程主机(Remote)。

所以看上去,两个的Left和Right值是相反的。

这个是配置的关键。

然后在RoadWarrior的主机上运行

ipsecauto--uproad

更改配置文件后记的要#ipsecsetuprestart重启OpenswanPluto。

接着就可以在right主机上ping到melin下的内网了

right$ping192.168.183.44

同样的可以在melin上

melin#tcpdump-ieth0

看到ESP包的交换

下面我们回到使用证书的net-to-net例子

细心的读者可以发现,在证书的例子配置中,melin主机的right字段是用的是%any,整个配置类似于RoadWarrior的配置,可是又不同,实际上,这个仍然是net-to-net的配置。

也可以把配置写成这样。

#Left(melin)

connnet-to-net

left=192.168.49.2

leftsubnet=192.168.183.0/24

leftcert=melin.pem

right=192.168.49.3

rightsubnet=192.168.233.0/24

pfs=yes

auto=add

#Right(right)

connnet-to-net

left=192.168.49.2

leftsubnet=192.168.183.0/24

letcert=melin.pem

right=192.168.49.3

rightcert=right.pem

pfs=yes

auto=add

不过,如果是这样的net-to-net的配置,就需要把right.pem也拷贝到melin主机的/etc/ipsec.d/certs目录下。

可以看出来,ipsec.conf的配置是非常灵活的。

下面我们给出使用RoadWarrior和使用证书的配置

#RoadWarrior(right)

connroad

left=192.168.49.3(如果为动态ip,用%defaultroute)

leftcert=right.pem

right=192.168.49.2

rightsubnet=192.168.183.0/24

rightcert=melin.pem

pfs=yes

auto=add

#Host(melin)

connroad

left=192.168.49.2

leftsubnet=192.168.183.0/24

leftcert=melin.pem

right=%any

pfs=yes

auto=add

使用上面的配制后会发现一个问题,在right主机上

right#ping192.168.183.44

right#ping192.168.183.1

是加密通讯

可是

right#ping192.168.49.2(如果是在Internet,这个为主机在Internet上的ip)

却是明文通讯,实际上,我们上面的RoadWarrior配置是让RoadWarrior主机和网关做在的局外通讯,如果要加密和网关的通讯,可以这么写

#RoadWarrior(right)

connroad-net

rightsubnet=192.168.183.0/24

also=road

connroad

left=192.168.49.3(如果为动态ip,用%defaultroute)

leftcert=right.pem

right=192.168.49.2

rightcert=melin.pem

pfs=yes

auto=add

#Host(melin)

connroad-net

leftsubnet=192.168.183.0/24

also=road

connroad

left=192.168.49.2

leftcert=melin.pem

right=%any

pfs=yes

auto=add

在right上分别启动

right#ipsecauto--uproad

right#ipsecauto--uproad-net

另外可以用ipsecautostatus查看连接的状态。

如果想让连接在开机就启动,可以把auto字段改为start。

5.Windows客户端的配置

让windows客户端可以连接上Linux的IPSec网关是很有用的,毕竟桌面还是Windows比较的多。

1)当然是让Openswan的主机运行正常运行起来,我们这里使用,上文最接近的那个road和road-net配置。

同时要注意Windows的IPSec服务已经运行。

2)生成证书

生成新的主机密钥对win.pem和win.key,然后,我们需要把她转化成Windows可以识别的p12格式:

~/ca$opensslpkcs12-export-inw

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1