![如何配置端口转发以使另一台机器可以访问内部服务?](https://linux22.com/image/801272/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E4%BB%A5%E4%BD%BF%E5%8F%A6%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8%E5%8F%AF%E4%BB%A5%E8%AE%BF%E9%97%AE%E5%86%85%E9%83%A8%E6%9C%8D%E5%8A%A1%EF%BC%9F.png)
我有一个正在监听的现有服务127.0.0.1:2009
,并且我想从另一台机器访问该服务,因此我尝试配置端口转发来执行此操作:
sudo /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d xx.xx.xx.xx --dport 8192 -j DNAT --to-destination 127.0.0.1:2009
但它不起作用。当我尝试使用以下命令列出“nat”的所有规则时,我甚至看不到此规则:
$ sudo /sbin/iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
上面的 iptables 命令行有任何错误吗?
答案1
我认为你必须摆脱目的地,我有一个类似的规则,这将是适合你的问题的版本:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 8192 -j DNAT --to 127.0.0.1:2009
iptables -A INPUT -p tcp -m state --state NEW --dport 8192 -i eth0 -j ACCEPT
否则,发布你的完整 iptables 列表
(sudo) iptables -L -n -v
答案2
有一个sysctl
设置可以防止dnat
环回。eth0
请将以下内容替换为您流入的外部接口流量。
允许它
# sysctl -w net.ipv4.conf.eth0.route_localnet=1
并检查设置。
# cat /proc/sys/net/ipv4/conf/eth0/route_localnet
现在将您的设置dnat
为127.0.0.1
可以工作。