LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: cooleyes

使用linux作nat,后面的主机无法登录msn,也无法访问微软的网站

[复制链接]
 楼主| 发表于 2005-2-25 17:29:40 | 显示全部楼层
Post by ardin
QQ 和 MSN 是两种不同的协议吧 ?
在 Linux 下可以上而 win 下不能上, 我觉得可以排除 iptables 而把重点放在 win 下。
你的 win 有没有装杀毒软件? 有没有防火墙 ? 或者 Messenger 本身有没有问题?

以前我用mandrake当网关的时候,是可以的啊
我的win客户机,直接用adsl上网,也是可以用msn的
回复 支持 反对

使用道具 举报

发表于 2005-2-26 16:57:53 | 显示全部楼层

可能是沒有沒置默認原則的問題

試一下這個:

iptables  -F
iptables  -X
iptables  -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t filter -P INPUT    ACCEPT
iptables -t filter -P OUTPUT   ACCEPT
iptables -t filter -P FORWARD  ACCEPT
iptables -t nat -P PREROUTING  ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT      ACCEPT


iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
回复 支持 反对

使用道具 举报

发表于 2005-2-26 20:39:24 | 显示全部楼层
太神奇了吧.
${IPTABLES} -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
前面的几条清空不算, 就这样已经能让linux当网关了吗? 要不要安装其他的软件?
是不是要给这台机器配置多个ip地址?一个内网的一个外网的?
回复 支持 反对

使用道具 举报

发表于 2005-2-27 08:56:57 | 显示全部楼层
你说用 Linux 可以登陆 MSN,这台 Linux 是另一台客户机还是就是你的网关?另外,你的规则好象太简单了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-27 21:40:43 | 显示全部楼层
Post by Chowroc
你说用 Linux 可以登陆 MSN,这台 Linux 是另一台客户机还是就是你的网关?另外,你的规则好象太简单了。

是客户机,这台客户机装的是xp+debian的双系统
而nat主机是一台只装debian的系统
回复 支持 反对

使用道具 举报

发表于 2005-2-28 10:39:42 | 显示全部楼层
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-28 17:53:29 | 显示全部楼层
:help
Post by hzl790209
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

这个和我的不是差不多的吗?
还是不行啊
回复 支持 反对

使用道具 举报

发表于 2005-3-1 11:27:38 | 显示全部楼层
转发:( 忘记出处了)

(linux-br)Squid e Messenger
Mauricio Landucci mauricio.landucci em terra.com.br
Quinta Junho 24 22:35:16 BRT 2004

Mensagem anterior: (linux-br)ShellScript
Próxima mensagem: (linux-br)Squid e Messenger
Mensagens classificadas por: [ date ] [ thread ] [ subject ] [ author ]

--------------------------------------------------------------------------------

N?o vale rir.
Estou implantando um Squid na empresa onde trabalho e as mudan?as devem ser
gradativas para os usuários.
Tudo funciona legal, os filtros para sites e palavras, porém o MSN n?o
funciona, nem via programa e nem pelo site msn.com.br, messenger.com.br, etc
etc
"Ainda" n?o posso cortar o MSN dos usuarios, o que pode estar errado ?
Uso Red Hat 8.0 e Squid/2.4.STABLE7, na etho 192.168.0.? e na eth1 o ip
10.0.0.??? que sai para a ADSL com um alias pro 200.200.200.200
Abaixo, meu rc.local e squid.conf.

Obrigado a todos.

MAURICIO LANDUCCI
Analista de Suporte
Joinville, SC

---

touch /var/lock/subsys/local

echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe iptable_nat

ifconfig -a eth1:1 200.200.200.200 netmask 255.255.255.0

iptables -F

iptables -A INPUT -i eth0 -p tcp --destination-port 80:6000 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --destination-port 80:6000 -j ACCEPT

# MSN
iptables -A FORWARD -i eth0 -p tcp --dport 1863 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp -d 65.54.179.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp -d 0/0 --dport 4200:6000 -j ACCEPT

# IRC
iptables -A FORWARD -d 0/0 -p tcp --dport 6667:6700 -j REJECT
iptables -A FORWARD -d 0/0 -p udp --dport 1050:1060 -j REJECT

# Terra Chat - porta 9781
iptables -A FORWARD -d 0/0 -p tcp --dport 9781 -j REJECT

# Masquerade + Squid
#iptables -A FORWARD -i eth0 -s 192.168.0.0/255.255.255.0 -d 0/0  -j ACCEPT
#iptables -A FORWARD -i eth1 -s 10.0.0.0/255.0.0.0 -d 0/0 -j ACCEPT
#iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -j MASQUERADE
#iptables -t nat -A PREROUTING -p tcp -m multiport -s
#192.168.0.0/255.255.255.0 --dport 80,443 -i eth0 -j REDIRECT --to-ports 3128
回复 支持 反对

使用道具 举报

发表于 2005-3-1 11:29:15 | 显示全部楼层
http://xyg.dhis.org/articles/msn_msgr.txt 的内容:


让Linux NAT firewall支持MSN Messenger

作者:
dagger
无崖阁
xyg.ods.org

版本:
1.0        2003-06-22
        初始版本

一、引言
目前Linux的NAT和firewall只支持MSN Messenger的文字聊天,本文介绍了如何让Linux的NAT和firewall支持MSN Messenger的语音聊天、文件传送等其它功能的方法。

二、几个基本概念
1、Linux NAT
Network 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 ]----------------->OSTROUTING----->
            \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、UPnP
Universal 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.gz
http://sourceforge.net/projects/upnp
linuxigd-0.92.tgz
http://sourceforge.net/projects/linux-igd

3、编译安装
由于linuxigd-0.92原来是基于1.0.4版的UPnP开发包开发的,所以需要适当改动以支持最新的1.2.1版UPnP开发包。
(1) 编译安装libupnp
tar xzvf libupnp-1.2.1.tar.gz
cd libupnp-1.2.1/upnp/
make DEBUG=1 WEB=0
make install
安装后UPnP开发包的头文件就安装在/usr/include/upnp目录下,库文件就安装在/usr/lib目录下。

(2) 编译安装linuxigd
tar xzvf linuxigd-0.92.tgz
cd linux-igd/
cp ../libupnp-1.2.1/upnp/sample/common/sample_util.c sample_util.cpp
cp ../libupnp-1.2.1/upnp/sample/common/sample_util.h sample_util.h
并修改sample_utils.cpp文件:
把第661行的
*controlURL =
替换为
*controlURL = (char *)
把第671行的
*eventURL =
替换为
*eventURL = (char *)

修改gateway.h文件:
把第29行的
#define INIT_PORT          2869
替换为
#define INIT_PORT          52869

修改gate.cpp文件:
在第34行插入3行
#define UpnpDocument_free ixmlDocument_free
#define UpnpParse_Buffer ixmlParseBuffer
typedef IXML_Document *Upnp_Document;

链接头文件目录:
ln -s ../libupnp-1.2.1/upnp/inc upnp
并修改gate.h文件:
把第27行的
#include <upnp/upnp.h>
替换为
#include "upnp/upnp.h"

修改gateway.cpp文件:
把第36行的
#include <upnp/upnp.h>
替换为
#include "upnp/upnp.h"

修改sample_util.h文件:
把第43行的
#include "upnptools.h"
替换为
#include "upnp/upnptools.h"

再修改Makefile文件:
把第3行的
LIBS= -lpthread  /usr/lib/libupnp.so
替换为
LIBS= -lpthread -lupnp

以上都修改完后,执行make,make install
安装后执行文件在/usr/bin目录下,配置文件在/etc/linuxigd目录下。

4、配置运行
添加一条路由:
route add -net 239.0.0.0 netmask 255.0.0.0 eth1
这里eth1是连接内部网络的网卡。
在/usr/sbin目录下添加iptables的符号连接:
ln -s /sbin/iptables /usr/sbin/iptables
因为linux-igd使用/usr/sbin/iptables,而Redhat Linux 8.0的iptables在/sbin目录下。
启动linux-igd:
upnpd eth0 eth1
这里eth0是连接Internet的网卡。
upnpd的debug信息输出在/var/log/debug文件中,如果你的系统上没有这个文件,可以编辑/etc/syslog.conf文件,加入:
*.debug                /var/log/debug
并重新启动syslogd就可以了。

5、功能测试
upnpd程序正常启动后,我们可以在/var/log/debug文件中看到如下信息:
Jun 15 17:49:43 svr upnpd: The Linux UPnP Internet Gateway Device Ver 0.92 by Dime (dime@gulfsales.com)
Jun 15 17:49:43 svr upnpd: Special Thanks for Intel's Open Source SDK and original author Genmei Mori's work.
Jun 15 17:49:43 svr upnpd: Intializing UPnP with desc_doc_url=http://192.168.0.1:52869/gatedesc.xml
Jun 15 17:49:43 svr upnpd: ipaddress=192.168.0.1 port=52869
Jun 15 17:49:43 svr upnpd: conf_dir_path=/etc/linuxigd/
Jun 15 17:49:43 svr upnpd: UPnP Initialization Completed
Jun 15 17:49:43 svr upnpd: Setting webserver root directory -- /etc/linuxigd/
Jun 15 17:49:43 svr upnpd: Registering the root device
Jun 15 17:49:43 svr upnpd: RootDevice Registered
Jun 15 17:49:43 svr upnpd: Initializing State Table
Jun 15 17:49:43 svr upnpd: State Table Initialized
Jun 15 17:49:45 svr upnpd: Advertisements Sent

上面的192.168.0.1是网关计算机的eth1的IP地址。
在内部网络中的计算机上启动MSN Messenger,与Internet上的其他Messenger用户测试语音聊天、文件传输都可以正常使用了。
在/var/log/debug文件中看到如下信息:
Jun 15 17:53:47 svr upnpd: AddPortMap: RemoteHost: (null) Prot: 17 ExtPort: 2032 Int: 192.168.0.19.12216
Jun 15 17:53:47 svr upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 31989 Int: 192.168.0.19.13767

还可以使用iptables -t nat -L命令查看NAT配置情况,upnpd可以在PREROUTING中动态添加和删除表项。
注意:firewall还需要根据上面MSN Messenger的端口要求进行配置,在INPUT中开放相应的端口,并且FORWARD也需要ACCEPT。

五、参考资料
"NAT HOWTO",http://www.netfilter.org/documentation/
"acket Filtering HOWTO",http://www.netfilter.org/documentation/
"Windows Messenger in Windows XP: Working with Firewalls and Network Address Translation Devices",http://www.microsoft.com/windows ... t/natfw/default.asp
"UPnP NAT Traversal FAQ",http://www.microsoft.com/windows ... tworking/natfaq.asp
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-1 20:18:25 | 显示全部楼层
嗯,这个似乎有帮助
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表