Chinaunix

标题: 问一个DNAT与telnet的问题 [打印本页]

作者: Knud    时间: 2006-05-31 14:28
标题: 问一个DNAT与telnet的问题
我打开了ip_forward,然后执行

iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 81 -j DNAT --to-destination a.b.c.e:80
iptables -t nat -A POSTROUTING -d a.b.c.e -p tcp --dport 80 -j MASQUERADE

这个a.b.c.e提供http服务。telnet a.b.c.e 80会得到正确返回,
但是telnet a.b.c.d 81却返回拒绝连接。

请问这是怎么回事呢?
作者: platinum    时间: 2006-05-31 14:32
语法没错,逻辑吗。。。
你的需求是什么啊?谁访问谁?从哪访问?外网内网?当前 iptables 设置又是什么?
这些都没说,是要猜谜语还是玩推理?
作者: Knud    时间: 2006-05-31 14:37
哈哈。是我说少了。

先说目的吧。其实就是想用telnet来看看端口转发是否成功了。因为不想开浏览器去浏览就想用telnet加端口的方法。

iptables中所有的表filter和nat的所有链。都使用了ACCEPT策略——其实mangle因为弄不懂,就没有设置,使用的是默认策略。
作者: platinum    时间: 2006-05-31 14:48
>> 谁访问谁?从哪访问?外网内网?当前 iptables 设置又是什么?
还是一个没说

>> 其实就是想用telnet来看看端口转发是否成功了
谁访问谁?从哪访问?外网内网?

>> iptables中所有的表filter和nat的所有链。都使用了ACCEPT策略
是默认规则还是里面的具体规则?

>> 其实mangle因为弄不懂,就没有设置,使用的是默认策略。
“默认策略”又是什么策略?

说些题外话
不是很多人不愿意回答有些人的问题,是因为不知道怎么回答,问都没问清楚,想我这样,到底是谁在问谁?
很好的一篇文章〈提问的智慧〉在各个版几乎都有贴,google 上随便都能找到,又有多少人去看?
提问的人不要自己定性“XXX 没问题,YYY 却不行”,直接贴出客观数据就好了,有没有问题不是提问的人说了算的
像这样的问题(http://bbs.chinaunix.net/viewthr ... &extra=page%3D1),我觉得很可笑
作者: Knud    时间: 2006-05-31 16:49
版主教育的是。

这是我的iptables-save结果:

  1. iptables-save
  2. # Generated by iptables-save v1.2.7a on Wed May 31 16:42:37 2006
  3. *nat
  4. :PREROUTING ACCEPT [21195:1141849]
  5. :POSTROUTING ACCEPT [7694:728967]
  6. :OUTPUT ACCEPT [7695:729027]
  7. -A PREROUTING -i eth0 -p tcp -m tcp --dport 81 -j DNAT --to-destination a.b.c.e:80
  8. -A POSTROUTING -d a.b.c.e -o eth0 -p tcp -m tcp --dport 80 -j MASQUERADE
  9. COMMIT
  10. # Completed on Wed May 31 16:42:37 2006
  11. # Generated by iptables-save v1.2.7a on Wed May 31 16:42:37 2006
  12. *filter
  13. :INPUT DROP [3335:697389]
  14. :FORWARD ACCEPT [38993:27857805]
  15. :OUTPUT ACCEPT [1134028:778542141]
  16. -A INPUT -i lo -j ACCEPT
  17. -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
  18. -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
  19. -A INPUT -i eth0 -p tcp -m tcp --dport 81 -j ACCEPT
  20. -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
  21. -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  22. COMMIT
  23. # Completed on Wed May 31 16:42:37 2006
复制代码


在一楼的描述中,我把INPUT的策略说错了,应该是DROP。

这个机器是单独的网卡,希望实现访问a.b.c.d的81端口时候可以转到a.b.c.e的80端口。

下面是telnet的结果

  1. telnet a.b.c.d 81
  2. Trying a.b.c.d...
  3. telnet: connect to address a.b.c.d: Connection refused
复制代码

作者: platinum    时间: 2006-05-31 17:34
只有 eth0 网卡吗?
a.b.c.e 与你的网络拓扑又是怎样的呢?
a.b.c.e 的网络设置又是怎样的呢?
作者: Knud    时间: 2006-05-31 18:28
哦,是的。机器只有一个网络接口。

a.b.c.d和a.b.c.e是一个网络里的两台机器。端口转发已经实现。

telnet a.b.c.e的80是可以的。可以返回页子内容。
telnet a.b.c.d的81就显示上面的错误。
作者: platinum    时间: 2006-05-31 18:37
试试这个

  1. service iptables stop
  2. echo 1 > /proc/sys/net/ipv4/ip_forward
  3. iptables -t nat -A PREROUTING -d a.b.c.d -p tcp --dport 80 -j DNAT --to a.b.c.e:81
  4. iptables -t nat -A POSTROUTING -d a.b.c.e -p tcp --dport 80 -j SNAT --to a.b.c.d
复制代码

作者: Knud    时间: 2006-06-01 07:29
容我赘言,版主可能错会我意了。

端口转发已经实现。即对a.b.c.d的81端口使用浏览器浏览可以访问到a.b.c.e的80提供的服务。

我的意思是:我使用telnet对a.b.c.d的81端口发出请求,却得到连接拒绝的提示;而telnet到a.b.c.e的80却可以得到页面内容。

-------
不过,现在出现了新问题。

我原来都是在Linux机器上telnetLinux自己的,结果返回

  1. telnet a.b.c.d
  2. Trying a.b.c.d...
  3. telnet: connect to address a.b.c.d: Connection refused
复制代码


但是今晨使用同一网段内的WinXP机器却转发成功了。

有点混乱了,呵呵。
作者: platinum    时间: 2006-06-01 08:21
端口转发已经实现。即对a.b.c.d的81端口使用浏览器浏览可以访问到a.b.c.e的80提供的服务。

我的意思是:我使用telnet对a.b.c.d的81端口发出请求,却得到连接拒绝的提示;而telnet到a.b.c.e的80却可以得到页面内容。

这个需要你自己分析了,或者提供更多信息来帮你分析,感觉这已经不是网络层的问题了

不过,现在出现了新问题。

我原来都是在Linux机器上telnetLinux自己的,结果返回


  1. telnet a.b.c.d
  2. Trying a.b.c.d...
  3. telnet: connect to address a.b.c.d: Connection refused
复制代码

但是今晨使用同一网段内的WinXP机器却转发成功了。

有点混乱了,呵呵。

那就先自己整理一下思路吧
作者: Knud    时间: 2006-06-01 09:59
谢谢版主的帮助。


问题的发出就是想在Linux主机上测试规则,结果受阻,而问。
问题到现在仍然没有解决,的确如版主所言,我还是自己考虑考虑吧。哈哈。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2