LinuxSir.cn,穿越时空的Linuxsir!

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

请问iptables可以同时对一个包做DNAT和REDIRECT吗?

[复制链接]
发表于 2004-12-17 07:47:35 | 显示全部楼层 |阅读模式
命令如下
iptables -t nat -A PREROUTING -p tcp -i eth0 -j DNAT --to 202.114.16.12
iptables -t nat -A PREROUTING -p tcp -d 202.114.16.12 -j REDIRECT --to-port 80
我怀疑是不是一个包经过PREROUTING时匹配第一条规则
iptables -t nat -A PREROUTING -p tcp -i eth0 -j DNAT --to 202.114.16.12后就直接跳出PREROURING链了,不会再去匹配第二条规则了,所以iptables -t nat -A PREROUTING -p tcp -d 202.114.16.12 -j REDIRECT --to-port 80在这里根本就没有起作用
究竟DNAT对包做完操作之后,包还会继续和其他的规则比较又或者不再继续比较当前链中的其他规则或父链中的其他规则直接跳出这条链呢?
发表于 2004-12-17 13:20:46 | 显示全部楼层
关注中……
发表于 2004-12-17 13:31:20 | 显示全部楼层
这个不会的。偶在iptables里面都用到了多个PREROUTING,都能匹配起来。如果你想把squid的端口REDIRECT到3128,可以多加上修饰,比如,指定相应的网卡。。
 楼主| 发表于 2004-12-19 07:40:34 | 显示全部楼层
你的意思是如果包匹配了第一条规则被执行DNAT操作之后还会继续与第二条规则比较
,然后发现匹配之后还会执行REDIRECT操作?如果有N条规则那数据包会与N条规则一一比较?
发表于 2004-12-20 09:27:11 | 显示全部楼层
看你怎么配置的了,dnat后,仍然可以继续redirect的。(我没想出来为什么不可以^_^)。
N条规则,就N此比较。
发表于 2004-12-20 10:15:33 | 显示全部楼层
偶的iptables有
iptables -t nat -A PREROUTING -s 192.168.1.0/24  -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#squid

还有nat ftp
iptables -t nat -A PREROUTING -i ppp0 -p tcp -m tcp --dport 8001 -j DNAT --to 192.168.1.100:21
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp -d 192.168.1.254 --dport 8001 -j DNAT --to 192.168.1.100:21

都能匹配起来。也不见得有什么问题。

说说你要实现什么功能?
 楼主| 发表于 2004-12-20 13:14:45 | 显示全部楼层
谢谢楼上,我用iptables+squid做透明代理
内网为172.24.0.0/19接口为eth0,限定其只能访问外网的一台web服务器202.114.16.12,公网eth1的ip202.116.52.6
squid工作在透明代理方式,监听80端口,配置没有问题
iptables配置命令如下
iptables -t nat -A PREROUTING -p tcp -i eth0 -j DNAT --to 202.114.16.12
iptables -t nat -A PREROUTING -p tcp -d 202.114.16.12 -j REDIRECT --to-port 80
iptables -t nat -A POSTROUTING -o eth1 SNAT --to 202.116.52.6
结果可以内网可以访问外部服务器,但是数据没有经过squid
 楼主| 发表于 2004-12-20 13:31:00 | 显示全部楼层
Post by faint
偶的iptables有
iptables -t nat -A PREROUTING -s 192.168.1.0/24  -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#squid

还有nat ftp
iptables -t nat -A PREROUTING -i ppp0 -p tcp -m tcp --dport 8001 -j DNAT --to 192.168.1.100:21
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp -d 192.168.1.254 --dport 8001 -j DNAT --to 192.168.1.100:21

都能匹配起来。也不见得有什么问题。

说说你要实现什么功能?

可是你的数据包都已经通过端口分开了,一个是80,一个是8001,不存在一个数据包同时匹配这两条规则,我的意思是同一个包同时匹配REDIRECT和DNAT
发表于 2004-12-20 17:50:22 | 显示全部楼层
这种情况只能用端口来区分了,那有什么办法?因为只有一个合法的ip啊。
如果有多个合法的ip,就不用了。
发表于 2004-12-20 17:55:08 | 显示全部楼层
Post by xiaohuforever
谢谢楼上,我用iptables+squid做透明代理
内网为172.24.0.0/19接口为eth0,限定其只能访问外网的一台web服务器202.114.16.12,公网eth1的ip202.116.52.6
squid工作在透明代理方式,监听80端口,配置没有问题
iptables配置命令如下
iptables -t nat -A PREROUTING -p tcp -i eth0 -j DNAT --to 202.114.16.12
iptables -t nat -A PREROUTING -p tcp -d 202.114.16.12 -j REDIRECT --to-port 80
iptables -t nat -A POSTROUTING -o eth1 SNAT --to 202.116.52.6
结果可以内网可以访问外部服务器,但是数据没有经过squid


你试着把前面两条规则合写成一条,加多些判断。内网的能访问到外部的服务器,那是因为你都SNAT了啊。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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