免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2903 | 回复: 5

[网络管理] iptables怎么才能NAT 映射到 另一台主机后还是真实的客户端 IP [复制链接]

论坛徽章:
0
发表于 2009-03-20 02:43 |显示全部楼层
iptables -t nat -A PREROUTING -d 61.12.1.143 -p tcp --dport 19730 -j DNAT --to 121.11.104.11
iptables -t nat -A POSTROUTING -d 121.11.104.11 -p tcp --dport 19730 -j SNAT --to 61.12.1.143


客户端IP A.B.C.D 连接 61.12.1.143 19730 映射成功 进入 121.11.104.11 19730

可是在 121.11.104.11 主机上 连接的 不是 A.B.C.D , 而试 61.12.1.143

怎么才能实现 把 A.B.C.D 的IP 带到 121.11.104.11

论坛徽章:
0
发表于 2009-03-20 09:05 |显示全部楼层
NAT本身就是把ip a转化为ip b。你说的不知道怎么实现

论坛徽章:
0
发表于 2009-03-20 10:00 |显示全部楼层
把第2行去掉撒,别作源转换。

论坛徽章:
0
发表于 2009-03-21 11:41 |显示全部楼层
如果俺没说错的话,LZ对iptables概念不清!

论坛徽章:
0
发表于 2012-04-24 18:39 |显示全部楼层
本帖最后由 geoh 于 2012-04-24 18:49 编辑

经过我的实验,改变80端口到内网一台机器
如果不加POSTROUTING,改变源IP,数据就无法返回。
必须修改其SNAT。但是我也不知道该如何获取真实IP,据别人说可以在目标机器上也做转发来返回数据,但是不知道改怎么做,也许那样才能获取到真实IP并返回数据。

如果是Web Server 好解决一点,不用iptables做转发,而是用NginX做反向代理,
并添加HTTP的Header如下
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
服务器端读取$_ENV['X-Forwarded-For'];即可获取真实IP。

个人觉得主要是如下困扰

用户→服务器1→服务器2
如果不进行SNAT,则
服务器2→用户                  实际上用户和服务器2并没握手,也就无法分析收到返回的包。在这个过程中,服务器2只是充当了DDOS的角色。
做了SNAT,实际上是
服务器2→服务器1→用户     用户只和服务器1握手,所以只能分析从服务器1返回的包,而无法分析服务器2主动发送的包,

论坛徽章:
0
发表于 2012-04-25 17:55 |显示全部楼层
你把第二条改一下就可以了
iptables -t nat -A POSTROUTING -s 121.11.104.11 -p tcp --dport 19730 -j SNAT --to 61.12.1.143

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP