歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 使用Linux建立IP隧道

使用Linux建立IP隧道

日期:2017/2/27 9:40:10   编辑:更多Linux

 隨著互聯網中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模塊。






Copyright © Linux教程網 All Rights Reserved