linux下利用Openswan建立ipsec vpn sito-to-site方式V1.1
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通,这是正常情况!
完成!
五月 9th, 2011 at 21:47
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[...]…
八月 11th, 2011 at 08:00
Awesome website……
[...]the time to read or visit the content or sites we have linked to below the[...]………