suse 11 安装Openswan 做 ipsec *** 服务器
首先感谢google,其次感谢讯哥给我这个学习的机会和给我技术指导,虽然最终由于网络环境不允许没能实施!不过我支持开源
第一部分 ××× 简介及其分类
1 PPTP-Based ××× 
  PPTP (Point to Piont Tunneling Protocol)是由微软发起的可以工作在包括在Windows95 在内的微软多个操作系统上的协议.虽然已经用了相当长的时间,但其仍然存在许多安全漏洞.它主要是基于GRE(Generic Routing Encapsulation) 通过隧道来传送一个ppp 连接Linux 系统上的PPTP实现主要代表是PoPToP. 如果需要用PPTP ,建议用基于IPSEC的L2TP 来代替PPTP,因为它更加安全,并且提供了和PPTP 一样的功能
 2 SSL-Based  ××× (Open***) 
     加密套接字层(SSL) 虚拟专用网(×××) 逐渐流行起来,这种××× 的最大好处在于,仅仅需要一个单独的TCP或者UDP端口随便可以轻易的穿越大多数防火墙进行数据传送.SSL  ××× 是在Linux 系统上最容易实现的就是Open×××.
3 IPSec (IP Security) 是一种比较老的也是采用最为广泛的×××技术.是用IETF开发的一组身份验证和数据加密协议,提供了私有性,完整性,真实性和防重播等安全服务,可以用于IP网络中的数据保密,完整性检查,身份验证,密钥管理等许多方面
   IPSec 在Linux上的实现主要分为两类
     第一类是Frees/wan 项目,该项目在2004 就已经终止了开发,而Free/wan 已经分裂为Openswan 和stringswan 两个项目.他们提供自身的内涵堆栈(Kernel stack),也可以基于新近的内核中所提供的代码
第二类是BSD之上的KAME,它中能使用内涵堆栈.
大多数IPsec 规范本神并不在本地网络中为远程主机提供一个虚拟的IP,不过仍用不少为此而实现的扩展可以解决如此类问题.可以将Microsoft 的支持的L2TP 的产品运行于IPsec 之上
IPSec是面向连接的协议,被许多商业路由器所采用,OpenSwan 是基于自身的XAUTH扩展,也可以作为Cisco,Nortel 以及其他多家×××集成产品的客户端
IPSec 可以在不改变防火墙规则的情况下,在内核级别相当容易的对什么能通过隧道或者什么不能做出安全的处理,其在实现NET-TO-NET 以及host-to-Net 的配置方面也表现出了很大的灵活性.但在灵活也就意味着实现起来的困难,所有IPSec 的成功配置运行相当有难度,此外,尽管已经在对NAT-Travle 的支持方面做了不少的改进,但还是不能较好的工作于一些NAT网关之后
OpenSWan 支持2.0,2.2,2.4 以及2.6 内核,可以运行在不同平台下,OpenSWan是开源项目FreeS/Wan 停止开发后的后继分支项目,OpenSWan 是由三个主要组件构成:
    1 配置工具(ipsec 命令脚本)
    2 Key 管理工具(Pluto)
    3  内核组件(KLIPS/26sec)
     26sec 使用2.6内核内建模块Netkey,用来替代OpenSwan 开发的KLIPS模块,2.4及以下版本内核无Netkey模块,只能使用KLIPS
     如果您用的是2.6.9 以上的内核,推介使用的26sec,2.6.9以下版本的内核NETKEY存在BUG,推介使用KLIPS
第二部分 下载安装openswan 及其配置

zypper install make gcc gmp gmp-devel bison flex libpcap  libpcap-devel build  
  1 #wget  http://www.openswan.org/download/openswan-2.6.34.tar.gz
#tar  xvf   openswan-2.6.34.tar.gz
#make programs 
#make install

2 验证是否安装正确
     #depmod  -a
     #mkdprobe  ipsec 
     #ipsec –version
      如果显示如下,则说明已经加载IPSEC stack 
       Linux Openswan U2.6.34/K2.6.18-164.el5 (netkey)
See `ipsec --copyright' for copyright information.

3.修改/etc/sysctl.conf,开启路由功能


1.执行以下命令:
[root@***1 ~]# sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print $1"= 0"}' >>/etc/sysctl.conf
[root@***1 ~]# cat /etc/sysctl.conf  | grep -v "^#" | grep -v "^$" (执行之后如下图所示)
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

2.编辑/etc/sysctl.conf 开启P转发功能
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。
echo  1  > /proc/sys/net/ipv4/ip_forward 激活IP 转发
echo 0 > /selinux/enforce  禁用selinux


  4 执行以下命令是设置生效sys
     #sysctl –p 


  5 禁用icmp (不解释)
  #vim  disable_send_accept_redirects.sh
       #!/bin/bash
      # Disable send redirects 
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/send_redirects
# Disable accept redirects 
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth3/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/accept_redirects
echo "1" > /proc/sys/net/core/xfrm_larval_drop
    #chmod  +x  disable_send_accept_redirects.sh
    #bash  disable_send_accept_redirects.sh

 6 生成key
     #mv  /dev/random  /dev/random.bak
     #ln -s  /dev/urandom  /dev/random
      #ipsec  newhostkey   --output   /etc/ipsec.secrets
      注: mv 和ln –s  的目的是为了第三步的IPSec 操作节省时间
7.因为使用NETKEY,做以下设置
[root@~]#for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
第三部分,配置OpenSwan
一.   openswan 的连接方式
1) NET-TO-NET 连接方式
   使用该种连接方式,可以将来年改革不同位置的networks 连接成为一个虚拟 专用网络;连接建立后,两端的主机可以同名的互相访问.不过.在两个网关之间以及网关到对方内部网络内主机不能实现透明的互相访问.这也是第二中方式Road Warrior 存在的部分原因
  使用这种方式必须满足以下条件:
   I 两个network 都有自己的Linux 网关,且每个网关都安装了OpenSwan;
   II 每个子网的IP段不能出现叠加
2) Road Warrior 方式
    该种方式用以实现远程主机到本地网络的安全拨入,主要用于经常有员工出差时可以远程安全的访问企业内部的资源
     使用这种方式应该满足以下条件:
    I 一个具有静态IP地址的Linux 网关,安装Openswan 
    II 一个安装了OpenSwan 的Latop,可以是动态的IP地址
     在本地的网关是最好安装tcpdump,以便测试连接
OpenSwan 支持多种认证方式,如RSA,RSK,XAUTH,x.509 等;最常用到的是RSA和x.509
Openswan 做Linux ipsec *** 服务器(二) 
3)linux-to-linux连接方式
I 需要两个公网IP
II 在配置文件里面lift liftid 分别填写自己公网IP

 二  RSA认证方式
    (一)  net-to-net 连接方式
        1 网络环境
         Left network ---left GateWay -----|------ Right Gateway----Right network
        192.168.1.0/24     eth0:192.168.1.1          eth0:172.16.1.1     172.16.1.0
        GW192.168.1.1     eth1:1.1.1.1                 eth1:1.1.1.2          GW:172.16.1.1
                                  GW:1.1.1.1                  GW:1.1.1.2

       除了以上IP地址信息外,还应该为每个网关设置一个用于IPSEC协商中用以却分彼此的标识,可以用网关自身的FWDN,或者其他的名字,如@left等,当然这些名字完全是可以由自己编写
  2  获取rsasigkey,并把获取的rsa 保存
     在Left  Gateway 上获取rsasigkey
     #ipsec showhostkey  --letf
     在Right  Gateway 上获取rsasigkey
     #ipsec showhostkey   --right
  3 在Left GateWay上配置openswan 的主配置文件/etc/ipsec.conf 末尾
添加新定义的连接,并保证left GATEWAY 和right GATEWAY 中配置文件相同
#vim  /etc/ipsec.conf 
 #Add  connection  here
   conn net-to-net
      left=1.1.1.1   #左网关
      # rsakey AQNYfk+V8  #左网关的公钥,也是在上面获取的RSA
     leftrsasigkey=0sAQNYfk+V851n9R3vrwNcZFGRqYyuhjRaRyYKIIE0RvBGjHot6JWS1SQINXPy/i+TKTkte3BY104SkV+fd1GH2kZD6UjLQGq85M6waDVteVlxPBsr8+W2XRJVu9REkqT211y85N4HsCMoNDf/B9bjne11hHKsJQCu/DSgt89MSnmvuIHDggz2rs/00awBrg5SOTbi5P6YDncQNx2iU05TD8JY3QqkWyyqWxrthkV/WRpsFtAvW55B5pO0Ply+5heNcWPKSIExw7nfCzJqeaQV/pPVpZt9Kbl4IsqE1SV6BN9MqHPh2ady+avsn6SfXOImrDyp2DZ2+czJEiVrnntnzmU3mT3Wy3WAoiZOPNcYS3yJQpsz
      leftsubnet=192.168.1.0/24  #左网关所在内网的网段
leftid=@left              #左网标识
      leftnexthop=%defaultroute  #指定做网关的下一条为默认路由
      right=1.1.1.2              #右网关外网IP地址
      # rsakey AQNYfk+V8        #右网关公钥
     rightrsasigkey=0sAQNYfk+V851n9R3vrwNcZFGRqYyuhjRaRyYKIIE0RvBGjHot6JWS1SQINXPy/i+TKTkte3BY104SkV+fd1GH2kZD6UjLQGq85M6waDVteVlxPBsr8+W2XRJVu9REkqT211y85N4HsCMoNDf/B9bjne11hHKsJQCu/DSgt89MSnmvuIHDggz2rs/00awBrg5SOTbi5P6YDncQNx2iU05TD8JY3QqkWyyqWxrthkV/WRpsFtAvW55B5pO0Ply+5heNcWPKSIExw7nfCzJqeaQV/pPVpZt9Kbl4IsqE1SV6BN9MqHPh2ady+avsn6SfXOImrDyp2DZ2+czJEiVrnntnzmU3mT3Wy3WAoiZOPNcYS3yJQpsz
      rightsubnet=172.16.1.0/24   #右网关所在内网的网段
rightid=@right             #右网关的标识
      rightnexthop=%defaultroute  #右网关的下一跳指定为默认路由地址
      auto=start                 #添加这个链接,启动时自动连接
4 .分别在左右网关上配置静态路由
  I  在左网关上配置路由
  [root@***1 ~]# route add default gw 1.1.1.1
  [root@***1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth1
0.0.0.0         1.1.1.1         0.0.0.0         UG    0      0        0 eth1)
   左网关代理服务器上打开转发功能 (不是必须步骤)
  #iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
   #iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
  #iptables  -t nat  -A  POSTROUTING  -o  eth1  -s   192.168.1.0/24  -d ! 172.16.1.0/24 -j MASQUERADE
  II  在右网关上配置静态路由
 # route add default gw 1.1.1.2 (配置静态路由)
   右网关代理服务器上打开转发功能 (不是必须步骤)
#iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
 #iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

 #iptables –t  nat  -A  POSTROUTING –o  eth1  -s 172.16.1.0/24   -d  ! 192.168.1.0/24  -j  MASQUERADE
5 启动ipsec并启动连接
  #service  ipsec  start
  #ipsec  verify
 Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                [OK]
Linux Openswan U2.6.34/K2.6.18-164.el5 (netkey)
Checking for IPsec support in kernel                               [OK]
 SAref kernel support                                               [N/A]
 NETKEY:  Testing XFRM related proc values                      [OK]
          [OK]
          [OK]
Checking that pluto is running                                   [OK]
 Pluto listening for IKE on udp 500                                 [OK]
 Pluto listening for NAT-T on udp 4500                             [OK]
Two or more interfaces found, checking IP forwarding           [OK]
Checking NAT and MASQUERADEing                              
Checking for 'ip' command                                           [OK]
Checking /bin/sh is not /bin/dash                                 [OK]
Checking for 'iptables' command                               [OK]
Opportunistic Encryption Support                              [DISABLED]
如果报错  

#echo 1 > /proc/sys/net/core/xfrm_larval_drop
#echo "0" > /selinux/enforce
 #ipsec  auto  --up  net-to-net
    如果最后的输出行中出现 IPsec SA established,说明连接成功

  6  测试连接
   在左侧的内网中的clinet ping
     ping 172.16.1.2
在左侧网关上执行下列命令
[root@***1 ~]# tcpdump  -i  eth1 -n  host  1.1.1.2 and  1.1.1.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
02:48:02.314486 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x7fe938c5,seq=0x2), length 132
02:48:02.314610 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xb6d5bcab,seq=0x2), length 132
02:48:03.314088 arp who-has 1.1.1.2 tell 1.1.1.1
02:48:03.314313 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x7fe938c5,seq=0x3), length 132
02:48:03.314240 arp reply 1.1.1.2 is-at 00:0c:29:c5:73:84
02:48:03.323337 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xb6d5bcab,seq=0x3), length 132
02:48:04.314352 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x7fe938c5,seq=0x4), length 132
02:48:04.314571 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xb6d5bcab,seq=0x4), length 132
02:48:05.314394 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x7fe938c5,seq=0x5), length 132
02:48:05.314811 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xb6d5bcab,seq=0x5), length 132
02:48:06.314225 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x7fe938c5,seq=0x6), length 132
02:48:06.314417 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xb6d5bcab,seq=0x6), length 132
02:48:07.314113 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x7fe938c5,seq=0x7), length 132
02:48:07.314376 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xb6d5bcab,seq=0x7), length 132
02:48:08.315048 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x7fe938c5,seq=0x8), length 132
02:48:08.315229 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xb6d5bcab,seq=0x8), length 132

注: 这种方式只能建立net-to-net 间的连接,并不能确保gateway-gateway 之间的连接或者gateway-subnet 之间的连接.如果你要使用此种连接,比如一方的网关还是一个文件服务器时,那么还需要额外建立其他的连接

在右侧网关上执行下列命令 
[root@***2 ~]# tcpdump -i eth1 -n host 1.1.1.1 and 1.1.1.2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
20:44:00.381116 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x15), length 132
20:44:00.381219 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x15), length 132
20:44:01.380913 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x16), length 132
20:44:01.381036 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x16), length 132
20:44:02.379796 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x17), length 132
20:44:02.379904 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x17), length 132
20:44:03.379677 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x18), length 132
20:44:03.379788 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x18), length 132
20:44:04.379618 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x19), length 132
20:44:04.379720 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x19), length 132
20:44:05.379586 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x1a), length 132
20:44:05.379670 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x1a), length 132
20:44:06.379578 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x1b), length 132
20:44:06.379699 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x1b), length 132
20:44:07.380595 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x1c), length 132
20:44:07.380682 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x1c), length 132
20:44:08.381601 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x1d), length 132
20:44:08.381731 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x1d), length 132
20:44:09.382392 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x1e), length 132
20:44:09.382527 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x1e), length 132
20:44:10.382362 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x65358b3b,seq=0x1f), length 132
20:44:10.382454 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0xfe80dead,seq=0x1f), length 132

       (二)  Road Warrior
  1  网络环境
     Left network---Left GateWay------ laptop(Linux系统)
   192.168.1.0/24     eth0:192.168.1.1             eth1:1.1.1.2
                             eth1:1.1.1.1                     GW 1.1.1.2
                             GW:1.1.1.1

2 同样需要获取对方的公钥,laptop 为右,配置的方法和net-to-net 类似

3 在road 主配置文件中末尾添加如下
  #vim   /etc/ipsec.conf
     conn road
      left=1.1.1.1
leftid=@***server
      leftsubnet=192.168.1.0/24
      # rsakey AQOebBxva
     leftrsasigkey=0sAQOebBxvanOwfLdEF3xuAt8M1JaY0OxtQq/B5x93pZrI6h9U4wWxNpWwOh6kcm1K8ylqtd8upzcbL/PaU+OKmIA4MwXgAextJ+jGtNfU13eKHENerSgt5QkmCJe86j2hq2UvSFO6q/v4tWI/SA2zt2r9UIT5J7oKfkyGesY7dUS/Oc/bFN84y72yZVyJ9TETaASY9OYOY0A6wHXsgG5ULyQMMLVfHViNNZLjJklQDd/+vb7etAOAt4QAp/U6dE4/L+5Fe95baTdsnSxISCVlXZiOr2v8szQ6lLikPlBDAKpSdpaEsDunvTVajbdl0L25ilCgt4h6sPeqFd8uZCTyn19FIRNNOBceSQFc5VW8JtiBEbjt

#     leftnexthop=%defaultroute
      right=%any
rightid=@laptop
      # rsakey AQOebBxva
     rightrsasigkey=0sAQOuGoWpIPQ6o8iEPtgsiyhfpeH4lJTV2xfyJUxxwAomU4zaYq+16JSZm7TmhXQVN2dkOKN5wBNeb7GfR8iGwkpxRA0kb9dCEEqRICxmInVSQUvRBlfPtpqWUZK51q8XpydFmL3o73/bPFAsaOoKhLqh05nedRnkWH3Lm4B/0xmazrmx7ErxVGwcILazKcIQKlLEC8jfC2JPBgKc7Wo2cMoMExwy+JlDeer+r67gFarrb1izZLFUKF5KycJ6eioILoHstASMCA3fWugC9l/UfitUukYqLvdYwmrCJMKgRi8iK9JcmGbaAtRgYxVU3YhK/yrI9ZRebqUgdUw2mnLaU1dUy7MF8RvabVCIBLdrlFQsr+Cj
      #rightnexthop=%defaultroute
      auto=start
4 在laptop 上主配置文件中添加以下内容
   #vim  /etc/ipsec.conf 
     conn road
      left=%defaultroute
      # rsakey AQNYfk+V8
     leftrsasigkey=0sAQNYfk+V851n9R3vrwNcZFGRqYyuhjRaRyYKIIE0RvBGjHot6JWS1SQINXPy/i+TKTkte3BY104SkV+fd1GH2kZD6UjLQGq85M6waDVteVlxPBsr8+W2XRJVu9REkqT211y85N4HsCMoNDf/B9bjne11hHKsJQCu/DSgt89MSnmvuIHDggz2rs/00awBrg5SOTbi5P6YDncQNx2iU05TD8JY3QqkWyyqWxrthkV/WRpsFtAvW55B5pO0Ply+5heNcWPKSIExw7nfCzJqeaQV/pPVpZt9Kbl4IsqE1SV6BN9MqHPh2ady+avsn6SfXOImrDyp2DZ2+czJEiVrnntnzmU3mT3Wy3WAoiZOPNcYS3yJQpsz
      right=1.1.1.1
#      leftsubnet=192.168.1.0/24
leftid=@laptop
#      leftnexthop=%defaultroute
      rightsubnet=192.168.1.0/24
rightid=@***server
      # rsakey AQNYfk+V8
     rightrsasigkey=0sAQNYfk+V851n9R3vrwNcZFGRqYyuhjRaRyYKIIE0RvBGjHot6JWS1SQINXPy/i+TKTkte3BY104SkV+fd1GH2kZD6UjLQGq85M6waDVteVlxPBsr8+W2XRJVu9REkqT211y85N4HsCMoNDf/B9bjne11hHKsJQCu/DSgt89MSnmvuIHDggz2rs/00awBrg5SOTbi5P6YDncQNx2iU05TD8JY3QqkWyyqWxrthkV/WRpsFtAvW55B5pO0Ply+5heNcWPKSIExw7nfCzJqeaQV/pPVpZt9Kbl4IsqE1SV6BN9MqHPh2ady+avsn6SfXOImrDyp2DZ2+czJEiVrnntnzmU3mT3Wy3WAoiZOPNcYS3yJQpsz
      auto=start
   5  启动ipsec 并进
   #service  ipsec  start
   在Road  Worrior 连接要在laptop 端进行
   #ipsec auto  --up road
 6  测试连接
   在laptop 端,ping 远程网关后的人一节点进行测试,注意不要ping网关本身
     19:15:20.978391 IP 1.1.1.2 > 1.1.1.1: ESP(spi=0x0cbb5cbf,seq=0x313), length 132
19:15:20.979030 IP 1.1.1.1 > 1.1.1.2: ESP(spi=0x46fa942f,seq=0x313), length 132

《三》 linux-to-linux

***01(192.168.18.101)<======> ***02(192.168.18.102)
1 安装ipsec配置和上面一样
2 因为使用NETKEY,做以下设置
[root@~]#for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
3 产生密钥信息
在×××01上执行:
[root@***01~]#echo >/etc/ipsec.secrets  (清空历史记录)
[root@***01~]# ipsec newhostkey --output /etc/ipsec.secrets  (生成新的密钥)
[root@***01~]#ipsec showhostkey --left (查看密钥)
#rsakey AQPBUTC0e
leftrsasigkey=0sAQPBUTC0e1TZm8peaWQE6k1...…(省略)
在×××02上执行:
[root@***02~]#echo >/etc/ipsec.secrets (清空历史记录)
[root@***02~]# ipsec newhostkey --output /etc/ipsec.secrets (生成新的密钥)
[root@***02~]#ipsec showhostkey --right (查看密钥)
#rsakey AQOhzexXb
rightrsasigkey=0sAQOhzexXbUwp4vDfr/8...…(省略)
4 编辑配置文件
编辑(在任何地方编辑都行)配置文件ipsec.conf,内容如下:
#/etc/ipsec.conf - Openswan IPsec configuration file
version2
configsetup
protostack=netkey

conn%default
authby=rsasig

#conn sample
#  # Left security gateway, subnet behind it, nexthop toward right.
#  left=10.0.0.1
#  leftsubnet=172.16.0.0/24
#  leftnexthop=10.22.33.44
#  # Right security gateway, subnet behind it, nexthop toward left.
#  right=10.12.12.1
#  rightsubnet=192.168.0.0/24
#  rightnexthop=10.101.102.103
#  # To authorize this connection, but not actually start it, 
#  # at startup, uncomment this.
#  #auto=add
conn linux-to-linux
        left=10.11.241.155
        leftid=10.11.241.155
        leftrsasigkey=0sAQOv0Wpv2i43/Q5NCYvf3olGxTStAsN145RQ/EVkIb/sR0bRQn2Gru4a5Q29MQ/Gs/dmiFLzvAYbfJEWBSAnxXnmBns6TAJb67b7LmxwoxA0WNSrJ7Yh0G2eNsYc
+nNi6qq7661ZfYm8HikaYCRCyED76YW2251PHvS/vFL9ZMOnr8SclTPOCMWRChE07GH8cFWaLbbs1gbQ1LMFdB5ZVWuGfH1+tj6blWlMM1UGmbsxNGIzU7tiTkDeXQUVRnZV5Yra3fs
ZW780FGpGyiIF51L5YbNIa0b1UQD3NC6wNKUbe/NW3bvpfkkFzAaYOy/Ie9a6y+VHwLTfGLmaqQkHBGq4gAwZpjY6lq9oNgFin080ymyv 

         right=10.11.241.154
         rightid=10.11.241.154
         rightrsasigkey=0sAQNpzY/ex+Nqhk+wuFS+E7up+B2mlmpY2bVeuGSS2M73uK0GYI7wfwuchMSqjdLZHec46T2F56x5MrlH/IWtiCOyPYgal/ZXAbouRitajxmLq9UFrPtnQVsXqtL
AIJaSLzjYRrSR6Q+1saxa74OoMhC49sYcH+bh64kRcDwchUSKfL5yxCdKEwro65GslklrvFEXFw9QMfm7epvXLrywGTZdIzN00VPKG38Zxb0g9NQo5KoYxjiI/eErTYvwvxpTd3MLbQMEOp
3gSrWYBtQ4imvE3Zkfw3jHE7jab/YrDo2tv/0I2kUmQ5DWpWzs7aAM6Zq3sgU26fGYf47py4oT/ApEc7oiHtjYDMvwiouL61s4Hcaz
          auto=start 
5 部署配置文件
将上述配置文件放到×××01和×××02的/etc/ipsec.conf位置
6 启用、验证
6.1 验证
[root@***01~]#ipsec verify
Checkingyour system to see if IPsec got installed and started correctly:
Versioncheck and ipsec on-path [OK]
LinuxOpenswan U2.6.38/K3.4.6-2.10-desktop (netkey)
Checkingfor IPsec support in kernel [OK]
SArefkernel support [N/A]
NETKEY: Testing XFRM related proc values [OK]
[OK]
[OK]
Checkingthat pluto is running [OK]
Plutolistening for IKE on udp 500 [OK]
Plutolistening for NAT-T on udp 4500 [FAILED]
Checkingfor 'ip' command [OK]
Checking/bin/sh is not /bin/dash [OK]
Checkingfor 'iptables' command [OK]
OpportunisticEncryption Support [DISABLED]

错误1:
SAref kernel support [N/A]
/etc/xl2tpd/xl2tpd.conf 这个文件里

1.[global]
2.ipsec saref = no
Linux Openswan U2.6.38/K2.6.18-308.el5 (netkey)
以netkey方式运行不支持局域网多个nat客户;
开启SAref kernel support后以klips方式运行支持

错误2:
Two or more interfaces found, checking IP forwarding
修改ip_forward,只要 cat /proc/sys/net/ipv4/ip_forward 返回结果是1就没事
echo 1 >/proc/sys/net/ipv4/ip_forward  (开启ip转发)

错误3:
Please enable /proc/sys/net/core/xfrm_larval_drop
echo 1 > /proc/sys/net/core/xfrm_larval_drop

错误4
# ipsec verify
Checking NAT and MASQUERADEing                               [N/A]

Testing against enforced SElinux mode                        [FAILED]
错误5
SAref kernel support                                        [N/A]
 NETKEY:  Testing XFRM related proc values                   [FAILED]

  Please disable /proc/sys/net/ipv4/conf/*/send_redirects
  or NETKEY will cause the sending of bogus ICMP redirects!

  5 禁用icmp 解决错误
  #vim  disable_send_accept_redirects.sh
       #!/bin/bash
      # Disable send redirects 
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/send_redirects
# Disable accept redirects 
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth3/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/accept_redirects
echo "1" > /proc/sys/net/core/xfrm_larval_drop
    #chmod  +x  disable_send_accept_redirects.sh
    #bash  disable_send_accept_redirects.sh
[root@***2 openswan-2.6.34]# setenforce 0 (关闭selinux防火墙)
6.2启用IPSec服务
两边执行 ipsec  auto  --up  linux-to-linux
 如果最后的输出行中出现 IPsec SA established,说明连接成功

  测试连接
   在左侧的内网中的clinet ping
     ping 1.1.1.2
在左侧网关上执行下列命令
  #tcpdump  -I  eth1 –n  host  1.1.1.1 and  1.1.1.2
在×××01上执行:
[root@***01~]# service ipsec start
在×××02上执行:
[root@***02~]#service ipsec start
6.3查看状态
[root@***01~]#service ipsec status
[root@***01~]#ipsec auto status
图片的最后一行可以看出通道已建立!!
6.4抓包验证
                   [root@***01~]#ping 192.168.18.101
                   [root@***02~]#tcpdump -p esp