`
peterwanghao
  • 浏览: 124088 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CentOS6.3下使用OpenSWAN做IPSecVPN的RoadWarrior模式

 
阅读更多

OpenSWan有两种连接方式:

1) Network-To-Network方式

顾名思义,Network-To-Network方式是把两个网络连接成一个虚拟专用网络。当连接建立后,每个子网的主机都可透明地访问远程子网的主机。

要实现此种连接方式,要满足以下两个条件:

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

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

2) Road Warrior方式

当使用Network-To-Network方式时,作为每个子网网关的主机不能像子网内部主机那样透明访问远程子网的主机,也就是说:

如果你是一个使用Laptop的移动用户,经常出差或是在不同的地点办公,你的Laptop将不能用Network-To-Network方式与公司网络进行连接。

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


OpenSWan主要配置文件
/etc/ipsec.secrets 用来保存private RSA keys 和 preshared secrets (PSKs)
/etc/ipsec.conf 配置文件(settings, options, defaults, connections)
OpenSWan主要配置目录
/etc/ipsec.d/cacerts 存放X.509认证证书(根证书-"root certificates")
/etc/ipsec.d/certs 存放X.509客户端证书(X.509 client Certificates)
/etc/ipsec.d/private 存放X.509认证私钥(X.509 Certificate private keys)
/etc/ipsec.d/crls 存放X.509证书撤消列表(X.509 Certificate Revocation Lists)
/etc/ipsec.d/ocspcerts 存放X.500 OCSP证书(Online Certificate Status Protocol certificates)
/etc/ipsec.d/passwd XAUTH密码文件(XAUTH password file)
/etc/ipsec.d/policies 存放Opportunistic Encryption策略组(The Opportunistic Encryption policy groups)


在本例中我实现了Road Warrior 模式,环境描述如下:

VPN client(192.168.136.93) <---> VPN server(双网卡:192.168.136.197 10.1.5.254) <---> 子网客户机(10.1.5.110)


Openswan支持许多不同的认证方式,包括RSA keys、pre-shared keys、XAUTH、x.509证书方式。

在本例中我实现了RSAsig认证和x.509证书认证。下面分别描述如何配置:


RSAsig认证方式配置

生成一个新的RSA密钥对

#ipsec newhostkey --output /etc/ipsec.secert

按left或right格式生成RSA Sig

#ipsec showhostkey --left(或--right)

分别记录好left和right的RSA Sig

分别编辑 client和server的/etc/ipsec.conf文件。

VPN client 的ipsec.conf文件内容:

version	2.0	# conforms to second version of ipsec.conf specification

# basic configuration
config setup
	interfaces=%defaultroute
	dumpdir=/var/run/pluto/
	virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:!10.1.5.0/24,%v6:fd00::/8,%v6:fe80::/10
	oe=off
	protostack=netkey
	plutostderrlog=/var/log/pluto.log

conn %default
	authby=rsasig
	compress=yes

include /etc/ipsec.d/examples/no_oe.conf
conn road
	left=192.168.136.93
	leftnexthop=%defaultroute
	leftid=@left
	leftrsasigkey=0sAQOvt。。。 
	right=192.168.136.197
	rightsubnet=10.1.5.0/24
	rightid=@right
	rightrsasigkey=0sAQ。。。
	type=tunnel
	auto=add
VPN server 的ipsec.conf文件内容:

version	2.0	# conforms to second version of ipsec.conf specification

# basic configuration
config setup
	interfaces=%defaultroute
	dumpdir=/var/run/pluto/
	nat_traversal=yes
	virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:!10.1.5.0/24,%v6:fd00::/8,%v6:fe80::/10
	oe=off
	protostack=netkey
	plutostderrlog=/var/log/pluto.log

conn %default
	authby=rsasig
	compress=yes

include /etc/ipsec.d/examples/no_oe.conf
conn road
	left=192.168.136.197
	leftid=@right
	leftsubnet=10.1.5.0/24
	leftrsasigkey=0sAQOvt。。。
	rightnexthop=%defaultroute
	right=%any
	rightid=@left
	rightrsasigkey=0sAQ。。。
	type=tunnel
	auto=add

配置完毕后需要将两台机器上的ipsec重启

#ipsec setup restart

在VPN client机器上启动建立隧道

#ipsec auto --up road

可通过命令查看是否启动成功

#ipsec setup status

IPsec running - pluto pid: 11101
pluto pid 11101
1 tunnels up

在VPN client机器上可ping 10.1.5.110 应该是成功的。


x.509证书认证方式配置

使用openssl来创建证书

首先需要装上openssl(现在的Linux基本自带,没有的www.openssl.org下一个装上)。
#openssl version
OpenSSL 1.0.0-fips 29 Mar 2010

创建证书的命令

建立CA
#openssl req -x509 -newkey rsa:1024 -out cacert.pem -keyout cakey.pem -days 3650
#cd /etc/pki/CA
#touch index.txt
#echo "01" > serial
#echo "01" > crlnumber

生成吊销列表
#openssl ca -gencrl -out crl.pem -cert cacert.pem -keyfile cakey.pem

生成服务端私钥
#openssl genrsa -des3 -out serverKey.pem 1024
生成请求
#openssl req -new -key serverKey.pem -out serverKey.csr
签发
#openssl ca -in serverKey.csr -out serverKey.crt -cert cacert.pem -keyfile cakey.pem

生成客户端私钥
#openssl genrsa -des3 -out clientKey.pem 1024
生成请求
#openssl req -new -key clientKey.pem -out clientKey.csr
签发
#openssl ca -in clientKey.csr -out clientKey.crt -cert cacert.pem -keyfile cakey.pem

在VPN client 机器上需要做的:

1)拷贝cacert.pem到 /etc/ipsec.d/cacerts

拷贝crl.pem 到 /etc/ipsec.d/crls

拷贝clientKey.crt,serverKey.crt 到 /etc/ipsec.d/certs

拷贝clientKey.pem 到 /etc/ipsec.d/private

2)配置ipsec.secrets文件,在文件尾加上

: RSA /etc/ipsec.d/private/clientKey.pem "生成私钥时的密码"

3)配置ipsec.conf文件

version	2.0	# conforms to second version of ipsec.conf specification

# basic configuration
config setup
	interfaces=%defaultroute
	dumpdir=/var/run/pluto/
	virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:!10.1.5.0/24,%v6:fd00::/8,%v6:fe80::/10
	oe=off
	protostack=netkey
	plutostderrlog=/var/log/pluto.log

conn %default
	authby=rsasig
	compress=yes

include /etc/ipsec.d/examples/no_oe.conf
conn roadwarrior
	left=192.168.136.93
	leftnexthop=%defaultroute
	leftcert=clientKey.crt
	right=192.168.136.197
	rightcert=serverKey.crt
	rightsubnet=10.1.5.0/24
	pfs=yes
	type=tunnel
	auto=add
	rekey=yes

在VPN server 机器上需要做的:

1)拷贝cacert.pem到 /etc/ipsec.d/cacerts

拷贝crl.pem 到 /etc/ipsec.d/crls

拷贝clientKey.crt,serverKey.crt 到 /etc/ipsec.d/certs

拷贝serverKey.pem 到 /etc/ipsec.d/private

2)配置ipsec.secrets文件,在文件尾加上

: RSA /etc/ipsec.d/private/serverKey.pem "生成私钥时的密码"

3)配置ipsec.conf文件

version	2.0	# conforms to second version of ipsec.conf specification

# basic configuration
config setup
	interfaces=%defaultroute
	dumpdir=/var/run/pluto/
	nat_traversal=yes
	virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:!10.1.5.0/24,%v6:fd00::/8,%v6:fe80::/10
	oe=off
	protostack=netkey
	plutostderrlog=/var/log/pluto.log

conn %default
	authby=rsasig
	compress=yes

include /etc/ipsec.d/examples/no_oe.conf
conn roadwarrior
	left=192.168.136.197
	leftsubnet=10.1.5.0/24
	leftcert=serverKey.crt
	right=192.168.136.93
	#right=%any
	rightnexthop=%defaultroute
	rightcert=clientKey.crt
	pfs=yes
	type=tunnel
	auto=add
	rekey=no
配置完毕后需要将两台机器上的ipsec重启

#ipsec setup restart

在VPN client机器上启动建立隧道

#ipsec auto --up roadwarrior

可通过命令查看是否启动成功

#ipsec setup status

IPsec running - pluto pid: 11101
pluto pid 11101
1 tunnels up

在VPN client机器上可ping 10.1.5.110 应该是成功的。


在这里引用了一个文件include /etc/ipsec.d/examples/no_oe.conf 意为关闭Opportunistic Encryption在你不知道它到底做了什么之前,还是关掉它为好。默认情况下此文件不存在,可手工创建。其文件内容如下:

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

遗留的问题

在Road Warrior模式下由于服务端不知道是那个客户端来接入,所以需要right=%any。但在证书认证方式时如果这么配置会出错:no suitable connection for peer '192.168.136.93'。因此必须指定right的IP地址和证书。这样感觉好像不太对,但目前还没找到具体原因。





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics