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

Unix/Linux
linux查看内存的大小
在linux下写的代码,用的是utf-8,结果拿到XP下运行的时候,所有的中文都成乱码
linux su和sudo命令的区别
linux cron 下的定时执行工具使用技巧
linux 查找进程及终止进程操作的相关命令
redhat linux 安装 gcc编译器
Linux Mplayer播放各种格式的电影
一起回顾一下linux常用命令
Linux 网站项目发布要做哪些配置
linux SSH配合SecureCRT的密匙完美使用方法
GD 编译出错解决方法
Facebook Open Platform编译FAQ
Linux 系统硬盘 优化
linux 挂载详解
linux crontab定时命令
Linux 系统中确保访问三级域名畅通的方法
Linux 特权帐号VS普通帐号
确保Linux系统安全的前提条件 漏洞防护
Linux 监视系统资源使用率
Red Hat Linux上使用BIND建立DNS服务器

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 42 ::
收藏到网摘: 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.