免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6194 | 回复: 26
打印 上一主题 下一主题

请教大家iptable 进出的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-26 17:15 |只看该作者 |倒序浏览
1 我的路由器不设置 default route。
路由器中只有 eth0 和 拨号后的ppp0

2 路由器是使用 PPP拨号,有一路连接。

3 机器设置iptables,让所有来自 eth0的 tcp udp的数据重定向到
40030这个端口
  1. iptables -t nat -A PREROUTING -p tcp -s \
  2. 192.168.1.0/24 \! -d 192.168.1.6-j \
  3. REDIRECT --to-ports 40030
复制代码
。路由器中有个程序能够不用 default router帮助转发数据。(此程序向squid一样的功能,自己无需系统的route表)

4 路由器又做了 NAT的规则,让 8080重定向到 192.168.1.37:8080
  1. iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
  2. iptables -A FORWARD --in-interface eth0 -j ACCEPT
  3. echo 1> proc/sys/net/ipv4/ip_forward
  4. iptables -t nat -A PREROUTING -p tcp -i ppp0 -d $ipaddr1 --dport 8080 -j DNAT --to-destination 192.168.1.37:8080
复制代码



5 外网给 路由器 PPP的IP地址发送了8080的请求,随后路由转发了这个请求,给了内网 192.168.1.37。然后1.37回答请求。(我使用tcpdump抓包,看到1.37发送给外网IP回应请求)

问题:  路由器没有default route情况,是无法出去的,
但是我在设置了所有来自 eth0 的 TCP AND UDP的 包全部重定向到 40030端口,为何 1.37不走40030端口?
是因为 1.37接受到的 外网请求的数据做了什么吗?我的外网请求就是 一个 http的请求。

论坛徽章:
0
2 [报告]
发表于 2009-11-26 17:16 |只看该作者
谢谢各位,请给些提示。

论坛徽章:
0
3 [报告]
发表于 2009-11-26 17:31 |只看该作者
此案例是建立一个比较特殊的应用。

路由器中的软件要配合 ISP上面一个 SERVER帮助转发数据.

换句话说,挂在路由器后面的设备,如果访问 163.com,那么163看到的 ip地址不是 路由器 ppp的 IP地址,而是 ISP中托管 server的 IP地址。

论坛徽章:
0
4 [报告]
发表于 2009-11-27 11:44 |只看该作者
我个人的看法是

因为192.168.1.37接到http请求后回应也是要通过路由器进行nat的,你的路由器必须把192.168.1.37转换成ppp的ip地址才能传回请求端

另外,看样子你似乎只是把192.168.1.0/24网段对外网的访问请求端口重定向转发到isp的一台server上,由它来进行nat转换

这样,http对外网请求的回应已经被转换成ppp的地址,不会通过路由器上的端口重定向,而路由器上又没有自己的默认路由

会不会就是这个原因出的问题

而且就算是回包数据没有通过路由器的nat转换就被重定向,isp的server则不可能对这个数据包作源地址转换,同样出不去

不过我对两条规则哪个先起作用不是很清楚

[ 本帖最后由 0ZXCVBNM0 于 2009-11-27 12:41 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-11-27 14:41 |只看该作者
首先感谢楼上的兄弟答复。

是的,我尝试了下,在 做了 端口重定向后 (iptables -t nat -A PREROUTING -p tcp -s \
192.168.1.0/24 \! -d 192.168.1.6-j \
REDIRECT --to-ports 4003),如果设置了 route add default ppp0
数据就会通过 ppp1传输出去,和你的说法是一致的。

然后我认为 iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 是多余的,依旧不行。
你说的 规则顺序问题我也尝试,依旧不行。

看样子是必须从 问题出处着手了。呵呵。

谁有好点的主意?代替 iptables -t nat -A PREROUTING -p tcp -i ppp0 -d $ipaddr1 --dport 8080 -j DNAT --to-destination 192.168.1.37:8080 这个命令做端口转发呢?

谢谢各位了

论坛徽章:
0
6 [报告]
发表于 2009-11-27 16:07 |只看该作者
我想了下。

能否让 路由器 重设 回流的数据?
回去要经过 路由器代理端口 40030呢?

论坛徽章:
0
7 [报告]
发表于 2009-11-27 16:41 |只看该作者
ppp1?是否写错了?

我又查了查资料

数据包若匹配nat表中PREROUTING链的规则,那么是在路由之前便生效的

而当系统决定了数据包路由之后才执行POSTROUTING链中的规则

看来还是因为192.168.1.37的回包经过dnat转换后找不到路由

取消端口重定向规则中对源地址的限制,试试这样是否可以?

可否再多贴些iptables的相关配置呢?

[ 本帖最后由 0ZXCVBNM0 于 2009-11-27 17:35 编辑 ]

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
8 [报告]
发表于 2009-11-28 20:59 |只看该作者
LZ 你做一下下面的这个测试,然后给我测试结果。

从1.37主动发出来的TCP/UDP包能够重定向到40030端口呢?????

论坛徽章:
0
9 [报告]
发表于 2009-11-28 21:24 |只看该作者
原帖由 0ZXCVBNM0 于 2009-11-27 16:41 发表
ppp1?是否写错了?

我又查了查资料

数据包若匹配nat表中PREROUTING链的规则,那么是在路由之前便生效的

而当系统决定了数据包路由之后才执行POSTROUTING链中的规则

看来还是因为192.168.1.37的回包 ...




产生了PPP方面的笔误,但是运行时候命令肯定没错。

对,我查看了相关信息。我对iptables不熟悉。

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
10 [报告]
发表于 2009-11-28 21:28 |只看该作者
先看一下8楼的问题。
有一个特性我还不十分确定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP