程序简介
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来建立安全的连接。
该文章为本站原创,转载请注明来源,本文永久链接:https://www.zavierlab.com/post/71.html