Zavier's Blog

开源虚拟隧道创建程序VTun编译及配置详解

程序简介


vtun是一款开源、轻量级的网络虚拟隧道创建程序,VTun可以通过TCP/IP协议为企业在公网上建立安全的VPN隧道。VTun的功能与OpenVPN类似,都是使用了Linux内核中的虚拟网卡TUN/TAP设备,同时它也支持PPP设备,能够提供多种形式的隧道。但是VTun与OpenVPN的区别是:VTun的隧道是一对一的,即隧道内仅有客户端和服务器两端,不像OpenVPN一样可以设置一个网段和分配不同IP给多个客户端,灵活性略逊后者。 VTun更适合应用于企业总公司与分公司远程组网的场景,直接部署于网关。


部署和测试的系统环境


客户端:Linux CentOS 7.3 ARM(树莓派3b)

服务端:Linux CentOS 6.9 x86_64 (KVM VPS主机)

系统内核必须有TUN/TAP和PPP模块,VPS主机须母机的支持。这里只测试RedHat系的系统,Debian系的类似。


下载及编译程序


先安装依赖

yum install -y openssl openssl-devel zlib zlib-devel bison byacc flex gcc wget ppp lzo lzo-devel git

下载程序源码

cd /usr/src && git clone https://github.com/VTun/VTun 
cd /usr/src/VTun && ./configuremake && make install


对配置文件进行修改


编译完成后,默认的配置文件在/etc/vtund.conf,二进制文件在/sbin/vtund。程序启动时,将会通过读取/etc/vtund.conf配置文件来建立虚拟隧道。该文件内也给出了许多配置例子以供参考。VTun所能提供的隧道类型有IP隧道(tun)、以太网隧道(tap)、串行隧道(支持所有通过串行隧道工作的协议,如PPP、SLIP等等)、pipe隧道(支持通过Unix pipe工作的隧道)。用户可以根据环境的需求来选择合适的隧道类型以及协议。

我仅测试了TUN和PPP隧道,而PPP隧道在进行连接时总是报找不到伪终端的错误(Can't allocate pseudo tty,No such file or directory.),调试多次无果,且由于相关资料较少,最终放弃了PPP隧道,如果有大佬知道如何解决还请留言多多指教。而TUN隧道的测试较为顺利,下面贴出TUN/TAP隧道的配置:

TUN/TAP隧道服务端配置:


#option字段是全局选项,包括监听的端口及定义使用到的二进制文件目录
options {  
        port 5000;   #服务器所监听的端口,默认为5000  
    bindaddr { iface eth0; }; #服务监听的网卡,一般为eth0  
    syslog daemon; #开启daemon模式,即守护模式,使程序在后台运行  
        ppp /usr/sbin/pppd;  #这是一些二进制文件的目录,默认无需改动  
        ifconfig /sbin/ifconfig; 
        route /sbin/route;  
        firewall /sbin/ipchains;  
        ip/sbin/ip;}#此处是定义默认会话的选项,将会应用于整个文件内的所有隧道
default {    
        compress no; #compress决定是否对数据压缩,默认为no,压缩方法可选zlib和lzo  
        speed 0;  #speed选项可对隧道总速度进行限制,默认为0不限制,限速单位为KB/s
        } #以下是配置隧道选项,可一次性添加多个字段,即多条隧道,下列以tunnel1为例
tunnel1 {
  passwd  XXXXXX; #此处定义隧道的密钥
   type tun; #type选项可根据需求选择tun或者tap
   proto tcp; #proto是选择隧道通信所使用的协议,在国内运营商对UDP包大幅丢包的状态下,建议选择TCP以建立可靠的连接
   device tun0; #隧道建立后,tun虚拟网卡的名称,不得与当前已有的设备重名
   compress  no;  #压缩数据,同default字段里的compress
   encrypt  no; #选择是否加密,加密有多种选项,当你不认为你处在一个可靠的网络内时,建议启用,默认加密方式为blowfish128ecb
   keepalive yes; # 该选项可隔一段时间ping对端以确认会话的状态,若客户端在NAT网关或者防火墙后,建议开启
   stat yes; # 在日志里面记录隧道连接状态  
   #up字段是隧道在连接后,所执行的命令,即开启一个虚拟网络设备  
   up {   #该选项表示隧道内,本地IP为10.221.96.10,对端IP为10.221.96.11,客户端在配置时应与之相对应    
       ifconfig "%% 10.221.96.10 pointopoint 10.221.96.11 mtu 1450";  
  };
   down {    #在隧道关闭时所执行的命令,即关闭网卡    
   ifconfig "%% down";   
   };
}


TUN/TAP隧道客户端配置


options { 
 port 5000;  
 timeout 60; #此处选项是设置连接到对端的超时时间,单位为秒  
 ppp/usr/sbin/pppd;              
 ifconfig/sbin/ifconfig;  
 route/sbin/route;  
 firewall/sbin/ipchains;  
 ip/sbin/ip;
 }
 #tunnel1字段是为了连接上面服务端的tunnel1隧道
 tunnel1 {  passwd  XXXXXX; #隧道密码,只有与服务器一致才可连接成功  
 #以下选项同上  
 type tun;  
 proto tcp;  
 compress no;  
 encrypt no;  
 keepalive yes;  
 stat yes;  
 device tun0;    
 persist yes; #开启此选项后,当物理网络出现问题时,可确保虚拟网卡tun设备不会处于down状态  
 up {    
 ifconfig "%% 10.221.96.11 pointopoint 10.221.96.10 mtu 1450"; #该选项应该与服务端相对应,IP不得冲突,mtu应保持一致  
 };  
 down {   
 ifconfig "%% down";  
 };
}


启动VTun


VTun的二进制文件为/sbin/vtund;

服务端的启动命令为:

vtund -s -f /etc/vtund.conf

客户端的启动命令为:

vtund -f /etc/vtund.conf tunnel1 $SERVER_IP

其中-s选项表示程序以服务端运行,-f表示从配置文件中读取,在客户端启动命令中,tunnel1作为隧道的名称,应该加入到vtund -f /etc/vtund.conf后面,并且最后应填上对端服务器的外网IP。


总结


VTun作为轻量级网络隧道软件,与OpenVPN相比,配置也非常简单,根据官方介绍,它同OpenVPN一样也可以采用SSL来确保服务器不被仿冒,只能建立一对一隧道这一特性,决定了它更适合部署在网关/路由设备上,而openvpn极高的安全性以及多客户端的特性,决定了它更适合用于客户端-服务器这一模式,如出差员工通过手机、笔记本电脑连接至公司网关这一情景,能够保证员工在安全未知的网络环境下,仍然能通过SSL/TLS来建立安全的连接。

image.png


该文章为本站原创,转载请注明来源,本文永久链接:https://zavierlab.com/post/71.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Copyright © 2017-2019 Zavier的博客.网站地图