将本地主机:端口转发到外部IP:新端口

将本地主机:端口转发到外部IP:新端口

我们已经在 Linux 服务器上运行了一个应用程序。从该应用程序中,当我们尝试访问 localhost(127.0.0.1):localport 时,它应该被转发到外部 IP。用户只会尝试访问某个端口上的本地主机,该端口将被自动转发。我阅读了 iptables nat 表,但如果正确的话,PREROUTING 和 POSTROUTING 将不适用,因为我从 localhost 本身访问 localhost 上的端口,而它根本不接触网络接口。想知道输出表可能有用,但当我尝试一些组合时,它不起作用。我使用的是正确的东西还是根本不可能做到这一点?

有人能指出我正确的方向吗?

答案1

我想自己做这件事。

应设置 2 条规则和一个标志来实现此目的。

这里使用的示例是telnet localhost XXXX,应该将数据包转发到Ext.er.nal.IP:YYYY

sysctl -w net.ipv4.conf.all.route_localnet=1

遗憾的是,该标志仅存在于最新的 Linux 内核上,而在旧内核上不可用(旧内核中也没有任何替代标志)。我不太确定哪个确切的内核是可用的标志。我相信它可以在内核版本 3.XX 上使用。

该标志将环回地址视为正确的源或目标地址。

来源对于 ip sysctl 命令。

iptables -t nat -A OUTPUT -p tcp --dport XXXX -j DNAT --to-destination Ext.er.nal.IP:YYYY

上述命令会将localhost:XXXX目标 IP 的数据包更改为Ext.er.nal.IP:YYYY

iptables -t nat -A POSTROUTING -j MASQUERADE

该命令会将源 IP 更改为您计算机的公共 IP。

-s您可以通过使用、-d和来添加适当的源和目标 IP 以及接口,-i从而使您的规则更加严格-o。看man iptables

感谢约翰·WH·史密斯和沃特尔。建议非常有帮助。

答案2

完成此操作的最简单方法是安装netcatinetd(Debian 在 参考资料中有此内容openbsd-inetd)。

添加一行/etc/inetd.conf

127.0.0.1:1234 stream tcp nowait root /bin/nc nc ex.ter.nal.ip 1234

将 替换1234为真实端口号和ex.ter.nal.ip真实外部 IP 地址。如果每分钟需要建立超过 128 个连接,您可能需要.1000在选项中附加或更大的数字;nowait这是为了防止失控的连接不必要地加载您的系统。

我也有-q 4 -w 10一些nc对我的情况有帮助的选择,但你可能不需要它。

inetd修改文件后重新加载inetd.conf

这样做使用ncstarted byinetd作为中继过程,效果非常好。

相关内容