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

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

我在远程服务器 ( x.x.x.x)上运行了 StatsD 守护程序8125。我想转发127.0.0.1:8125x.x.x.x:8125

我已经尝试在本地主机上运行以下命令

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

但它无法正确转发。

echo "test.test.test:1|c" | nc -w 1 -u localhost 8125

失败并显示错误 nc:写入错误:连接被拒绝

echo "test.test.test:1|c" | nc -w 1 -u 127.0.0.1 8125

没有任何错误就失败了

echo "test.test.test:1|c" | nc -w 1 -u x.x.x.x 8125

正常工作

另外,这样的端口转发会导致任何安全问题吗?

答案1

那是不可能的。

本地进程生成的数据包不参与转发计划。

因此,您将无法使用本地生成的数据包将经过的表中的PREROUTING和链,但只能使用(表中的)和(表中的)链FORWARDOUTPUTraw/mangle/nat/filterPOSTROUTINGmangle/nat路由决策已经做出,你无法改变它

事实上,根据您当前的 iptables 设置,您的规则将根据您的使用情况执行以下操作:

  • 第一条规则:未达到。
  • 第二条规则:DNAT 将本地生成的数据包发送到x.x.x.x环回接口。
  • 第三条规则:使用环回接口的 IP 地址伪装通过环回接口的数据包。

所以结果是:本地数据包将尝试到达x.x.x.x:8125你的环回接口。

netfilter 图可以帮助您了解本地生成的数据包在全局流中的位置。

相关内容