分享
 
 
 

使用Linux建立IP隧道

王朝system·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

来源:Linuxaid

摘要

随着互联网中IPv4可用地址的日益减少,越来越多的企业开始采用NAT方式上网,可用公网IP地址越来越少,而通过互联网访问内部服务器的需求确不断增加,因此本文对linux环境下建立通过互联网的IP隧道的方法,以实现对内部服务器的访问进行一些初浅的探讨,希望能起到抛砖引玉的作用(2003-12-11 16:58:21)

By ideal

使用Linux建立IP隧道

随着互联网中IPv4可用地址的日益减少,越来越多的企业开始采用NAT方式上网,可用公网IP地址越来越少,而通过互联网访问内部服务器的需求确不断增加,因此本文对linux环境下建立通过互联网的IP隧道的方法,以实现对内部服务器的访问进行一些初浅的探讨,希望能起到抛砖引玉的作用。

方法一:基于SSH的加密通道

SSH (Secure Shell)是一套安全的网络连接程序,它可以实现通过网络远程登录其他系统,它就是加密的telnet协议。但是OPENSSH除了具有远程登录功能以外,更可以建立加密IP隧道。

500) {this.resized=true; this.width=500;}" onmouseover="this.style.cursor='hand'" onclick="{window.open('http://www.linuxaid.com.cn/articles/1/0/1001155757/tunnel.png');}" src="http://www.linuxaid.com.cn/articles/1/0/1001155757/tunnel.png" onmousewheel="return bbimg(this)" width=586 border=0

我们这里假设Alice.org服务器位于某个企业网的内网,其IP地址为192.168.2.200,它通过NAT方式可以访问互联网。我们现在需要通过位于互联网上的名字为bob.org的机器里访问Alice,也就是远程登录Alice。这时候我们就需要在bob和alice之间建立IP隧道。我们首先登录Alice,执行命令:

# ssh -R 11022:127.0.0.1:22 ideal@211.1.1.1

该命令表示登录服务器211.1.1.1,并将服务器的11022定向为本地的22号端口。执行完该命令以后,会提示输入ideal用户密码,输入以后就会登录到远程服务器bob。这时在bob上netstat -ln就会发现11022端口监听,保持从alice到bob的ssh连接不断开。从互联网任何位置登录服务器bob以后,我们可以通过该隧道登录到alice服务器,执行以下命令:

# ssh localhost -p 11022

该命令表示连接本地的11022端口,因为我们已经创建了从alice到bob的隧道,因此连接本地的11022端口实际上就是通过隧道访问alice的22端口号。

这样通过这个隧道就可以实现登录位于内部网的服务器alice,但是因为ssh命令中指定了源端口,这种隧道一般只能支持一种协议,对于特定应用则具有加密带来的安全性的优点,但灵活性则不够,而且为了保证隧道畅通,从alice到bob的ssh连接不能断开,也就意味着用户不能退出alice,否则隧道就会关闭。

方法二:使用vtun建立IP隧道

VTun (Virtual TUNnel,http://vtun.sourceforge.net)是一个功能很强的软件,可以利用它来建立 IP虚拟隧道,而且隧道的数目可以不受限制,完全依照机器的能力而定,并且在此基础上应用上可以实现VPN、移动IP等功能。

Vtun所支持的通道并且具有多种功能特性:

加密:支持基于CHAP的认证、并采用BlowFish 128bit密钥。

压缩:支持zlib、lzo等多种压缩算法。

通信整形:平台无关,允许分别限制进入和流出通道的速率。

Vtun支持以下类型通道:

IP tunnel (tun):支持ppp的IP隧道。

以太网隧道(Ethernet tunnel):支持可以实现以太网封装的各种协议,如:IPX、Appletalk、Bridge等。

串口通道(Serial tunnel,tty):支持串行电缆的传输方式,如:PPP、SLIP等。

管道通道(Pipe tunnel,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

网络介绍

500) {this.resized=true; this.width=500;}" onmouseover="this.style.cursor='hand'" onclick="{window.open('http://www.linuxaid.com.cn/articles/1/0/1001155757/tunnel2.png');}" src="http://www.linuxaid.com.cn/articles/1/0/1001155757/tunnel2.png" onmousewheel="return bbimg(this)" width=557 border=0

bob.org拥有固定ip(211.1.1.1),所以作为vtun的服务器端。alice.org没有固定的ip,采用的是NAT接入方式,因为没有固定公网IP地址,也没有域名。alice.org应该作为VPN的客户端,通过vtund连接bob.org服务器,建立VPN通道。

首先确保两台服务器都允许IP forwarding。这点可以通过运行命令:

# /sbin/sysctl -w net.ipv4.ip_forward=1

如果希望永久打开,则可以通过编辑/etc/sysctl.conf文件,将其中的net.ipv4.ipforward=0行改成net.ipv4.ipforward=1来实现。

安装tun设备

在安装vtun之前我们首先要安装虚拟通道点到点设备(Virtual Point-to-Point(TUN) and Ethernet(TAP) devices),将会在/dev中产生两个虚拟通道设备/dev/tunX(字符设备)和tunX(virtual Point-to-Point interface,虚拟点到点接口)。

安装vtun-1.1.tar.gz:

1. 解压软件:

# tar xvfz tun-1.1.tar.gz

2. 配置:

# cd tun-1.1

# ./ configure

注意:安装tun需要系统安装有和当前内核版本一致的内核源代码,因此建议安装位于安装光盘的内核源代码RPM包。

3. 安装:

# make install

4. 加在内核模块

# modprobe tun

如果希望系统启动时自动加载该模块,则编辑/etc/modules.conf,添加:

alias char-major-90 tun #2.2.x内核

alias char-major-10-200 tun #2.4.x内核

这样就完成了对ip隧道驱动tunX的安装。查看内核模块,看tun是否被正确安装:

# lsmod

Module Size Used by

tun 4064 3

安装Vtund

解压缩:

#tar xvfz vtun-2.6.tar.gz

#cd vtund

配置:

# ./configure --disable-lzo --disable-zlib --disable-shaper

注:我们这里不打算压缩和流量成形,因此需要带这些参数,如果希望支持压缩,则需要先安装lzo或者zlib软件。

编译安装:

# make install

默认情况下,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 {

keyword value;

keyword value;

..

}

关键字定义值后的分号是必须的,name后必须有完整的{}。Name可以有以下几个值:

 options:定义通用选项,例如端口号等信息;

 default:所有会话的默认值;

 session(可以为任意名,用于识别一个会话):指定该会话的特定值,用以覆盖default中的定义。

下面是作为作者实际运行环境中以服务器方式运行的vtund.conf的内容:

options { # bob.org,隧道IP地址为10.0.2.2

port 5000; # vtund服务器监听端口

ppp /usr/sbin/pppd;

ifconfig /sbin/ifconfig;

route /sbin/route;

firewall /sbin/ipchains;

# vtund需要调用的各种程序的路径信息;

}

# 默认会话选项

default {

type tun; #

proto udp;# 下层采用UDP协议

comp no; # 不对会话压缩

encr no; # 不对会话加密

keepalive yes #保证连接一直激活;

alice { # 主机alice建立的会话特定选项,可以覆盖默认会话选项的配置

pass alice; # 回话建立密钥

type tun; # 通道类型为IP隧道方式

proto tcp; # 采用下层tcp协议

comp no; # 不对会话压缩

encr no; # 不对会话加密

keepalive yes; # Keep connection alive

up {#连接建立时,首先应该运行的命令

ifconfig "%% 10.0.2.2 pointopoint 10.0.1.2 mtu 1450";

#首先激活接口,其中采用ppp建立连接,ppp本地IP为10.0.2.2,

#而远程IP分配为10.0.1.2。

program /sbin/arp "-sD 10.0.1.2 eth0 pub"; #配置arp表项

route "add -net 10.0.1.0 netmask 255.255.255.0 gw 10.0.2.2"; # 添加路由

};

down {#连接建立时,首先应该运行的命令

program "/sbin/arp -d 10.0.1.2 -i eth0";

};

}

vtund的更详细说明请参考man vtund.conf的帮助手册内容。

下面是作为作者实际运行环境中以客户端方式运行的vtund.conf的内容:

客户端(yyy.org VPN_IP=10.0.1.2):

options {

port 5000;

ppp /usr/sbin/pppd;

ifconfig /sbin/ifconfig;

route /sbin/route;

firewall /sbin/ipchains;

}

alice {

pass alice;

keepalive yes;

up {

ifconfig "%% 10.0.1.2 pointopoint 10.0.2.2 mtu 1450";

program /sbin/arp "-sD 10.0.2.2 eth0 pub";

route "add -net 10.0.2.0 netmask 255.255.255.0 gw 10.0.1.2";

firewall "-A forward -s 10.0.0.0/24 -d 10.0.2.0/24 -j ACCEPT";

};

down {

firewall "-D forward -s 10.0.0.0/24 -d 10.0.2.0/24 -j ACCEPT";

program "/sbin/arp -d 10.0.2.2 -i eth0";

};

}

启动vtund

服务器端(bob.org):只须以root身份执行/usr/sbin/vtund -s就可以了,如果希望系统启动后自动建立VPN通道,可以将这个命令加入/etc/rc.d/rc.local中。

客户端(alice.org):只须以root身份执行/usr/local/sbin/vtund alice bob.org就可以了,如果希望系统启动后自动建立VPN通道,可以将这个命令加入/etc/rc.d/rc.local中。

如果连接建立起来以后,在alice上运行ifconfig应该有以下的输出:

tun0 Link encap:Point-to-Point Protocol

inet addr:10.0.1.2 P-t-P:10.0.2.2 Mask:255.255.255.255

UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1450 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:10

RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

可以看到,系统多了一个网络接口tun0,其IP地址为10.0.1.2,而对端(服务器端)IP地址则为10.0.2.2。

这时在alice或者bob上,可以建立静态路由信息或者直接连接对端的网络或主机,实现跨越互联网的VPN隧道,当然该隧道并没有加密。

注:如果在客户端运行vtund alice bob.org后连接无建立,则应该注意查看内核是否加载了tun0模块。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有