用OpenSWAN做Linux下的IPSecVPN的详细配置指南分析解析 联系客服

发布时间 : 星期日 文章用OpenSWAN做Linux下的IPSecVPN的详细配置指南分析解析更新完毕开始阅读9a8f22a227fff705cc1755270722192e44365871

用OpenSWAN做Linux下的IPSec VPN的详细配置指南 1.概述

2.安装Openswan 3.认证和配置

3.1 RSAsig认证方式的配置 3.2 x.509证书认证的配置 3.3 RoadWarrior模式的配置 5.Windows客户端的配置

---------------------------------------------------------------------------------------------------------------------- 1.概述

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

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

IPSec在Linux上支持主要有两个主要的分类,一为FreeS/WAN,现在已经停止开发,其分裂为两个项目,Openswan与 Strongswan。其可以用自身的IPsec内核堆栈(Kernel stack),称为KLIPS,也可以用2.6内核中的堆栈代码(下面我们称其为26sec),可以说是非常的灵活。还有就是来自BSD世界的KAME。 KAME只能用内核堆栈。

IPSec差不多是最老的VPN标准了,她的依然很安全,当然是在配置好以后。言下之意,她的配置比较麻烦。本文下面将做说明。

2)SSL-Based VPN 其主要代表有 OpenVPN

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

3)PPTP-Based VPN 有(PoPTop)

PoPTop可以说是PPTP在Linux下的实现。不过,IPSec上跑L2TP更安全。

2.安装Openswan

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

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

#apt-get install openswan

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

用起来非常的方便。 你也可以用

#ipsec verify来检验你的安装

3.认证和配置

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

Openswan支持许多不同的认证方式,包括RSA keys、pre-shared keys或x.509证书方式。RSA Signature比较简单,我先介绍下所要使用的命令

生成一个新的RSA密钥对

#ipsec newhostkey --output /etc/ipsec.secert 按left或right格式生成RSA Sig #ipsec showhostkey --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

#ipsec newhostkey --output /etc/ipsec.secert #ipsec showhostkey --right >> /etc/ipsec.conf #vi /etc/ipsec.conf //编辑ipsec.conf配置文件

#scp /etc/ipsec.conf root@right_GW_ipaddress:/etc/ipsec.conf //把ipsec.conf拷贝到right网关,目的是为了让right的到left的rsasig。 //right

#ipsec newhostkey --output /etc/ipsec.secert #ipsec showhostkey --right >> /etc/ipsec.conf

#vi /etc/ipsec.conf

#scp /etc/ipsec.conf root@left_GW_ipadress:/etc/ipsec.conf 然后分别从前启动ipsec服务

#ipsec setup restart //这个因为你的系统不同点不同

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

version 2.0

config setup

interfaces=Tfaultroute nat_traversal=yes

conn Tfault authby=rsasig compress=yes

#关掉 Opportunistic Encryption

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

conn net-to-net left=192.168.49.2

leftsubnet=192.168.183.0/24 leftid=@melin

leftnexthop=Tfaultroute right=192.168.49.3

rightsubnet=192.168.233.0/24 rightid=@right

rightnexthop=Tfaultroute

# RSA 2192 bits melin Mon May 29 03:42:49 2006 leftrsasigkey=0sAQ...(leftrsasigkey值,省略) # RSA 2192 bits right Wed May 31 22:11:59 2006 rightrsasigkey=0sAQ... auto=add

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

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

比如在RA上可以

$ping 192.168.233.44

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

#tcpdump -i eth0

可以看到这样的包

IP 192.168.233.44 > 192.168.183.44:icmp 64:echo request seq 10 IP 192.168.49.2 > 192.168.49.3: ESP(spi=0xeb73b78b,sed=0xa) IP 192.168.49.3 > 192.168.49.2: ESP(spi=0x1601e0bd,sed=0xb) 可以看到两个网关已经用ESP在通讯,说明成功。

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

#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.183.0/24 -j MASQERADE 把改为

#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.183.0/24 -d ! 192.168.233.0/24 -j MASQERADE

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

另外,这一行

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

conn block auto=ignore

conn private auto=ignore

conn private-or-clear auto=ignore

conn clear-or-private auto=ignore

conn clear auto=ignore

conn packetdefault auto=ignore

3.2 x.509证书认证的配置