当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 让Linux NAT firewall支持MSN Messenger

Unix/Linux
Linux教程:后台执行程序如何操作?
Linux教程:记录会话过程的命令
Linux和Windows区别分析之线程问题
Linux教程:22端口如何修改?
Linux教程:配置DHCP服务器方法介绍
css3教程:把系统日志记录到远程服务器
教你在Linux系统下破解SAM密码
Linux操作系统启动界面揭秘DHCP协议实现过程
如何检测U盘是否插入或拔出
Linux消除用户使用习惯的阻隔
编写应用程序要注重其安全性
Telnet在Linux系统下如何设置
Linux系统下误删除文件怎么办
删除Linux系统下的历史记录
修改Linux系统下22端口的两种方法
资深Linux程序员的开发经验谈
Ext2和Ext3文件系统
Linux策略性路由应用
如何在Linux中设置透明代理
Linux下的软件开发

Unix/Linux 中的 让Linux NAT firewall支持MSN Messenger


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 33 ::
收藏到网摘: n/a

作者:dagger无崖阁xyg.ods.org版本:1.0 2003-06-22 初始版本一、引言目前Linux的NAT和firewall只支持MSN Messenger的文字聊天,本文介绍了如何让Linux的NAT和firewall支持MSN Messenger的语音聊天、文件传送等其它功能的方法。
二、几个基本概念1、Linux NATNetwork Address Translation (NAT)是IETF的一个标准,用来使在私有网络中的PC和设备共享一个公开的可路由的IPv4地址。使用NAT的一个主要原因是缓解目前IPv4地址资源的不足。通常NAT被用在网关设备中,位于私有网络和公共Internet之间。当IP包要通过网关时,NAT就会把私有IP地址、端口和公开的IP地址、端口作转换。Linux 2.4内核中NAT分为两种,Source NAT (SNAT)和Destination NAT (DNAT)。Source NAT就是转换IP包头的源地址,SNAT总是在POSTROUTING中处理,即包被发送出去之前。Masquerading(IP伪装)是SNAT的一种特殊形式。Destination NAT就是转换IP包头的目的地址,DNAT总是在PREROUTING中处理,即在收到包后在路由处理之前。Port forwarding、load sharing、和transparent proxying都是属于DNAT。Linux 2.4内核的NAT流程图: _____ _____ / \ / \ PREROUTING -->[Routing ]----------------->POSTROUTING-----> \D-NAT/ [Decision] \S-NAT/ | ^ | | | | | | | | | | | | --------> Local Process ------2、Linux Packet Filter在Linux中使用包过滤(Packet Filter)来实现防火墙(firewall)的功能。Linux在内核中检查通过的包头,决定所有包的命运,可能是丢弃(DROP)这个包,或允许(ACCEPT)包通过,或其它更复杂的动作。使用包过滤主要可以实现控制、安全和警戒的功能。Linux 2.4内核中有三个过滤规则表,它们是INPUT、FORWARD和OUTPUT。对于数据包,如果是发给本机的,则交INPUT处理;如果是发给其它PC或设备的,则交FORWARD处理;如果是由本机发送的,则交OUTPUT处理。Linux 2.4内核的Packet Filter流程图: _____ Incoming / \ Outgoing -->[Routing ]--->|FORWARD|-------> [Decision] \_____/ ^ | | v ____ ___ / \ / \ |OUTPUT| |INPUT| \____/ \___/ ^ | | ----> Local Process ----3、UPnPUniversal Plug and Play (UPnP)是一种架构,用来实现目前流行的PC、智能设备或装置(特别是家庭中的)的端到端的网络连接。UPnP基于Internet标准和技术,如TCP/IP、HTTP和XML,支持“零配置”网络和自动发现,一个设备可以动态地加入一个网络,获得一个IP地址,声明自己的名字,向其它设备回应自己的能力,并学习到网络中其它设备的存在和能力。进一步,一个设备可以平滑地并自动地离开这个网络,不会留下任何不期望保存的状态。UPnP会集了多个厂商的合作,以建立标准的Device Control Protocols (DCPs),使用XML来表达,通过HTTP来通信,并提出了Internet Gateway Device (IGD)规格。4、MSN Messenger使用的端口微软的MSN Messenger软件是流行的即时通行软件,包含很多功能,根据微软的资料这个软件需要使用很多端口。文字聊天:TCP 1863或80音频和视频聊天:UDP 5004-65535 动态分配应用共享和白板:TCP 1503文件传输:TCP 6891-6900 允许一次传10个文件远程助手:TCP 3389三、遇到的问题目前我这里的环境是在网关的计算机上装了Redhat Linux 8.0,配置了Masquerading可以让内部网络中的计算机共享上网;配置了firewall限制外部计算机对网关的部分端口的访问。内部网络中的计算机除了MSN Messenger的文字聊天可以正常与外界通信外,其它如音频聊天、文件传输等功能都无法实现。NAT的问题:* 在NAT后面的计算机使用私有IP地址,MSN Messenger会把这个私有IP地址的数据传送给对端,而NAT只能转换IP包头的内容,无法转换IP包数据中包含的私有地址。* NAT需要Port forwarding (端口映射)来使外部IP地址和端口与内部计算机IP地址与端口对应。MSN Messenger动态使用端口,需要NAT能动态端口映射。* 对于使用静态端口的情况,在NAT后面只能有一台计算机使用此功能。firewall的问题:* 对应MSN Messenger的TCP和UDP端口不能禁止,需要都开放。四、解决方法1、方案MSN Messenger使用了UPnP,我们只要在Linux网关中支持UPnP,就能让MSN Messenger实现自动获得相应的NAT或firewall信息,从而可以使用正确的IP地址和端口来通信。目前已经有Linux下的UPnP开发包(libupnp)和支持Internet Gateway Device规格的应用软件(linux-igd)。2、获得软件包libupnp-1.2.1.tar.gzhttp://sourceforge.net/projects/upnplinuxigd-0.92.tgzhttp://sourceforge.net/projects/linux-igd3、编译安装由于linuxigd-0.92原来是基于1.0.4版的UPnP开发包开发的,所以需要适当改动以支持最新的1.2.1版UPnP开发包。(1) 编译安装libupnptar xzvf libupnp-1.2.1.tar.gzcd libupnp-1.2.1/upnp/make DEBUG=1 WEB=0make install安装后UPnP开发包的头文件就安装在/usr/include/upnp目录下,库文件就安装在/usr/lib目录下。(2) 编译安装linuxigdtar xzvf linuxigd-0.92.tgzcd linux-igd/cp ../libupnp-1.2.1/upnp/sample/common/sample_util.c sample_util.cppcp ../libupnp-1.