我有一个服务器在所有接口上监听某个端口(使用 go net.Listen("tcp", ":{port}"))。我还有具有相同代码的备份服务器,以便在第一台服务器出现故障时启动。两台机器使用具有外部 IP 地址的同一路由器。路由器为每个连接的设备分配一个私有IP地址。客户端使用路由器的外部 IP(和给定端口)拨打服务器。
从备份服务器切换回第一台服务器时,两者都会在所有接口上监听一段时间。同一台机器上不能有多个这样的监听器,但可以从不同的机器上监听。我的问题是,如果有多个侦听器在所有接口上侦听来自不同计算机(具有不同的私有 IP 地址)的端口,会发生什么情况?客户端连接将在哪里发生?
只要您的路由器上没有配置任何端口转发(目前看来就是这种情况),就根本不会发生客户端连接。
配置端口转发后,到该端口的客户端流量将传递到在端口转发中指定为目标的内部系统 - 特定端口只能有一个。这意味着您在端口转发中设置的内部系统将是发生连接的系统。