Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


在Linux中使用Openswan搭建站点到站点的IPsec VPN 隧道

2014-11-14 15:13    评论: 17 收藏: 5 分享: 13    

虚拟私有网络(VPN)隧道是通过Internet隧道技术将两个不同地理位置的网络安全的连接起来的技术。当两个网络是使用私有IP地址的私有局域网络时,它们之间是不能相互访问的,这时使用隧道技术就可以使得两个子网内的主机进行通讯。例如,VPN隧道技术经常被用于大型机构中不同办公区域子网的连接。

有时,使用VPN隧道仅仅是因为它很安全。服务提供商与公司会使用这样一种方式架设网络,他们将重要的服务器(如,数据库,VoIP,银行服务器)放置到一个子网内,仅仅让有权限的用户通过VPN隧道进行访问。如果需要搭建一个安全的VPN隧道,通常会选用IPsec,因为IPsec VPN隧道被多重安全层所保护。

这篇指导文章将会告诉你如何构建站点到站点的 VPN隧道。

拓扑结构

这边指导文章将按照以下的拓扑结构来构建一个IPsec 隧道。

安装软件包以及准备VPN服务器

一般情况下,你仅能管理A点,但是根据需求,你可能需要同时管理A点与B点。我们从安装Openswan软件开始。

基于Red Hat的系统(CentOS,Fedora,或RHEL):

# yum install openswan lsof

在基于Debian的系统(Debian,Ubuntu或Linux Mint):

# apt-get install openswan

现在禁用VPN的重定向功能,如果有服务器,可以执行下列命令:

# for vpn in /proc/sys/net/ipv4/conf/*;
# do echo 0 > $vpn/accept_redirects;
# echo 0 > $vpn/send_redirects;
# done 

接下来,允许IP转发并且禁重定向功能。

 # vim /etc/sysctl.conf 

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

重加载 /etc/sysctl.conf文件:

 # sysctl -p

在防火墙中启用所需的端口,并保证不与系统当前的规则冲突。

# iptables -A INPUT -p udp --dport 500 -j ACCEPT
# iptables -A INPUT -p tcp --dport 4500 -j ACCEPT
# iptables -A INPUT -p udp --dport 4500 -j ACCEPT

最后,我们为NAT创建防火墙规则。

 # iptables -t nat -A POSTROUTING -s site-A-private-subnet -d site-B-private-subnet -j SNAT --to site-A-Public-IP 

请确保上述防火墙规则是持久有效的(LCTT 译注:你可以save这些规则或加到启动脚本中)。

注意:

  • 你可以使用MASQUERAD替代SNAT(iptables)。理论上说它也能正常工作,但是有可能会与VPS发生冲突,所以我仍然建议使用SNAT。
  • 如果你同时在管理B点,那么在B点也设置同样的规则。
  • 直连路由则不需要SNAT。

准备配置文件

我们将要用来配置的第一个文件是ipsec.conf。不论你将要配置哪一台服务器,总是将你这端的服务器看成是左边的,而将远端的看作是右边的。以下配置是在站点A的VPN服务器做的。

# vim /etc/ipsec.conf 

## general configuration parameters ##

config setup
        plutodebug=all
        plutostderrlog=/var/log/pluto.log
        protostack=netkey
        nat_traversal=yes
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/16
        ## disable opportunistic encryption in Red Hat ##
        oe=off

## disable opportunistic encryption in Debian ##
## Note: this is a separate declaration statement ##
include /etc/ipsec.d/examples/no_oe.conf

## connection definition in Red Hat ##
conn demo-connection-redhat
        authby=secret
        auto=start
        ike=3des-md5
        ## phase 1 ##
        keyexchange=ike
        ## phase 2 ##
        phase2=esp
        phase2alg=3des-md5
        compress=no
        pfs=yes
        type=tunnel
        left=<siteA-public-IP>
        leftsourceip=<siteA-public-IP>
        leftsubnet=<siteA-private-subnet>/netmask
        ## for direct routing ##
        leftsubnet=<siteA-public-IP>/32
        leftnexthop=%defaultroute
        right=<siteB-public-IP>
        rightsubnet=<siteB-private-subnet>/netmask

## connection definition in Debian ##
conn demo-connection-debian
        authby=secret
        auto=start
        ## phase 1 ##
        keyexchange=ike
        ## phase 2 ##
        esp=3des-md5
        pfs=yes
        type=tunnel
        left=<siteA-public-IP>
        leftsourceip=<siteA-public-IP>
        leftsubnet=<siteA-private-subnet>/netmask
        ## for direct routing ##
        leftsubnet=<siteA-public-IP>/32
        leftnexthop=%defaultroute
        right=<siteB-public-IP>
        rightsubnet=<siteB-private-subnet>/netmask

有许多方式实现身份验证。这里使用预共享密钥,并将它添加到文件 /etc/ipsec.secrets。

 # vim /etc/ipsec.secrets 

siteA-public-IP  siteB-public-IP:  PSK  "pre-shared-key"
## in case of multiple sites ##
siteA-public-IP  siteC-public-IP:  PSK  "corresponding-pre-shared-key"
12下一页
查看其它分页:

发表评论


最新评论

我也要发表评论

albert-Y 2014-11-14 20:03  新浪微博网友评论
我不用这个,还是直接xl2tp!//@Linux中国:→_→//@Cth_framebuffer: 我是准备和基友用vpn建虚拟局域网联机。。//@相公12345:都是被逼的[蜡烛]//@Cth_framebuffer:马
回复
用户不存在ii 2014-11-14 18:03  新浪微博网友评论
@我的印象笔记
回复
老道1990 2014-11-14 17:33  新浪微博网友评论
@我的印象笔记
回复
opensource_电教 2014-11-14 17:03  新浪微博网友评论
@mywiz
回复
崔海斌DX 2014-11-14 16:33  新浪微博网友评论
这个是自己要搭建,我是要直接路由器连//@袁龙飞Zero: @崔海斌DX 看来很不少人很痛苦。//@Linux中国: →_→//@Cth_framebuffer: 我是准备和基友用vpn建虚拟局域网联机。。//@相公12345:都是被逼的[蜡烛]//@Cth_framebuffer:马
回复
氵沐 2014-11-14 16:03  新浪微博网友评论
转发微博.
回复
袁龙飞Zero 2014-11-14 16:03  新浪微博网友评论
@崔海斌DX 看来很不少人很痛苦。//@Linux中国: →_→//@Cth_framebuffer: 我是准备和基友用vpn建虚拟局域网联机。。//@相公12345:都是被逼的[蜡烛]//@Cth_framebuffer:马
回复
基连 2014-11-14 16:03  新浪微博网友评论
把人逼急了什么事都干得出来。//@Linux中国:→_→//@Cth_framebuffer: 我是准备和基友用vpn建虚拟局域网联机。。//@相公12345:都是被逼的[蜡烛]//@Cth_framebuffer:马
回复
Linux中国 2014-11-14 16:03  新浪微博网友评论
→_→//@Cth_framebuffer: 我是准备和基友用vpn建虚拟局域网联机。。//@相公12345:都是被逼的[蜡烛]//@Cth_framebuffer:马
回复
相公12345 2014-11-14 16:03  新浪微博网友评论
[哈哈]//@Cth_framebuffer:我是准备和基友用vpn建虚拟局域网联机。。//@相公12345:都是被逼的[蜡烛]//@Cth_framebuffer:马
回复
Cth_framebuffer 2014-11-14 16:03  新浪微博网友评论
我是准备和基友用vpn建虚拟局域网联机。。//@相公12345:都是被逼的[蜡烛]//@Cth_framebuffer:马
回复
开源新闻发布台 2014-11-14 15:33  新浪微博网友评论
很好。做过好几次了。
回复
相公12345 2014-11-14 15:33  新浪微博网友评论
都是被逼的[蜡烛]//@Cth_framebuffer:马
回复
AK9527lq 2014-11-14 15:33  新浪微博网友评论
@mywiz
回复
Cth_framebuffer 2014-11-14 15:33  新浪微博网友评论
回复
地址寻址器 2014-11-14 15:33  新浪微博网友评论
有空研究一下![耶]
回复
人生则有四方之志 2014-11-14 15:33  新浪微博网友评论
@没有账号可以注册
回复
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。