技术、情感、摄影、原创、分享

开源Linux VPN解决方案 - OpenSWan安装配置指南

上一篇 / 下一篇  2007-03-04 02:51:46 / 天气: 阴雨 / 心情: 平静 / 个人分类:Linux

本文遵循创作共用版权协议,转载请保留原文链接和原文作者
本文链接:http://9ng.cn/1/viewspace_8112.html
本文作者:九尾银狐

一、OpenSWan简介
    OpenSWan是Linux下IPsec的最佳实现方式,其功能强大,最大程度地保证了数据传输中的安全性、完整性问题。
    OpenSWan支持2.0、2.2、2.4以及2.6内核,可以运行在不同的系统平台下,包括X86、X86_64、IA64、MIPS以及ARM。
    OpenSWan是开源项目FreeS/WAN停止开发后的后继分支项目,由三个主要组件构成:
      配置工具(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。
    更多详情请参见OpenSWan项目主页:http://www.openswan.org

二、系统环境
   本文使用VMWare建立五台虚拟Linux主机来进行试验。
   操作系统:CentOS 4.4
   内核版本:2.6.9-42
   主机网络参数设置: 如无特殊说明,子网掩码均为255.255.255.0

  主机名    网卡eth0   网卡eth1   默认网关    用途
LServer192.168.1.103192.168.2.1192.168.1.1Left网关
RServer192.168.1.104192.168.3.1192.168.1.1Right网关
LClient192.168.1.113192.168.2.2192.168.2.1Left客户机
RClient192.168.1.114192.168.3.2192.168.3.1Right客户机
Laptop192.168.1.105192.168.1.1Laptop客户机

三、安装设置操作系统
   推荐使用CentOS 4.4,基于RedHat Enterprise AS 4.4安全加强的免费可升级独立分发版本Linux操作系统,安装过程不再详述。需要注意的是,安装时请确保选中开发软件包,以及libgmp软件包(gmp、gmp-devel)、gawk、flex、bison。
   以下步骤只需在LServer、RServer及Laptop上执行。
   系统按前述参数安装完毕后在LServer、RServer执行以下命令:
sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print $1"= 0"}' >> /etc/sysctl.conf
   编辑/etc/sysctl.conf
vi /etc/sysctl.conf
   将下面两项:  
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
   改为: 
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
   执行以下命令使设置生效:
sysctl -p
   在LServer上执行以下命令设置NAT:
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.2.0/24 -d ! 192.168.3.0/24 -j MASQUERADE
   在RServer上执行以下命令设置NAT:
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.3.0/24 -d ! 192.168.2.0/24 -j MASQUERADE

四、安装OpenSWan
   1. 下载源码包
cd ~
wgethttp://www.openswan.org/download/openswan-2.4.7.tar.gz
   2. 解压源码包
tar zxvf openswan-2.4.7.tar.gz
   3. 安装UserLand
cd openswan-2.4.7
make programs
make install
   4. 安装KLIPSIPstack (可选,如果用26sec则不需安装)
      1)安装NAT-Traversal内核补丁
export KERNELSRC=/usr/src/kernels/2.6.9-42.EL-i686
make nattpatch > /usr/src/openswan-ipsec-natt.patch
cd $KERNELSRC
cat /usr/src/openswan-ipsec-natt.patch | patch -p1 -s
make clean
make oldconfig
        当执行make oldconfig命令时,由于添加了Nat-t补丁,会出现以下提示:
IPSEC NAT-Traversal (KLIPS compatible) (IPSEC_NAT_TRAVERSAL) [N/y/?] (NEW)
        按y键确认后继续完成make oldconfig命令
        继续执行以下命令重新编译安装内核
make
make modules_install
make install
        编译安装完成新内核后请重启系统,以启用新内核
      2)安装KLIPS
cd ~/openswan-2.4.7
make KERNELSRC=/lib/modules/`uname -r`/build module minstall
depmod -a
        加载KLIPS模块前必须先卸载NETKEY模块
rmmod xfrmuser af_key esp4 ah4 ipcomp xfrm4_tunnel
        执行以下命令加载KLIPS
modprobe ipsec

   5. 验证安装
      执行下面的命令验证OpenSWan是否正确安装
ipsec --version
      如果程序正确安装,此命令将显示以下三种可能结果:
      如果已加载的IPsec stack是NETKEY,显示如下
Linux Openswan U2.4.7/K2.6.9-42.EL (netkey)
See `ipsec --copyright' for copyright information.
      如果已加载的IPsec stack是KLIPS,显示如下
Linux Openswan 2.4.7 (klips)
See `ipsec --copyright' for copyright information.
      如果没有加载任何IPsec stack,显示如下
Linux Openswan U2.4.7/K(no kernel code presently loaded)
See `ipsec --copyright' for copyright information.

   6. 特别说明
      如果系统中NETKEY、KLIPS模块同时存在,OpenSWan按以下规则加载其一:
        通常情况下,OpenSWan启动时使用已经加载的模块;
        如果NETKEY与KLIPS两者都已经加载,OpenSWan不能启动;
        如果未加载任何模块,OpenSWan首选加载NETKEY;
        如果NETKEY加载失败,OpenSWan加载KLIPS;
        如果两者都不能正常加载,OpenSWan启动失败。

五、配置OpenSWan
   1. OpenSWan主要配置文件
/etc/ipsec.secrets                 用来保存private RSA keys 和 preshared secrets (PSKs)
/etc/ipsec.conf                    配置文件(settings, options, defaults, connections)
   2. 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)
   3. OpenSWan连接方式
      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就可以连接到远程的网络了。
   4. OpenSWan的认证方式
      Openswan支持许多不同的认证方式,包括RSA keys、pre-shared keys、XAUTH、x.509证书方式
   5. 使用RSA数字签名(RSASIG)认证方式配制OpenSWan
      1) 在LServer、RServer及Laptop上生成新的hostkey
ipsec newhostkey --output /etc/ipsec.secrets

      继续以下2-4步骤配置LServer-RServer之间的Network-To-Network方式链接:
      2) 在LServer上执行下面的命令获得leftrsasigkey(即LServer的公钥Pulic Key)
ipsec showhostkey --left
         此命令的输出格式如下所示:
 # RSA 2192 bits   LServer.FoxBB.Com   Sat Mar  3 15:45:00 2007
 leftrsasigkey=0sAQOBIJFmj......
      3) 在RServer上执行下面的命令获得rightrsasigkey(即RServer的公钥 Pulic Key)
ipsec showhostkey --right
         此命令的输出格式如下所示:
 # RSA 2192 bits   RServer.FoxBB.Com   Sat Mar  3 15:51:56 2007
 rightrsasigkey=0sAQNZZZjj......
      4) 在LServer及RServer上编辑/etc/ipsec.conf
vi /etc/ipsec.conf
         在最后添加如下内容(leftrsasigkey及rightrsasigkey行换成前面2,3步所取得的值)
conn net-to-net
    left=192.168.1.103             # LServer外网IP地址
    leftsubnet=192.168.2.0/24      # LServer内网IP段
   leftid=@LServer.FoxBB.Com      # LServer的标识
    leftrsasigkey=0sAQOBIJFmj...   # LServer的公钥
    leftnexthop=%defaultroute      # LServer的下一跳指定为默认路由地址
    right=192.168.1.104            # RServer外网IP地址
    rightsubnet=192.168.3.0/24     # RServer内网IP段
   rightid=@RServer.FoxBB.Com     # RServer的标识
    rightrsasigkey=0sAQNZZZjj...   # Rserver的公钥
    rightnexthop=%defaultroute     # RServer的下一跳指定为默认路由地址
    auto=add                       # 添加这个链接,但是在OpenSWan启动时不自动连接

     继续以下5-10步骤配置LServer-Laptop之间的Road Warrior方式:
     5) 在LapTop上执行下面的命令获得leftrsasigkey(即Laptop的公钥Pulic Key)
ipsec showhostkey --left
        此命令的输出格式如下所示:
 # RSA 2192 bits   Laptop.FoxBB.Com   Sun Mar 11 09:14:25 2007
 leftrsasigkey=0sAQOa8tu4E......
     6) 在LServer上执行下面的命令获得rightrsasigkey(即LServer的公钥 Pulic Key) 
ipsec showhostkey --right
        此命令的输出格式如下所示:
 # RSA 2192 bits   LServer.FoxBB.Com   Sat Mar  3 15:45:00 2007
 rightrsasigkey=0sAQOBIJFmj......
     7) 在Laptop上编辑/etc/ipsec.conf
vi /etc/ipsec.conf
        在最后添加如下内容(leftrsasigkey及rightrsasigkey行换成前面5,6步所取得的值)
conn road
    left=%defaultroute             # 通过默认路由获取Laptop的IP
   leftid=@Laptop.FoxBB.Com       # Laptop的标识
    leftrsasigkey=0sAQOa8tu4E...   # Laptop的公钥
    right=192.168.1.103            # LServer外网IP
    rightsubnet=192.168.2.0/24     # LServer内网IP段
   rightid=@LServer.FoxBB.Com     # LServer的标识
    rightrsasigkey=0sAQOBIJFmj...  # LServer的公钥
    auto=add                       # 添加这个链接,但是在OpenSWan启动时不自动连接
     8) 在LServer上执行下面的命令获得leftrsasigkey(即LServer的公钥Pulic Key)
ipsec showhostkey --left
        此命令的输出格式如下所示:
 # RSA 2192 bits   LServer.FoxBB.Com   Sat Mar  3 15:45:00 2007
 leftrsasigkey=0sAQOBIJFmj......
     9) 在Laptop上执行下面的命令获得rightrsasigkey(即Laptop的公钥 Pulic Key) 
ipsec showhostkey --right
        此命令的输出格式如下所示:
 # RSA 2192 bits   Laptop.FoxBB.Com   Sun Mar 11 09:14:25 2007
 rightrsasigkey=0sAQOa8tu4E......
     10)在LServer上编辑/etc/ipsec.conf
vi /etc/ipsec.conf
        在最后添加如下内容(leftrsasigkey及rightrsasigkey行换成前面8,9步所取得的值)

conn road
    left=192.168.1.103             # LServer外网IP
   leftid=@LServer.FoxBB.Com      # LServer的标识
    leftsubnet=192.168.2.0/24      # LServer内网IP段
    leftrsasigkey=0sAQOBIJFmj...   # LServer的公钥
    rightnexthop=%defaultroute     # correct in many situations
    right=%any                     # Laptop的外网IP,可能使用动态IP,所以用%any代替任意IP
   rightid=@Laptop.FoxBB.Com      # Laptop的标识
    rightrsasigkey=0sAQOa8tu4E...  # Laptop的公钥
    auto=add                       # 添加这个链接,但是在OpenSWan启动时不自动连接

        注意:在Network-To-Network方式下,两边网关/etc/ipsec.conf中的链接配置是一样的,即left和right是相同的,而在Road Warrior方式Laptop和网关上的链接配置是不同的,即left指正在配置的本地主机,right指与本地主机对应的远程主机。

     11)在LServer、RServer及Laptop上执行下面的命令启动OpenSWan
service ipsec start
     12)在LServer及RServer上执行下面的命令验证OpenSWan是否正常运行
ipsec verify
        如果OpenSWan正常运行,将会得到类似下面的输出
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                              [OK]
Linux Openswan U2.4.7/K2.6.9-42.EL (netkey)
Checking for IPsec support in kernel                         [OK]
NETKEY detected, testing for disabled ICMP send_redirects    [OK]
NETKEY detected, testing for disabled ICMP accept_redirects  [OK]
Checking for RSA private key (/etc/ipsec.secrets)            [OK]
Checking that pluto is running                               [OK]
Two or more interfaces found, checking IP forwarding         [OK]
Checking NAT and MASQUERADEing                             
Checking for 'ip' command                                    [OK]
Checking for 'iptables' command                              [OK]
Opportunistic Encryption Support                             [DISABLED]
     13)在LServer或RServer上执行下面的命令进行LServer-RServer之间的Network-To-Network连接
ipsec auto --up net-to-net
        将会得到类似下面的输出(如果最后的输出行中出现IPsec SA established,说明连接成功 )
104 "net-to-net" #1: STATE_MAIN_I1: initiate
003 "net-to-net" #1: received Vendor ID payload [Openswan (this version) 2.4.7  PLUTO_SENDS_VENDORID PLUTO_USES_KEYRR]
003 "net-to-net" #1: received Vendor ID payload [Dead Peer Detection]
003 "net-to-net" #1: received Vendor ID payload [RFC 3947] method set to=110
106 "net-to-net" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "net-to-net" #1: NAT-Traversal: Result using RFC 3947 (NAT-Traversal): no NAT detected
108 "net-to-net" #1: STATE_MAIN_I3: sent MI3, expecting MR3
004 "net-to-net" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_RSA_SIG cipher=oakley_3des_cbc_192 prf=oakley_md5 group=modp1536}
117 "net-to-net" #2: STATE_QUICK_I1: initiate
004 "net-to-net" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0xa329d030 <0xae29b36c xfrm=AES_0-HMAC_SHA1 NATD=none DPD=none}
     14)在Laptop上执行下面的命令进行Laptop-LServer之间的Road Warrior连接
ipsec auto --up road
        将会得到类似下面的输出(如果最后的输出行中出现IPsec SA established,说明连接成功)
104 "road" #1: STATE_MAIN_I1: initiate
003 "road" #1: received Vendor ID payload [Openswan (this version) 2.4.7  PLUTO_SENDS_VENDORID PLUTO_USES_KEYRR]
003 "road" #1: received Vendor ID payload [Dead Peer Detection]
003 "road" #1: received Vendor ID payload [RFC 3947] method set to=110
106 "road" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "road" #1: NAT-Traversal: Result using RFC 3947 (NAT-Traversal): no NAT detected
108 "road" #1: STATE_MAIN_I3: sent MI3, expecting MR3
004 "road" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_RSA_SIG cipher=oakley_3des_cbc_192 prf=oakley_md5 group=modp1536}
117 "road" #2: STATE_QUICK_I1: initiate
004 "road" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0x070f9aae <0xe8598b10 xfrm=AES_0-HMAC_SHA1 NATD=none DPD=none}
     15)测试IPSEC链接
        在LClient上执行
ping 192.168.3.2
        或在RClient上执行
ping 192.168.2.2
        在ping命令执行期间,在LServer或RServer上执行
tcpdump -i eth0
        如果LClient和RClient可以互相ping通,tcpdump有类似下面的输出,说明Network-To-Network方式IPSEC已经成功连接
13:28:09.931263 IP 192.168.1.104 > 192.168.1.103: ESP(spi=0xa329d030,seq=0x126)
13:28:09.935244 IP 192.168.1.103 > 192.168.1.104: ESP(spi=0xae29b36c,seq=0x126)
13:28:10.818461 IP 192.168.1.104 > 192.168.1.103: ESP(spi=0xa329d030,seq=0x127)
13:28:10.823472 IP 192.168.1.103 > 192.168.1.104: ESP(spi=0xae29b36c,seq=0x127)
     16)设置自动连接
        测试通过后,可以把连接配置中
auto=add 
        更改为:
auto=start
        这样当OpenSWan启动时就可自动进行连接
 
    
(待续)


TAG: linux Linux OpenSWan VPN 虚拟专用网

引用 删除 硕鼠   /   2008-08-01 17:06:38
评100
引用 删除 Guest   /   2008-04-30 17:46:29
-5
引用 删除 duoduo1205   /   2008-02-07 20:19:50
对了,我在你那篇文章中下的centos 5
这个系统下怎么配置安装openswan? ,我用make programs ,make install,出了很多warning,而且ipsec verify,也不可以用,说没有ipsec这个命令。
引用 删除 duoduo1205   /   2008-02-07 20:10:30
你好,我是一名计算机的学生,由于要做host to host的ipsec VPN, 在网上看了你的这文章,很受教,但是由于我用的是你在: LAMP应用架构部署指南II--Linux安装及初始环境设置 这篇文章中的centos 系统,所以好像很难配置,能不能请你帮帮我?我在linux的配置问题上有很多不懂。我现在只是简单的安装了centos 5 的系统(带图像界面的),为了实现ipsec还要做什么?急啊。谢谢
引用 删除 duoduo1205   /   2008-02-07 20:03:30
5
引用 删除 Guest   /   2007-12-10 19:26:54
-5
引用 删除 Guest   /   2007-10-15 15:34:52
-5
引用 删除 Guest   /   2007-06-15 11:35:19
1
引用 删除 黑皮妞   /   2007-05-08 15:57:04
完全看不懂!这是甲骨文!
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar