may be soft:DC5.0上的vpn(ipsec openswan)

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 09:05:32
一、概述
863一个项目需要配合软测中心的人测试vpn,在北京的大家都没有配置过,既然大家都不会,那让谁去都可以,所以我来吧。
软测中心需要测的是DC5.0自带的ipsec来搭建,而且863测试中还需要测试“基于浏览器的图形化的vpn配置工具”,我想这应该是说的webmin吧。
二、原理
打电话问mlsx ,他说他当时测试vpn是用的openvpn,看网上关于openvpn在linux上搭建的文章,都来自hyphen wang 的一篇文章“[原]使用OpenVPN搭建Linux下的VPN服务 ”,但是openvpn是和ipsec不兼容的“※注意,OpenVPN是基于SSL/TLS协议的,所以是不兼容IPSec和PPTP。 ”,而863这个项目是测试系统自带的ipsec的,可以配合openswan来做。在网上搜索了一下,有一些,但是不太清楚,反正我照着做没有成功,mlsx建议我照着openswap的文档来作,来个fan3838 首创(起码是RedFlag上首创)。
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更安全。
ipsec、openswan和webmin系统都自带了,安装第三张光盘就全伙了。先将webmin抛在一遍,先从配置文件来配置vpn。
vpn的配置分为两种,一种是net-to-net模式,就是两个网关之间搭建vpn通道,通过这两个网关将两个子网链接到一起。另一种是 RoadWarrior模式,一个客户段和一个网关通过vpn链接,访问网关后面的子网。(据说还有一种两台机器建立vpn通道,主要是为了数据加密,不过这种有点浪费vpn的功能。)
三、配置
在此用的是RoadWarrior模式,三台机器搭建,其中在subnet里面的机器,可以是window。在此使用linux。
服务端和客户端:RedFlag DC 5.0 SP2.
服务端和客户端都需要安装ipsec、openswan,如果需要图形配置,都需要安装webmin。
|
|                gateway          |
|       |-----------------------|Internet|
|-------|10.16.81.1 / 172.16.81.191|----------|
| subnet |--------------------------|          |   |-------------|
|                                             |---|172.16.81.203|
|                                                 |-------------|
------------
10.16.81.10
------------
服务端:lvs191/eth0/172.16.81.191/eth1/10.16.81.1/
客户端:lvs203/eth0/172.16.81.203
内网客户端:test/eth0/10.16.81.10
配置非常简单,参照openswan的wiki 的配置部分,很简单的。
为什么配置openswan?不是说使用ipsec吗?
我大致理解为:openswan是使用的ipsec,也可以说是通过配置openswan来使用ipsec实现vpn功能。
1、一个从来没有配置过openswan的系统上,第一步是需要生成一个rsasigkey,这个key在后面配置过程中,互相交换,来实现加密解密的效果。生成的key文件保存在/etc/ipsec. secrets文件中。
ipsec newhostkey - - output /etc/ipsec. secrets
此步骤在服务器和客户端上都需要做。
2、知道两台机器的key是多少。
[ root@lvs203 ~] # ipsec showhostkey - - left
# RSA 2192 bits lvs203 Wed Aug 29 16: 44: 25 2007
leftrsasigkey= 0sAQOUtHZ/OVBwaQYshGoXp7G2cxzQYdWnM5d7GLSYHcMI9iY
JbytbuSbt7Swu5WZCJkZgUIPF7MMMc2vTdC/C86VhaB74wV18iplwcCIQHRxOUbPBAXzUE
6X+ UC1VQ4tBsKc5GasqgUKJC4aCGs0yEp7YQWNNhn0hgrw7w7SiCcI7Q8B0mJ3+ D7rxktU
dBlWxt0t6tqY2Ti19H1W0JOWyux2i2e0LSRLYOdXWAZCoQQoqNG5mpIztPsgw4zLSiEkMA
03rQ/iFP2OT3+ n/V8RpLzJqPbXm1VPTMMXgZIxnXVfnBBK4afKSoVAtE8DoYY37dwRZW3T
DaJR7qDEg+ SV0S881ZValX2+ f5WfLpHkM35WjPsA7
[ root@lvs191 ~] # ipsec showhostkey - - right
# RSA 2192 bits lvs191 Wed Aug 29 15: 43: 26 2007
rightrsasigkey= 0sAQOXo537kK8X6ROr3n1H7R9nJk6BsbcrEkeIonF5dGPCnz
LdjbNjQJVjr/h00ATWc2h3ECl6Gc3TEE5uJtmCSXYK7BZPn6Drzm6V4vMQOiTuL35xYNk/
8wIVSeon+ M2Pt+ T2itkj07/SXu6VSsLj0YewqH2CXJYgwG1mO2Jzc03h93pQXvz3NBLDdK
YM9zhXYuuk0fAC4UZdfULpm3qUm3XxQDnTjD2hngZnJXS7058JIsx/+ Um9W+ jTYOrlNeaV
UTEqWxZ4B7nTEvPRsfi7U7qBELJNJ+ 6fDU3Lb26V7veJNDgVqg6PkYboS1Wtfhp8cS7FHh
786oMVuVrslrWjN43PQooLPkSNRlcHg1fMgqhZzotj
命令中的left和right可以大致理解为:left代表本地机器,right代表远程机器。因为你配置的时候,需要两边都配置一遍,所以肯定存在left和right之分。
3、知道两侧的key之后,修改配置文件/etc/ipsec.conf皆可
服务器端配置文件:
Java代码
[ root@lvs191 ~] #  cat /etc/ipsec . conf
# /etc/ipsec. conf - Openswan IPsec configuration file
# RCSID $Id: ipsec. conf. in , v 1. 13 2004/03/24 04: 14: 39 ken Exp $
# This file: /usr/share/doc/openswan/ipsec. conf- sample
#
# Manual: ipsec. conf. 5
version 2. 0 # conforms to second version of ipsec. conf specification
# basic configuration
config setup
interfaces=%defaultroute
nat_traversal=yes
# Debug- logging controls: "none" for ( almost) none, "all" for lots.
# klipsdebug= none
# plutodebug= "control parsing"
# Add connections here
conn vpn   (此vpn链接的名称,后面启动通道会用)
auto=add   (ipsec服务启动不自动建立通道,手工)
left=172.16.81.191   (本地机器ip)
leftid=@lvs191.local   (本地机器id,一个标示,可以瞎编)
leftrsasigkey=0sAQOXo537kK8X6ROr3n1H7R9nJk6BsbcrEkeIonF5dGPCnzL
djbNjQJVjr/h00ATWc2h3ECl6Gc3TEE5uJtmCSXYK7BZPn6Drzm6V4vMQOiTuL35xYNk/8
wIVSeon+M2Pt+T2itkj07/SXu6VSsLj0YewqH2CXJYgwG1mO2Jzc03h93pQXvz3NBLDdKY
M9zhXYuuk0fAC4UZdfULpm3qUm3XxQDnTjD2hngZnJXS7058JIsx/+Um9W+jTYOrlNeaVU
TEqWxZ4B7nTEvPRsfi7U7qBELJNJ+6fDU3Lb26V7veJNDgVqg6PkYboS1Wtfhp8cS7FHh7
86oMVuVrslrWjN43PQooLPkSNRlcHg1fMgqhZzotj   (本地机器的key)
leftsubnet=10.16.81.0/24   (本地机器-网关-的subnet)
right=172.16.81.203   (远程机器ip)
rightid=@lvs203.local   (远程机器id,一个标示,可以瞎编)
rightrsasigkey=0sAQOUtHZ/OVBwaQYshGoXp7G2cxzQYdWnM5d7GLSYHcMI9i
YJbytbuSbt7Swu5WZCJkZgUIPF7MMMc2vTdC/C86VhaB74wV18iplwcCIQHRxOUbPBAXzU
E6X+UC1VQ4tBsKc5GasqgUKJC4aCGs0yEp7YQWNNhn0hgrw7w7SiCcI7Q8B0mJ3+D7rxkt
UdBlWxt0t6tqY2Ti19H1W0JOWyux2i2e0LSRLYOdXWAZCoQQoqNG5mpIztPsgw4zLSiEkM
A03rQ/iFP2OT3+n/V8RpLzJqPbXm1VPTMMXgZIxnXVfnBBK4afKSoVAtE8DoYY37dwRZW3
TDaJR7qDEg+SV0S881ZValX2+f5WfLpHkM35WjPsA7   (远程机器的key)
include /etc/ipsec.d/examples/no_oe.conf
客户端配置文件:
Java代码
[ root@lvs203 ~] #  cat /etc/ipsec. conf
# /etc/ipsec. conf - Openswan IPsec configuration file
# RCSID $Id: ipsec. conf. in , v 1. 13 2004/03/24 04: 14: 39 ken Exp $
# This file: /usr/share/doc/openswan/ipsec. conf- sample
#
# Manual: ipsec. conf. 5
version 2. 0 # conforms to second version of ipsec. conf specification
# basic configuration
config setup
interfaces=%defaultroute
# Debug- logging controls: "none" for ( almost) none, "all" for lots.
# klipsdebug= none
# plutodebug= "control parsing"
# Add connections here
conn vpn
auto=add
left=172.16.81.203
leftid=@lvs203.local
leftrsasigkey=0sAQOUtHZ/OVBwaQYshGoXp7G2cxzQYdWnM5d7GLSYHcMI9iY
JbytbuSbt7Swu5WZCJkZgUIPF7MMMc2vTdC/C86VhaB74wV18iplwcCIQHRxOUbPBAXzUE
6X+UC1VQ4tBsKc5GasqgUKJC4aCGs0yEp7YQWNNhn0hgrw7w7SiCcI7Q8B0mJ3+D7rxktU
dBlWxt0t6tqY2Ti19H1W0JOWyux2i2e0LSRLYOdXWAZCoQQoqNG5mpIztPsgw4zLSiEkMA
03rQ/iFP2OT3+n/V8RpLzJqPbXm1VPTMMXgZIxnXVfnBBK4afKSoVAtE8DoYY37dwRZW3T
DaJR7qDEg+SV0S881ZValX2+f5WfLpHkM35WjPsA7
right=172.16.81.191
rightid=@lvs191.local
rightrsasigkey=0sAQOXo537kK8X6ROr3n1H7R9nJk6BsbcrEkeIonF5dGPCnz
LdjbNjQJVjr/h00ATWc2h3ECl6Gc3TEE5uJtmCSXYK7BZPn6Drzm6V4vMQOiTuL35xYNk/
8wIVSeon+M2Pt+T2itkj07/SXu6VSsLj0YewqH2CXJYgwG1mO2Jzc03h93pQXvz3NBLDdK
YM9zhXYuuk0fAC4UZdfULpm3qUm3XxQDnTjD2hngZnJXS7058JIsx/+Um9W+jTYOrlNeaV
UTEqWxZ4B7nTEvPRsfi7U7qBELJNJ+6fDU3Lb26V7veJNDgVqg6PkYboS1Wtfhp8cS7FHh
786oMVuVrslrWjN43PQooLPkSNRlcHg1fMgqhZzotj
rightsubnet=10.16.81.0/24
include /etc/ipsec.d/examples/no_oe.conf
由于一个是客户端,一个是服务器(网关),所以两侧的配置稍微不同。
另外,include /etc/ipsec.d/examples/no_oe.conf这一行意为关闭Opportunistic Encryption在你不知道她到底做了什么之前,还是关掉她为好。如果不添加这一行,你会发现后面一启动ipsec服务,机器就跟外面不通了。停掉 ipsec服务,就又好了。还在疑惑并测试中…………
4、启动服务测试
上面的配置就这么简单,只要启动ipsec服务,开始vpn通道即可。
在两台机器上都启动ipsec服务
Java代码
[root@lvs203 ~]# /etc/init. d/ipsec start
ipsec_setup: Starting Openswan IPsec 2.3.0...
ipsec_setup: insmod /lib/modules/2.6.9-42.7AX/kernel/net/key/af_key.ko
ipsec_setup: insmod /lib/modules/2.6.9-42.7AX/kernel/net/ipv4/xfrm4_tunnel.ko
启动命令也可使用:
Java代码
ipsec setup start
效果是一样的。服务启动之后,在客户端机器上开启vpn通道(为什么在客户端机器上而不是服务端机器上?因为服务器默认是一直开着的,你拿着客户端在外地出差呢,所以你客户端发起建立vpn通道的请求就可以了。让然,在服务端开启vpn通道也是一样的)
Java代码
[ root@lvs203 ~] #  ipsec auto -- up vpn
104 "vpn" #1: STATE_MAIN_I1: initiate
003 "vpn" #1: received Vendor ID payload [ Dead Peer Detection]
106 "vpn" #1: STATE_MAIN_I2: sent MI2, expecting MR2
108 "vpn" #1: STATE_MAIN_I3: sent MI3, expecting MR3
004 "vpn" #1: STATE_MAIN_I4: ISAKMP SA established
117 "vpn" #2: STATE_QUICK_I1: initiate
004 "vpn" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP= > 0xe34cdf14 < 0x19843e73}
出现“IPsec SA established ”说明通道建好了,可以用下面命令来查看
Java代码
[ root@lvs203 ~] #  setkey - D
172. 16. 81. 203 172. 16. 81. 191
esp mode= tunnel spi= 3813465876( 0xe34cdf14) reqid= 16385( 0x00004001)
E: aes- cbc cf07bc48 34ecea0e 156d6f8b 2c6484de
A: hmac- sha1 2a1b8a32 ddffaa7b 1614b1ac 5c157115 00b82761
seq= 0x00000000 replay= 64 flags= 0x00000000 state= mature
created: Sep 3 15: 08: 55 2007 current: Sep 3 16: 24: 02 2007
diff: 4507( s) hard: 0( s) soft: 0( s)
last: Sep 3 15: 54: 55 2007 hard: 0( s) soft: 0( s)
current: 456( bytes) hard: 0( bytes) soft: 0( bytes)
allocated: 3 hard: 0 soft: 0
sadb_seq= 1 pid= 12219 refcnt= 0
172. 16. 81. 191 172. 16. 81. 203
esp mode= tunnel spi= 428097139( 0x19843e73) reqid= 16385( 0x00004001)
E: aes- cbc c457004b 76ac0a1e a65cb838 23c753c6
A: hmac- sha1 54242942 88232d65 b01897f0 266c145f 3a770b98
seq= 0x00000000 replay= 64 flags= 0x00000000 state= mature
created: Sep 3 15: 08: 55 2007 current: Sep 3 16: 24: 02 2007
diff: 4507( s) hard: 0( s) soft: 0( s)
last: Sep 3 15: 54: 55 2007 hard: 0( s) soft: 0( s)
current: 168( bytes) hard: 0( bytes) soft: 0( bytes)
allocated: 2 hard: 0 soft: 0
sadb_seq= 0 pid= 12219 refcnt= 0
说明双向通道建立好了,有“esp”代表是加密通道。现在看看两台机器的路由信息吧
Java代码
[ root@lvs203 ~] #  route - n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.16.81.0 172.16.81.191 255.255.255.0 UG 0 0 0 eth0
172. 16. 80. 0 0. 0. 0. 0 255. 255. 248. 0 U 0 0 0 eth0
0. 0. 0. 0 172. 16. 80. 1 0. 0. 0. 0 UG 0 0 0 eth0
Java代码
[ root@lvs191 ~] #  route - n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.81.203 172.16.81.203 255.255.255.255 UGH 0 0 0 eth0
10. 16. 81. 0 0. 0. 0. 0 255. 255. 255. 0 U 0 0 0 eth1
172. 16. 80. 0 0. 0. 0. 0 255. 255. 248. 0 U 0 0 0 eth0
0. 0. 0. 0 172. 16. 81. 223 0. 0. 0. 0 UG 0 0 0 eth0
其中第一条是ipsec建立的路由,这时候你用ifconfig是看不见ipsec0这个设备的。没关系。此时可以在lvs203上面ping通内网中的10.16.81.10了。
补充一点,其实有的文章说可以用ipsec  look这个命令来查看建立的通道信息,呐,我这看到的是这个结果:
Java代码
[ root@lvs191 ~] #  ipsec look
lvs191 Mon Sep 3 16: 29: 32 CST 2007
cat: /proc / net/ipsec_spigrp: No such file or directory
cat: /proc / net/ipsec_eroute: No such file or directory
egrep: /proc / net/ipsec_tncfg: No such file or directory
sort: open failed: /proc / net/ipsec_spi: No such file or directory
Destination Gateway Genmask Flags MSS Window irtt Iface
0. 0. 0. 0 172. 16. 81. 223 0. 0. 0. 0 UG 0 0 0 eth0
172. 16. 80. 0 0. 0. 0. 0 255. 255. 248. 0 U 0 0 0 eth0
172. 16. 81. 203 172. 16. 81. 203 255. 255. 255. 255 UGH 0 0 0 eth0
我这看到的结果有好几个文件没有找到。前面介绍openswan的时候提到“Openswan可以用自身的IPsec内核堆栈(Kernel stack),称为KLIPS,也可以用2.6内核中的堆栈代码(下面我们称其为26sec)”,我这里用的是2.6内核堆栈代码,而不是 openswan自身的ipsec内核堆栈,所以有很多没有找到的文件。很正常。
另外也可以用“ipsec whack --status”命令来查看vpn通道信息:
Java代码
[ root@lvs191 ~] #  ipsec whack -- status
000 interface lo/lo : : 1
000 interface lo/lo 127. 0. 0. 1
000 interface lo/lo 127. 0. 0. 1
000 interface eth0/eth0 172. 16. 81. 191
000 interface eth0/eth0 172. 16. 81. 191
000 interface eth1/eth1 10. 16. 81. 10
000 interface eth1/eth1 10. 16. 81. 10
000 %myid = ( none)
000 debug none
000
000 algorithm ESP encrypt: id= 2, name = ESP_DES, ivlen= 8, keysizemin= 64, keysizemax= 64
000 algorithm ESP encrypt: id= 3, name = ESP_3DES, ivlen= 8, keysizemin= 192, keysizemax= 192
000 algorithm ESP encrypt: id= 7, name = ESP_BLOWFISH, ivlen= 8, keysizemin= 40, keysizemax= 448
000 algorithm ESP encrypt: id= 11, name = ESP_NULL, ivlen= 0, keysizemin= 0, keysizemax= 0
000 algorithm ESP encrypt: id= 12, name = ESP_AES, ivlen= 8, keysizemin= 128, keysizemax= 256
000 algorithm ESP encrypt: id= 252, name = ESP_SERPENT, ivlen= 8, keysizemin= 128, keysizemax= 256
000 algorithm ESP encrypt: id= 253, name = ESP_TWOFISH, ivlen= 8, keysizemin= 128, keysizemax= 256
000 algorithm ESP auth attr: id= 1, name = AUTH_ALGORITHM_HMAC_MD5, keysizemin= 128, keysizemax= 128
000 algorithm ESP auth attr: id= 2, name = AUTH_ALGORITHM_HMAC_SHA1, keysizemin= 160, keysizemax= 160
000 algorithm ESP auth attr: id= 5, name = AUTH_ALGORITHM_HMAC_SHA2_256, keysizemin= 256, keysizemax= 256
000 algorithm ESP auth attr: id= 251, name = ( null) , keysizemin= 0, keysizemax= 0
000
000 algorithm IKE encrypt: id= 7, name = OAKLEY_AES_CBC, blocksize= 16, keydeflen= 128
000 algorithm IKE encrypt: id= 5, name = OAKLEY_3DES_CBC, blocksize= 8, keydeflen= 192
000 algorithm IKE hash: id= 2, name = OAKLEY_SHA1, hashsize= 20
000 algorithm IKE hash: id= 1, name = OAKLEY_MD5, hashsize= 16
000 algorithm IKE dh group: id= 2, name = OAKLEY_GROUP_MODP1024, bits= 1024
000 algorithm IKE dh group: id= 5, name = OAKLEY_GROUP_MODP1536, bits= 1536
000 algorithm IKE dh group: id= 14, name = OAKLEY_GROUP_MODP2048, bits= 2048
000 algorithm IKE dh group: id= 15, name = OAKLEY_GROUP_MODP3072, bits= 3072
000 algorithm IKE dh group: id= 16, name = OAKLEY_GROUP_MODP4096, bits= 4096
000 algorithm IKE dh group: id= 17, name = OAKLEY_GROUP_MODP6144, bits= 6144
000 algorithm IKE dh group: id= 18, name = OAKLEY_GROUP_MODP8192, bits= 8192
000
000 stats db_ops. c: {curr_cnt, total_cnt, maxsz} : context= { 0, 0, 0} trans= { 0, 0, 0} attrs= { 0, 0, 0}
000
000 "vpn" : 10. 16. 81. 0/24= = = 172. 16. 81. 191[ @ lvs191. local ] . . . 172. 16. 81. 203[ @ lvs203. local ] ; erouted; eroute owner: #6
000 "vpn" : srcip= unset; dstip= unset
000 "vpn" : ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
000 "vpn" : policy: RSASIG+ ENCRYPT+ TUNNEL+ PFS; prio: 24, 32; interface: eth0;
000 "vpn" : newest ISAKMP SA: #7; newest IPsec SA: #6;
000 "vpn" : IKE algorithm newest: 3DES_CBC_192- MD5- MODP1536
000
000 #7: "vpn" STATE_MAIN_R3 (sent MR3, ISAKMP SA established);in 734s;; lastdpd=-1s(seq in:0 out:0)
000 #6: "vpn" STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 23122s; newest IPSEC; eroute owner
000 #6: "vpn" esp.19843e73@172.16.81.203 esp.e34cdf14@172.16.81.191 tun.0@172.16.81.203 tun.0@172.16.81.191
000
最后三行是vpn通道建立之后才可以看到的,其中包括esp的一些信息。
5、验证加密性
说验证加密性,其实很难,你怎么知道已经加密了?最好的方法是将网卡设为混杂模式,然后用sniffer抓包,然后分析等等等等。
我这用的是最简单的方法,在服务器(网关)上面用tcpdump抓一些包,能看到“ESP”标志,就说明是加密的了(为什么“esp”代表加密?因为openswan文档里面就是这么说的。暂时信他一次)。
Java代码
[ root@lvs191 ~] #  tcpdump - i eth0 host 172 . 16 . 81 . 203
14:06:37.647549 IP lvs203 > lvs191: ESP(spi=0xd6ee9626,seq=0xf)
14:06:37.647549 IP lvs203 > lvs191.localdomain: icmp 64: echo request seq 14
14:06:37.647628 IP lvs191 > lvs203: ESP(spi=0x1a6113ee,seq=0xf)
14:06:37.975837 arp who-has 172.16.80.181 (44:30:4e:50:49:38) tell 172.16.80.21
14:06:38.186666 arp who-has 172.16.80.1 tell 172.16.81.201
14:06:38.647335 IP lvs203 > lvs191: ESP(spi=0xd6ee9626,seq=0x10)
14:06:38.647335 IP lvs203 > lvs191.localdomain: icmp 64: echo request seq 15
14:06:38.647398 IP lvs191 > lvs203: ESP(spi=0x1a6113ee,seq=0x10)
14:06:38.747596 arp who-has 172.16.81.29 (44:30:4e:50:49:38) tell 172.16.80.21
14:08:52.778417 IP lvs203 > lvs191: ESP(spi=0xd6ee9626,seq=0x9a)
14:08:52.778417 IP lvs203.32779 > lvs191.localdomain.ssh: P 1884:1932(48) ack 2958 win 263 
14:08:52.778790 IP lvs191 > lvs203: ESP(spi=0x1a6113ee,seq=0x89)
14:08:52.778979 IP lvs191 > lvs203: ESP(spi=0x1a6113ee,seq=0x8a)
14:08:52.779154 IP lvs191 > lvs203: ESP(spi=0x1a6113ee,seq=0x8b)
14:08:52.779187 IP lvs203 > lvs191: ESP(spi=0xd6ee9626,seq=0x9b)
14:08:52.779187 IP lvs203.32779 > lvs191.localdomain.ssh: . ack 3006 win 263 
四、结尾
通过网关可以访问内网的机器了,并且也可以验证是加密的,那暂告一段落。另外最好在服务端和客户端都打开路由转发,"echo 1 > /proc/sys/net/ipv4/ip_forward",否则发现访问不了内网啊,最开始测试没有打开,让我跑了很多弯路,而且都怀疑 ipsec+openswan有问题呢。
五、补充
前面我好像提到要用webmin呢,后来不想多说了,如果谁想用webmin的话,可以保持这几个配置文件到你想要的状态,然后打开webmin--网络--IPsec VPN Configuration,很显然已经看到结果了。
其实webmin配置vpn是很简单的,webmin启动的时候会发现系统没有key,首先让你新建key,后面可以添加vpn了。只是有一点需要注意,/etc/ipsec.d/examples/no_oe.conf这一行是需要手工添加的,反正我没有找到webmin里面能添加这一行的地方。而且前面我也提到了,没有这一行,会发现”启动ipsec服务,网络机不通了“。还在研究中。