发布
社区首页 >问答首页 >透明地将本地端口转发到远程服务器

透明地将本地端口转发到远程服务器
EN

Server Fault用户
提问于 2014-11-28 13:19:13
回答 1查看 582关注 0票数 1

我让StatsD守护进程在8125的远程服务器(x.x.x.x)上运行。我想把127.0.0.1:8125转发给x.x.x.x:8125

我已经尝试在localhost上运行以下命令

代码语言:javascript
代码运行次数:0
复制
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p udp --dport 8125 -j DNAT --to x.x.x.x:8125
iptables -t nat -A OUTPUT -p udp --dport 8125 -j DNAT --to-destination x.x.x.x:8125
iptables -t nat -A POSTROUTING -d x.x.x.x -j MASQUERADE

但这并不是正确的转发。

代码语言:javascript
代码运行次数:0
复制
echo "test.test.test:1|c" | nc -w 1 -u localhost 8125

错误nc:写错误:连接被拒绝

代码语言:javascript
代码运行次数:0
复制
echo "test.test.test:1|c" | nc -w 1 -u 127.0.0.1 8125

失败,没有任何错误

代码语言:javascript
代码运行次数:0
复制
echo "test.test.test:1|c" | nc -w 1 -u x.x.x.x 8125

正确工作

此外,这样的港口转运会不会引起安全问题?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2014-11-30 13:08:30

这不可能。

由本地进程生成的数据包不涉及转发计划。

因此,您将无法在本地生成的数据包中使用PREROUTINGFORWARD链,但是只有OUTPUT (在raw/mangle/nat/filter表中)和POSTROUTING (在mangle/nat表中)链,而路由决定已经做出,而且您不能更改它。

实际上,使用当前的iptable设置,考虑到用例,您的规则将执行以下操作:

  • 第一条规则:未触及。
  • 第二条规则: DNAT在环回接口上本地生成数据包到x.x.x.x
  • 第三条规则:伪装数据包通过你的环回接口与你的环回接口的IP地址。

因此,结果是:本地数据包将尝试到达环回接口上的x.x.x.x:8125

这个网络过滤图可以帮助您理解本地生成的数据包在全局流中的位置。

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/647783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档