我让StatsD守护进程在8125
的远程服务器(x.x.x.x
)上运行。我想把127.0.0.1:8125
转发给x.x.x.x:8125
。
我已经尝试在localhost上运行以下命令
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
正确工作
此外,这样的港口转运会不会引起安全问题?
发布于 2014-11-30 13:08:30
这不可能。
由本地进程生成的数据包不涉及转发计划。
因此,您将无法在本地生成的数据包中使用PREROUTING
和FORWARD
链,但是只有OUTPUT
(在raw/mangle/nat/filter
表中)和POSTROUTING
(在mangle/nat
表中)链,而路由决定已经做出,而且您不能更改它。
实际上,使用当前的iptable设置,考虑到用例,您的规则将执行以下操作:
x.x.x.x
。因此,结果是:本地数据包将尝试到达环回接口上的x.x.x.x:8125
。
这个网络过滤图可以帮助您理解本地生成的数据包在全局流中的位置。
https://serverfault.com/questions/647783
复制相似问题