e-works数字化企业网  »  文章频道  »  基础信息化  »  运维管理

听运维专家聊聊VPN的那些事儿

2017/4/15    来源:运维派    作者:佚名      
关键字:运维  VPN技术  
VPN对各位来说肯定是非常熟悉的,比如在家里加密访问公司后台,或者在特殊场景做权限控制,还有就是可以让移动设备拨vpn之后利用tc做弱网模拟,或者是在国内访问google服务等,不过听说google学术已经开始重返中国,以后可以在国内直接访问到了。
    VPN对各位来说肯定是非常熟悉的,比如在家里加密访问公司后台,或者在特殊场景做权限控制,还有就是可以让移动设备拨vpn之后利用tc做弱网模拟,或者是在国内访问google服务等,不过听说google学术已经开始重返中国,以后可以在国内直接访问到了。
 
    VPN技术可以做的远不止如此,今天我们来随便聊聊VPN身边的那些事情。
 
    一、概述
 
    我们这里说的VPN主要是关于企业应用常见相关,不涉及到非法跨网。
 
    VPN有很多种,比如Linux上最常用的pptp类型的vpn,稍微复杂点的openvpn,还有学cisco时候实验用的EASY VPN,还有些看起来高大上的Juniper VPN。
 
    其实远远不止这些,在实际环境下如果要兼容各个网络运营商和终端设备的话,就非常推荐SoftEtherVPN这个vpn盒子了。
 
    下面来挑点东西和大家分享下。
 
    二、VPN实现
 
    2.1 GRE隧道
 
    这个gre隧道是Linux上一个最简单的”vpn”,远远比pptp简单,但是并不那么出名,因为他不直接和用户接触,一般是属于服务器或者网络设备之间的”vpn网络”。
 
    在A、B两个异地机房,有两个内网需要连接起来,我们不需要用vpn,直接用Linux自带属性即可完成。
 
    首先在A、B服务器上互加IP白名单,然后在A服务器上操作:
 
    #加载ip_gre模块
 
    modprobe ip_gre
 
    ip tunnel add gre1 mode gre remote B_IP local A_IP ttl 255
 
    ip link set gre1 up
 
    ip addr add 192.10.10.2 peer 192.10.10.1 dev gre1
 
    在B服务器上操作:
 
    #加载ip_gre模块
 
    modprobe ip_gre
 
    ip tunnel add gre1 mode gre remote A_IP local B_IP ttl 255
 
    ip link set gre1 up
 
    ip addr add 192.10.10.1 peer 192.10.10.2 dev gre1
 
    两边都敲完的话就有个隧道网段生成了,红色地方是本段和对端的公网IP,下面两个就是生成的隧道网段的IP了:
 
    VPN网络
 
    然后在这两个服务器互相用route命令加上对方内网的路由表走这个对端IP就可以了。
 
    要断掉这个隧道网络的话直接删掉这个隧道网卡即可:
 
    ip tunnel del gre1
 
    在服务器之间用这个的话,比pptp搭建个vpn方便点点。 -_-
 
    2.2 Socket代理
 
    简单介绍下web的代理,如果无法访问vpn的时候,这个可能有用武之地,比如某后台只允许了某台服务器的IP,我们可以在这个服务器上临时搭建个代理服务,然后终端用户可以通过这个跳板来访问后台了。
 
    这个代理我们一般是用于访问web流量,比如用squid或者ssh新建一条隧道,这里普及下,原先可能大家都认为squid做代理的时候因为没有目的站点的证书,是无法代理https流量,但其实不是这样,可以利用stunnel结合来做https流量的代理,或者sniproxy也行。
 
    不过squid搭建起来也比较麻烦,这里简单介绍下ssh一条命令来创建代理:
 
    ssh -p 22 -qTfnN -D 0.0.0.0:7070 test@127.0.0.1
 
    在目的服务器上运行之后会监听7070端口,在浏览器设置这个代理之后,web流量的出口就可以是这个服务器了。
 
    这个可以快速在多台服务器上创建多个用于频繁改变用户出口IP的代理,在某些场合下可能用得到,比如“帮朋友投下票”。
 
    2.3 PPP协议
 
    PPP协议的vpn有几种实现方式,勉强归类一下,包括pptp、sstp、l2tp。
 
    大家接触linux时候一般都是用这个pptp类型的vpn,也很简便,但我们在某些特殊场合下面把这个vpn的功能给升级了。
 
    这个vpn有别的打开方式能让我们点赞。
 
    首先是认证控制,原先认证只可以用帐号和密码认证,但是其实还可以加上源IP校验。
 
    再有的是权限的自动化控制,强调自动化是因为我们的场景是在后台管理帐号、用户源IP和拨vpn之后对应的权限甚至是进行抓包备案。
 
    实现这两个功能利用的是/etc/ppp/ip-up这个文件,这个是在校验帐号密码之后调用的一个脚本文件,我们在这里可以自定义一些逻辑来实现我们需要的功能。
 
    通过加入sh -x来调试这个脚本,可以发现会传入6个参数,其中就有我们需要的变量信息:
 
  • 第一个参数是网卡名称
 
  • 第五个参数是vpn获取的ip
 
  • 第六个参数是用户的来源IP
 
  • PEERNAME变量代表用户的帐号
 
    有了这些我们就可以另外写一个提供复杂逻辑的脚本来给ip-up调用。
 
    VPN网络
 
    比如先在ip-up里面加入日志,然后调用add_iptables.sh来做复杂的认证和权限控制,到最后放入一个tcpdump来在后台抓包做备用审计。
 
    add_iptables.sh逻辑也比较简单,利用传入的参数来跟我们后台提供的数据进行对比然后调用IPTABLES处理相关的复杂权限控制即可。
 
    同理,还有另外一个/etc/ppp/ip-down的脚本是在用户断开vpn的时候自动调用的一个脚本,在这里可以删除掉之前IPTABLES做的控制,然后还可以自动分析之前的tcpdump数据包然后写入mysql。
 
    上面说的是pptp类型的vpn,但是自从IOS设备已经弃用了pptp,在这个场景下我们可以再加入l2tp的vpn。同样是在/etc/ppp目录,我们只需要再安装配置ipsec(libreswan)和xl2tpd即可。
 
    注意l2tp对外开放端口时候需要加多个,有udp的500、4500、1701这3个端口和esp协议,而且l2tp和pptp的逻辑和帐号文件是同一套,所以非常顺利就兼容了之前的那些方案,具体搭建方案就不再多阐述了。
 

责任编辑:李欢
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐