将端口转发到同一台机器上的端口

我过去在25570端口上运行一个服务,现在我将其更改为在25565端口上运行,但我仍希望那些尝试通过旧端口访问它的人能够访问该服务。因此,我想要将同一台机器上的25570端口转发到25565端口。

我知道有很多关于转发到不同机器的问题,但我想知道在使用同一台机器时是否有不同的方法?

2个回答

iptables -t nat -A PREROUTING -p tcp --dport 25570 -j REDIRECT --to-port 25565

这假设你不是将整个网络的流量通过这个盒子进行路由,如果你是的话,就不应该期望其他主机的流量会经过该端口。

3这怎么能够撤销呢? - Marco Lavagnino
1https://www.digitalocean.com/community/tutorials/how-to-list-and-delete-iptables-firewall-rules - 提出一个单独的问题 - RobotHumans
@MarcoLavagnino 使用类似的命令,只需将“-A”(代表“添加”)更改为“-D”(代表“删除”)。 - istepaniuk
正如答案所写,这种做法是危险的,因为如果您还使用主机进行任何类型的IP转发(例如通过此服务器进行NAT),此解决方案将重定向所有经过NAT的连接到另一个(本地)端口。我最近在做类似的事情时发现了这个问题。如果您有这样的设置,可以通过向规则添加更多限定条件来修复它,例如添加显式以太网接口名称,如果是用于从互联网接收传入连接的WAN端口,则不会普遍重定向出站NAT连接。 - BjornW

值得注意的是,接受的答案仅适用于连接到运行iptables的机器的其他网络主机。它不会重定向iptables机器上运行的客户端尝试连接到端口25570(例如)。
这些条目将转发来自网络或运行服务的本地主机的连接端口。
sudo iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
sudo iptables -t nat -I OUTPUT -p tcp -o lo --dport 443 -j REDIRECT --to-ports 8443

2谢谢!没有这个补充,我就无法让我的Vagrant虚拟机使用相同的端口来请求它正在提供的站点(与主机机器的端口一致),即主机= localhost:9000,现在客户机= localhost:9000(路由到:80)。 - Pebbl