linux下利用Openswan建立ipsec vpn sito-to-site方式V1.1

四月 28th, 2010 Posted in Ubuntu, VPN | 阅读次数: 1,336 次

Author:gaojinbo
Time:2010-4-26
主题:linux下利用Openswan建立ipsec vpn sito-to-site方式

一、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,2.6.9以下版本内核的NETKEY存在Bug,推荐使用KLIPS。
    更多详情请参见OpenSWan项目主页:http://www.openswan.org

 

二、环境:
   操作系统(server):Ubuntu 8.04
   内核版本:2.6.24-27-server
   客户端(windows XP)
   主机网络参数设置: 如无特殊说明,子网掩码均为255.255.255.0
   主机名      网卡eth0   网卡eth1    默认网关     用途
   LServer    192.168.1.10 10.10.10.1  192.168.1.1 Left网关
   RServer    192.168.1.20 10.10.20.1  192.168.1.1 Right网关
   LClient    10.10.10.2               10.10.10.1  Left客户机
   RClient    10.10.20.2               10.10.20.1  Right客户机

1.下载地址:
http://www.openswan.org/download/openswan-2.6.25.tar.gz

 

2.安装开发环境和依赖包
apt-get dist-upgrade
apt-get install build-essential libgmp3-dev bison flex  linux-headers-server
reboot

 

3.解压编译安装
tar xvzf openswan-2.6.25.tar.gz
cd openswan-2.6.25
make KERNELSRC=/usr/src/linux-headers-2.6.24-27-server/ programs module
make KERNELSRC=/usr/src/linux-headers-2.6.24-27-server/ install minstall
make programs
make install

 

4.验证是否正确安装
depmod -a
modprobe ipsec
ipsec –version
如果已加载的IPsec stack是KLIPS,显示如下
Linux Openswan U2.6.25/K2.6.24-27-server (netkey)

 

三、配置
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就可以连接到远程的网络了。

1.生成key
rm /dev/random
ln -s /dev/urandom /dev/random
ipsec newhostkey –output /etc/ipsec.secrets
注意:rm和ln -s的目的是为了第三步的ipsec操作节省时间

 

2.修改内核参数,防火墙
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  

可以将nat设置添加到/etc/rc.local里面,让开机时自动执行
在LServer上执行以下命令设置NAT:
iptables -t nat -A POSTROUTING -o eth0 -s 10.10.10.0/24 -d \! 10.10.20.0/24 -j MASQUERADE
在RServer上执行以下命令设置NAT:
iptables -t nat -A POSTROUTING -o eth0 -s 10.10.20.0/24 -d \! 10.10.10.0/24 -j MASQUERADE

 

3.禁用icmp
vi /root/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/eth1/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/eth1/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/accept_redirects

chmod +x /root/disable_send_accept_redirects.sh
vi /etc/rc.local
/root/disable_send_accept_redirects.sh

 

4.获取rsasigkey
在LServer上执行以下命令:
ipsec showhostkey –left
在RServer上执行以下命令:
ipsec showhostkey –right

 

5.修改ipsec主配置文件
vi /etc/ipsec.conf         在最后添加如下内容(leftrsasigkey及rightrsasigkey行换成前面取得的值)
conn net-to-net
    left=192.168.1.10              # LServer外网IP地址
    leftsubnet=10.10.10.0/24       # LServer内网IP段   
    leftid=@LServer.gaojinbo.com   # LServer的标识
    leftrsasigkey=0sAQOBIJFmj…   # LServer的公钥
    leftnexthop=%defaultroute      # LServer的下一跳指定为默认路由地址
    right=192.168.1.20             # RServer外网IP地址
    rightsubnet=100.10.20.0/24      # RServer内网IP段   
    rightid=@RServer.gaojinbo.com  # RServer的标识
    rightrsasigkey=0sAQNZZZjj…   # Rserver的公钥
    rightnexthop=%defaultroute     # RServer的下一跳指定为默认路由地址
    auto=start                     # 添加这个链接,启动时自动连接

 

6.启动ipsec,验证
1)启动
/etc/init.d/ipsec start

 

2)验证
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.25/K2.6.24-27-server (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]
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 for ‘iptables’ command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]

 

3)在LServer和RServer上手动执行连接
ipsec auto –up net-to-net
如果最后的输出行中出现 IPsec SA established,说明连接成功

 

4)测试IPSEC链接
在LClient上执行 ping 10.10.20.2      
或在RClient上执行 ping 10.10.10.2       
在ping命令执行期间,在LServer或RServer上执行 tcpdump -i eth0 -n host 192.168.1.10 and 192.168.1.20      
如果LClient和RClient可以互相ping通,tcpdump有类似下面的输出,说明Network-To-Network方式 IPSEC已经成功连接
12:34:32.478903 IP 192.168.1.10 > 192.168.1.20: ESP(spi=0xf225b168,seq=0x7f)
12:34:32.480050 IP 192.168.1.20 > 192.168.1.10: ESP(spi=0x845109ca,seq=0x7f)
12:34:33.450660 IP 192.168.1.10 > 192.168.1.20: ESP(spi=0xf225b168,seq=0×80)
12:34:33.450938 IP 192.168.1.20 > 192.168.1.10: ESP(spi=0x845109ca,seq=0×80)
12:34:34.449218 IP 192.168.1.10 > 192.168.1.20: ESP(spi=0xf225b168,seq=0×81)
12:34:34.451034 IP 192.168.1.20 > 192.168.1.10: ESP(spi=0x845109ca,seq=0×81)

如果停止任意一台Server,ping操作将失败

 

注意:
在LServer和RServer上相互ping eth1的ip是不通的,但LClient和RClient可以互相ping通,这是正常情况!

完成!

相关日志:

Tags:

2 Responses to “linux下利用Openswan建立ipsec vpn sito-to-site方式V1.1”

  1. Yeast Infection Medication Says:

    Recommended Sites…

    [...]below you’ll find my recommended links page http://www.yeastinfectiontreatmentcure.net/links/ with some good sites that I think you should definitely visit[...]…


  2. engagement rings Says:

    Awesome website……

    [...]the time to read or visit the content or sites we have linked to below the[...]………


留下您的脚印