Debian下用OpenSwan搭建IPSEC VPN
应用场景
由于各机房或者机柜之间要通过内网进行数据交互,因此需要将内网打通,Ipsec VPN支持net-net的方式,可以实现这个功能 。
软件介绍
在linux下,可以用openswan来实现IPSEC VPN的环境搭建,从目前使用情况来看,效果较好,可以实现linux服务器之间,linux服务器与H3c U200设备之间的IPSEC VPN隧道创建。由于服务器的处理能力较强,VPN通道的传输能力比较强,可满足大量数据的传输要求。
软件安装:
由于debian强大的包管理器,使安装变得非常简单,使用以下一条命令就可以完成安装。
apt-get install openswan
询问是否使用 opportunistic encryption 选NO(默认)
询问是否创建公、私钥对,选NO(需移动选择)
确定后很快即完成了安装。
软件配置:
生成密钥:
使用以下命令生成服务器的密钥
ipsec newhostkey --output /etc/ipsec.secrets
如果此操作执行了很久没有完成,这可能是由于程序的一个BUG导致执行失败了,可以按以下的方式解决。
Ctrl+c结束掉程序,修改以下文件
/usr/lib/ipsec/newhostkey 第60行,
ipsec rsasigkey $verbose $host $bits 改成以下这样 ipsec rsasigkey $verbose --random /dev/urandom $host $bits
然后再次执行,即可。
修改系统配置
拷贝/etc/ipsec.d/examples/sysctl.conf 中的所有内容到追加到/etc/sysctl.conf
cat /etc/ipsec.d/examples/sysctl.conf >>/etc/sysctl.conf
然后,
#sysctl –f
检查安装:
执行以下命令,检查输出结果
debian#ipsec verify Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.4.12/K2.6.26-2-686-bigmem (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] Checking for 'ip' command [OK] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED]
如果输出以上内容,恭喜你,安装是正确的。
生成私钥:
生成两边的密钥
ipsec showhostkey --left ipsec showhostkey --right
其实两个key的内容是一样的, 只是分left和right,left和right是相对的。
增加网络配置:
配置文件是:/etc/ipsec.conf
初始配置文件如下:
######################################################
# /etc/ipsec.conf - Openswan IPsec configuration file # RCSID $Id: ipsec.conf.in,v 1.15.2.6 2006-10-19 03:49:46 paul 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 # plutodebug / klipsdebug = "all", "none" or a combation from below: # "raw crypt parsing emitting control klips pfkey natt x509 private" # eg: plutodebug="control parsing" # # ONLY enable plutodebug=all or klipsdebug=all if you are a developer !! # # NAT-TRAVERSAL support, see README.NAT-Traversal nat_traversal=yes # virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12 # # enable this if you see "failed to find any available worker" nhelpers=0 # Add connections here # sample VPN connections, see /etc/ipsec.d/examples/ #Disable Opportunistic Encryption include /etc/ipsec.d/examples/no_oe.conf ###############################################################
所需要增加网络配置如下:
将以下内容加到# Add connections here下面
conn net1-to-net0 net1-to-net0是连接名 left=192.168.1.16 本端服务器的外网IP leftsubnet=192.168.30.0/24 本端的内网段 leftrsasigkey=0sAQNzT87y8jDxQpASTxAO4EKvLe8tvc4B/6DLgyTd23uzLf9Knx2EhiJxNHa/qUJ0tMVomcqAURfrQbGyYEEOmrGWZflnfWcWOQtaN/MUbf9/KWDFS0rbM8qb67eRi94+0kiYUes4jG0taw+0dGSe1F2UVZWiQY20EvuG78KDSLyCoNXbrEYTIi3g5kkVIZuQb3CjIlyFywl3DF07U4BIEHIqNomOlm86C+ZZg/vBKMbKPe+JpUMAYsWc/Rn9IT/RozCGPoi1gLLeBeLsOySVv8cm0/TKzIcrtEyn5yUPhliImWOZLRYvEc4JrOYeLA/+U294IOvZMe44c6OBUCYu4pRDsV0FIYOvQXlUkcmQ4F1qMRpp 这一行是刚刚生成的私钥。 right=192.168.1.241 对端服务器的公网IP rightsubnet=10.10.20.0/24 对端的内网段 rightrsasigkey=0sAQO0Ycw3Z4mz8Xsklq7FwfzayqVk4BlUkgGd1xCZASdODCKTodqCJOpm90tzf22DAZlrLRbglWBCtJaOBmmAgsF5yf6/fhldXjP8zwpCVlLvZ1XVadBf4J2dNlpskI+UfHocQvd7/9yhCiFHoxsDkivWj//J1bznYaeX+L6mq0D10Ut4v5ySWYwUKhw6iNWs6k9VOJLsBqdcqiwZJbrHH0/uC/2WNTVOInJB9RNOe1BbvQ58nk1OgguUNAaRbMQMaMXtJ7MOLAV+bXc7BCoAnEu3c8bccDSrLpZv1OZcWHZ3/LIXd6J1FBirMpI8zJUFAJHPFZzKJjx/zFqOhoLE2P39R3TqYZuhOLpzA4NxJK3U7+5n 对端服务器的私钥 auto=start 设置成自动连接 以下是另一个连接 conn net2-to-net0 left=192.168.1.245 leftsubnet=192.168.40.0/24 leftrsasigkey=0sAQN+Eqgb8wB9ufW0b1X3NZKVrC8do1gHGbRTfDIiYIFu13o8KKTmhbetf/bxPhCJzo1rW9DPBVYNVeVKHDS3plSKImZ0vQh1K3Z/fFMptaIwiTaIT8zXrnVgPiKn6I304jVwTfGr6BgL5z84teIvsuZA6MhJ23wBCTcSXEzeWX9DqhSWrQOuR+4FBxg+QFjunNsVgr3QXASeDU7982HePX1v+nLw81wqYn29B9KucvlpIij60oSYzcBUAKXDaheN7apImGovhadBlw4XSL9l0OpgSCQ8DpbK3S5M6SE5cR5QYBn5E9AnPM8IW+igJe9h0Pk6+jwGXjTzm9uQTDo+WUlNAnHPK+tbVbogWW0LNMi2RyOV right=192.168.1.241 rightsubnet=10.10.20.0/24 rightrsasigkey=0sAQO0Ycw3Z4mz8Xsklq7FwfzayqVk4BlUkgGd1xCZASdODCKTodqCJOpm90tzf22DAZlrLRbglWBCtJaOBmmAgsF5yf6/fhldXjP8zwpCVlLvZ1XVadBf4J2dNlpskI+UfHocQvd7/9yhCiFHoxsDkivWj//J1bznYaeX+L6mq0D10Ut4v5ySWYwUKhw6iNWs6k9VOJLsBqdcqiwZJbrHH0/uC/2WNTVOInJB9RNOe1BbvQ58nk1OgguUNAaRbMQMaMXtJ7MOLAV+bXc7BCoAnEu3c8bccDSrLpZv1OZcWHZ3/LIXd6J1FBirMpI8zJUFAJHPFZzKJjx/zFqOhoLE2P39R3TqYZuhOLpzA4NxJK3U7+5n auto=start
完成以上配置后,重启ipsec服务即可,如果配置正常,即可建立隧道。(某些情况下,需要ping对端的IP才能激活隧道)
防火墙配置:
防火墙需要开通udp 500端口的访问,ah、gre协议的访问,如下
iptables -I INPUT -s 192.168.1.241/32 -i eth1 -p udp -m udp --dport 500 -j ACCEPT iptables -I INPUT -s 192.168.1.241/32-i eth1 -p ah -j ACCEPT iptables -I INPUT -s 192.168.1.241/32 -i eth1 -p gre -j ACCEPT
常用命令:
ipsec auto --add 连接名 用于在某些不方便重新ipsec服务器的情况下,将配置文件修改后,热加载配置文件中新加的连接;
ipsec auto --delete 连接名 同上场景中,用于删除,对于修改一个连接,可以先删除再新加。
ipsec auto --down 连接名 断开一个连接; ipsec auto --up 连接名 手动连接一次;
常见问题处理:
网络异常断开后导致VPN隧道不能建立
由于网络频繁的通断,可能导致这个问题,遇到这种情况,使用上面的命令手动重连即可;