LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 774|回复: 4

讨论一个问题?SNAT & MASQUERADE &ROUTE

[复制链接]
发表于 2006-3-29 22:11:40 | 显示全部楼层 |阅读模式
请教

还是这个问题,又做了一个星期的测试.
发现 如果SNAT 的话,有些时候内网直接连接内网地址端口服务不能连接,例如:
telnet 192.168.0.100 22,竟然没有回应,有时候非常正常.
但是如果用MASQUERADE一直没有问题.
iptables -t nat POSTROUTING -p tcp -s 192.168.0.100 -d 192.168.0.0/24 --sport 110 -j MASQUERADE
不解?
同时还想请教一个问题.有一些文档说POSTROUTING链是在路由之后的.我做了一个实验和这个理论好象有一些冲突,也可能是我理解不够深入

环境:
linux slackware ,kernel 2.6.13,补丁过equal
if0 add:221.0.0.1
if1 add:218.0.0.1
if2 add:218.0.0.2
if3 add:192.168.0.1
如果在linux本地路由表中增加下静态路由
route add -net 10.88.0.0/16 gw 221.0.0.1

在iptables脚本中增加:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0.0.0.0 -j SNAT --to 218.0.0.1-218.0.0.2

那么在192.168.0.0/24 网络中的任意终端运行下:
ping 10.88.0.254
如果10.88.0.254允许icmp ping.并且网络也正常,防火墙也允许icmp出入包.

数据请问是从哪个接口出去的呢? 是否"OSTROUTING链是在路由之后的"?
发表于 2006-3-29 23:15:47 | 显示全部楼层
route add -net 10.88.0.0/16 gw 221.0.0.1
这个好像怪怪的
回复 支持 反对

使用道具 举报

发表于 2006-3-30 00:14:48 | 显示全部楼层
Post by Recoilest
请教

还是这个问题,又做了一个星期的测试.
发现 如果SNAT 的话,有些时候内网直接连接内网地址端口服务不能连接,例如:
telnet 192.168.0.100 22,竟然没有回应,有时候非常正常.

你是在什么环境下没有回应的??一点情况没有透露~

Post by Recoilest
但是如果用MASQUERADE一直没有问题.
iptables -t nat POSTROUTING -p tcp -s 192.168.0.100 -d 192.168.0.0/24 --sport 110 -j MASQUERADE
不解?

这个有什么不解的?源地址为192.168.0.100,目的地址为192.168.0.0/24,源端口为110的数据包,在通过本机转发后,SNAT为动态源地址和源端口。

Post by Recoilest
同时还想请教一个问题.有一些文档说POSTROUTING链是在路由之后的.我做了一个实验和这个理论好象有一些冲突,也可能是我理解不够深入

环境:
linux slackware ,kernel 2.6.13,补丁过equal
if0 add:221.0.0.1
if1 add:218.0.0.1
if2 add:218.0.0.2
if3 add:192.168.0.1
如果在linux本地路由表中增加下静态路由
route add -net 10.88.0.0/16 gw 221.0.0.1

在iptables脚本中增加:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0.0.0.0 -j SNAT --to 218.0.0.1-218.0.0.2

那么在192.168.0.0/24 网络中的任意终端运行下:
ping 10.88.0.254
如果10.88.0.254允许icmp ping.并且网络也正常,防火墙也允许icmp出入包.

数据请问是从哪个接口出去的呢? 是否"OSTROUTING链是在路由之后的"?

route add -net 10.88.0.0/16 gw 221.0.0.1这样写没什么错误,但是建议你写成“route add -net 10.88.0.0/16 gw 221.0.0.1 dev if0”,这样可以明确指定通过接口if0出去。
按照你上述的iptabls语句,在192.168.0.0/24网络中ping 10.88.0.254会从if0接口出去,并修改源地址为218.0.0.1-218.0.0.2地址池中的随机一个。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-1 04:31:28 | 显示全部楼层
Post by orphen
你是在什么环境下没有回应的??一点情况没有透露~


这个有什么不解的?源地址为192.168.0.100,目的地址为192.168.0.0/24,源端口为110的数据包,在通过本机转发后,SNAT为动态源地址和源端口。


route add -net 10.88.0.0/16 gw 221.0.0.1这样写没什么错误,但是建议你写成“route add -net 10.88.0.0/16 gw 221.0.0.1 dev if0”,这样可以明确指定通过接口if0出去。
按照你上述的iptabls语句,在192.168.0.0/24网络中ping 10.88.0.254会从if0接口出去,并修改源地址为218.0.0.1-218.0.0.2地址池中的随机一个。


这样是ping不通的,请做测试
回复 支持 反对

使用道具 举报

发表于 2006-4-2 15:47:31 | 显示全部楼层
ping不通是正常的。
因为你的数据报从if0也就是221.0.0.1发出,却将源地址修改为218.0.0.1/2,远端的计算机如果不能连接到218.0.0.1/2的话,自然无法返回数据报回来,能通才怪
回复 支持 反对

使用道具 举报

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

本版积分规则

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