当前位置:Linux教程 - Linux资讯 - 使用Linux建立IP隧道

使用Linux建立IP隧道

 随着互联网中IPv4可用地址的日益减少,越来越多的企业开始采用NAT方式上网,可用公网IP地址越来越少,而通过互联网访问内部服务器的需求确不断增加,因此本文对Linux环境下建立通过互联网的IP隧道的方法,以实现对内部服务器的访问进行一些初浅的探讨,希望能起到抛砖引玉的作用。    方法一:基于SSH的加密通道    SSH(SecureShell)是一套安全的网络连接程序,它可以实现通过网络远程登录其他系统,它就是加密的telnet协议。但是OPENSSH除了具有远程登录功能以外,更可以建立加密IP隧道。         我们这里假设Alice.org服务器位于某个企业网的内网,其IP地址为192.168.2.200,它通过NAT方式可以访问互联网。我们现在需要通过位于互联网上的名字为bob.org的机器里访问Alice,也就是远程登录Alice。这时候我们就需要在bob和alice之间建立IP隧道。我们首先登录Alice,执行命令:    #ssh-R11022:127.0.0.1:22 [email protected]    该命令表示登录服务器211.1.1.1,并将服务器的11022定向为本地的22号端口。执行完该命令以后,会提示输入ideal用户密码,输入以后就会登录到远程服务器bob。这时在bob上netstat-ln就会发现11022端口监听,保持从alice到bob的ssh连接不断开。从互联网任何位置登录服务器bob以后,我们可以通过该隧道登录到alice服务器,执行以下命令:    #sshlocalhost-p11022    该命令表示连接本地的11022端口,因为我们已经创建了从alice到bob的隧道,因此连接本地的11022端口实际上就是通过隧道访问alice的22端口号。    这样通过这个隧道就可以实现登录位于内部网的服务器alice,但是因为ssh命令中指定了源端口,这种隧道一般只能支持一种协议,对于特定应用则具有加密带来的安全性的优点,但灵活性则不够,而且为了保证隧道畅通,从alice到bob的ssh连接不能断开,也就意味着用户不能退出alice,否则隧道就会关闭。    方法二:使用vtun建立IP隧道    VTun(VirtualTUNnel,http://vtun.sourceforge.net)是一个功能很强的软件,可以利用它来建立IP虚拟隧道,而且隧道的数目可以不受限制,完全依照机器的能力而定,并且在此基础上应用上可以实现VPN、移动IP等功能。    Vtun所支持的通道并且具有多种功能特性:    * 加密:支持基于CHAP的认证、并采用BlowFish128bit密钥。  * 压缩:支持zlib、lzo等多种压缩算法。  * 通信整形:平台无关,允许分别限制进入和流出通道的速率。    Vtun支持以下类型通道:    * IPtunnel(tun):支持ppp的IP隧道。  * 以太网隧道(Ethernettunnel):支持可以实现以太网封装的各种协议,如:IPX、Appletalk、Bridge等。  * 串口通道(Serialtunnel,tty):支持串行电缆的传输方式,如:PPP、SLIP等。  * 管道通道(Pipetunnel,pipe):支持所有能使用Unix管道的程序。    Vtun支持多种平台,包括:Linux、BSD以及Solaris。    下载软件:    http://prdownloads.sourceforge.net/vtun/vtun-2.6.tar.gz  http://vtun.sourceforge.net/tun/tun-1.1.tar.gz    网络介绍         bob.org拥有固定ip(211.1.1.1),所以作为vtun的服务器端。alice.org没有固定的ip,采用的是NAT接入方式,因为没有固定公网IP地址,也没有域名。alice.org应该作为VPN的客户端,通过vtund连接bob.org服务器,建立VPN通道。    首先确保两台服务器都允许IPforwarding。这点可以通过运行命令:    #/sbin/sysctl-wnet.ipv4.ip_forward=1    如果希望永久打开,则可以通过编辑/etc/sysctl.conf文件,将其中的net.ipv4.ipforward=0行改成net.ipv4.ipforward=1来实现。    安装tun设备    在安装vtun之前我们首先要安装虚拟通道点到点设备(VirtualPoint-to-Point(TUN)andEthernet(TAP)devices),将会在/dev中产生两个虚拟通道设备/dev/tunX(字符设备)和tunX(virtualPoint-to-Pointinterface,虚拟点到点接口)。  安装vtun-1.1.tar.gz:    1.解压软件:  #tarxvfztun-1.1.tar.gz    2.配置:  #cdtun-1.1  #./configure  注意:安装tun需要系统安装有和当前内核版本一致的内核源代码,因此建议安装位于安装光盘的内核源代码RPM包。    3.安装:  #makeinstall    4.加在内核模块  #modprobetun    如果希望系统启动时自动加载该模块,则编辑/etc/modules.conf,添加:    aliaschar-major-90tun#2.2.x内核  aliaschar-major-10-200tun#2.4.x内核       这样就完成了对ip隧道驱动tunX的安装。查看内核模块,看tun是否被正确安装:    #lsmod  ModuleSizeUsedby  tun40643    安装Vtund    解压缩:    #tarxvfzvtun-2.6.tar.gz  #cdvtund    配置:  #./configure--disable-lzo--disable-zlib--disable-shaper    注:我们这里不打算压缩和流量成形,因此需要带这些参数,如果希望支持压缩,则需要先安装lzo或者zlib软件。    编译安装:    #makeinstall    默认情况下,vtund被安装在/usr/local/sbin/目录下,而默认的配置文件则为/usr/local/etc/vtund.conf中。  需要在两台机器上分别安装vtund和tun驱动,其中bob.org服务器上的vtund以服务器方式运行,而alice.org的vtund以客户端方式运行。    vtund.conf配置文件说明:    vtund.conf文件是vtund配置文件。Vtund.conf文件格式为:    name{  keyWordvalue;  keywordvalue;  ..  }    关键字定义值后的分号是必须的,name后必须有完整的{}。Name可以有以下几个值:    options:定义通用选项,例如端口号等信息;  default:所有会话的默认值;  session(可以为任意名,用于识别一个会话):指定该会话的特定值,用以覆盖default中的定义。    下面是作为作者实际运行环境中以服务器方式运行的vtund.conf的内容:    options{#bob.org,隧道IP地址为10.0.2.2  port5000;#vtund服务器监听端口  ppp/usr/sbin/pppd;  ifconfig/sbin/ifconfig;  route/sbin/route;  firewall/sbin/ipchains;  #vtund需要调用的各种程序的路径信息;  }  #默认会话选项  default{  typetun;#  protoudp;#下层采用UDP协议  compno;#不对会话压缩  encrno;#不对会话加密  keepaliveyes#保证连接一直激活;    alice{#主机alice建立的会话特定选项,可以覆盖默认会话选项的配置  passalice;#回话建立密钥  typetun;#通道类型为IP隧道方式  prototcp;#采用下层tcp协议  compno;#不对会话压缩  encrno;#不对会话加密  keepaliveyes;#Keepconnectionalive    up{#连接建立时,首先应该运行的命令  ifconfig"%%10.0.2.2pointopoint10.0.1.2mtu1450";  #首先激活接口,其中采用ppp建立连接,ppp本地IP为10.0.2.2,  #而远程IP分配为10.0.1.2。  program/sbin/arp"-sD10.0.1.2eth0pub";#配置arp表项  route"add-net10.0.1.0netmask255.255.255.0gw10.0.2.2";#添加路由  };  down{#连接建立时,首先应该运行的命令  program"/sbin/arp-d10.0.1.2-ieth0";  };  }    vtund的更详细说明请参考manvtund.conf的帮助手册内容。    下面是作为作者实际运行环境中以客户端方式运行的vtund.conf的内容:    客户端(yyy.orgVPN_IP=10.0.1.2):    options{    port5000;  ppp/usr/sbin/pppd;  ifconfig/sbin/ifconfig;  route/sbin/route;  firewall/sbin/ipchains;    }    alice{    passalice;  keepaliveyes;    up{    ifconfig"%%10.0.1.2pointopoint10.0.2.2mtu1450";  program/sbin/arp"-sD10.0.2.2eth0pub";  route"add-net10.0.2.0netmask255.255.255.0gw10.0.1.2";  firewall"-Aforward-s10.0.0.0/24-d10.0.2.0/24-jACCEPT";    };    down{    firewall"-Dforward-s10.0.0.0/24-d10.0.2.0/24-jACCEPT";  program"/sbin/arp-d10.0.2.2-ieth0";    };  }    启动vtund    服务器端(bob.org):只须以root身份执行/usr/sbin/vtund-s就可以了,如果希望系统启动后自动建立VPN通道,可以将这个命令加入/etc/rc.d/rc.local中。    客户端(alice.org):只须以root身份执行/usr/local/sbin/vtundalicebob.org就可以了,如果希望系统启动后自动建立VPN通道,可以将这个命令加入/etc/rc.d/rc.local中。    如果连接建立起来以后,在alice上运行ifconfig应该有以下的输出:    tun0Linkencap:Point-to-PointProtocol  inetaddr:10.0.1.2P-t-P:10.0.2.2Mask:255.255.255.255  UPPOINTOPOINTRUNNINGNOARPMULTICASTMTU:1450Metric:1  RXPackets:0errors:0dropped:0overruns:0frame:0  TXpackets:0errors:0dropped:0overruns:0carrier:0  collisions:0txqueuelen:10  RXbytes:0(0.0b)TXbytes:0(0.0b)    可以看到,系统多了一个网络接口tun0,其IP地址为10.0.1.2,而对端(服务器端)IP地址则为10.0.2.2。  这时在alice或者bob上,可以建立静态路由信息或者直接连接对端的网络或主机,实现跨越互联网的VPN隧道,当然该隧道并没有加密。    注:如果在客户端运行vtundalicebob.org后连接无建立,则应该注意查看内核是否加载了tun0模块。


[1] [2] 下一页 

(出处:http://www.sheup.com)


上一页 [1] [2]