Sunday, May 29, 2011

在CentOS/Redhat5.4上使用openswan搭建数据中心之间的VPN


最近由于主数据中心的流量过大,为了分流和成本,在国外购买了几个独立主机。这样就需要在2个数据中心之间进行数据的同步,包括mysql,mongodb,以及反向代理等。通过在使用IPSec创建VPN从而将2个子网连接在一起是最合适的方案。在最初曾经考虑过使用OpenVPN,但是由于我们的应用涉及到较大的数据传输,OpenVPN的性能相对于IPSec的方案还是差,我们也无法通过为openvpn部署硬件加速。出于成本考虑,最后选择纯软的vpn。首先尝试使用CentOS自带的IPSec进行配置,不过很快失败。RedHat的文档描述的很不清楚,此外,配置比较繁琐,按照其说明配置也无法连通,实在没有耐心,于是改用openswan来部署。在部署openswan之前,先要简单画出2个子网的拓扑图,只要分出左《-》右即可:A(192.168.8.x/211.x.x.x)++B(192.168.9.x/174.xx.xx.xx)按照上图,A为left节点,B为right节电。192.168.8.x和192.168.9.x分别为2个网络的网段。在2个网段分别选择一个主机作为网关,这样分别设置这个2个网关就可以了。实际为:gate_a(192.168.8.70/211.x.x.x),gate_b(192.168.9.1/174.x.x.x)这2个host都需要有2个网卡,分别是链接内网和公网,记住上面的内网和公网ip。下面开始安装:(gate_a)1.安装openswangate_a.nightsailer.comyuminstallipsec-toolsgate_a.nightsailer.comyuminstallopenswan注意:下面这步很关键,CentOS-5.4有个bug,安装openswan时自动创建certdb并不正确,所以首先需要重新创建,否则下一步生成key的时候就会报错。gate_a.nightsailer.comcertutil-N-d/etc/ipsec.d2.现在,为gate_a生成密钥:gate_a.nightsailer.comipsecnewhostkeyconfigdir/etc/ipsec.d/output/etc/ipsec.d/keys.secrets3.显示输出gate_a作为left的公钥:gate_a.nightsailer.comipsecshowhostkeyleftipsecshowhostkeynssdirectoryshowhostkey:/etc/ipsec.d#rsakeyAxxxxleftrsasigkey=0sA将eftrsasigkey=0sA..这行输出记下,后面备用4.修改/etc/ip_sec.conf#/etc/ipsec.confOpenswanIPsecconfigurationfile##Manual:ipsec.conf.5##Pleaseplaceyourownconfigfilesin/etc/ipsec.d/endingin.confversion2.0#conformstosecondversionofipsec.confspecification#basicconfigurationconfigsetup#Debug-loggingcontrols:nonefor(almost)none,allforlots.#klipsdebug=none#plutodebug=controlparsing#ForRedHatEnterpriseLinuxandFedora,leaveprotostack=netkeyprotostack=netkeynat_traversal=yesvirtual_private=oe=off#Enablethisifyouseefailedtofindanyavailableworkernhelpers=0#Youmayputyourconfiguration(.conf)fileinthe/etc/ipsec.d/anduncommentthis.include/etc/ipsec.d/*.conf5.现在为这个vpn单独创建一个conf文件,放到/etc/ipsec.d/nightsailer.com_vpn.confconnnightsailer_vpn#左节点的公网ip(gate_a)left=211.x.x.x#左节点的内网网段leftsubnet=192.168.8.0/24#左节点的网关的内网ip(可选)leftsourceip=192.168.8.70#左节点的id,可以是ip,也可以是域名:#leftid=@gate_a.chinavisual.com#建议最好用ip,域名需要反向解析,dns没配好很容易出问题leftid=211.x.x.x#上一步显示的gate_a作为left的公钥leftrsasigkey=0sAQOleftnexthop=%defaultroute#以下参数含义和上面的一样right=174.x.x.xrightsubnet=192.168.9.0/24rightsourceip=192.168.9.1rightid=174.x.x.xrightrsasigkey=0sAQOp.rightnexthop=%defaultroute#是否在ipsec启动时自动启用这个链接#auto=add(若这个选项,则需要手动upvpn链接)auto=start现在,登录到gate_b,重复上面的步骤1-5。注意,第3步略有不同,因为gate_b是right节点,所以要显示它的right密钥:gate_b.nightsailer.comipsecshowhostkeyrightipsecshowhostkeynssdirectoryshowhostkey:/etc/ipsec.d#rsakeyAxxxxrightrsasigkey=0sA将rightrsasigkey=0sA..这行输出更新/etc/ipsec.d/nightsailer.com_vpn.conf(包括gate_a上的)现在分别启动ipsecgate_a.nightsailer.com/etc/init.d/ipsecstartgate_b.nightsailer.com/etc/init.d/ipsecstart好了,现在在gate_a和gate_b上相互ping,就可以ping通了。网关通了,那么还需要再各自子网添加一个路由:A网段添加:routeadd-net192.168.9.0netmask255.255.255.0gw192.168.8.70eth1#添加静态路由在/etc/sysconfig/network-scripts/route-eth1追加:192.168.9.0/24via192.168.8.70deveth1B网段添加:routeadd-net192.168.8.0netmask255.255.255.0gw192.168.9.1eth1在/etc/sysconfig/network-scripts/route-eth1追加:192.168.8.0/24via192.168.9.1deveth1一切就大功告成了。



Published by
Published by xFruits
Original source : http://www.vpn123.tk/?p=652...

No comments:

Post a Comment