![监听所有接口、多个服务器](https://linux22.com/image/787316/%E7%9B%91%E5%90%AC%E6%89%80%E6%9C%89%E6%8E%A5%E5%8F%A3%E3%80%81%E5%A4%9A%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我有一个服务器在所有接口上监听端口(使用 go net.Listen("tcp", ":{port}"))。我还有一个使用相同代码的备份服务器,用于在第一台服务器发生故障时启动。两台机器使用具有外部 IP 地址的同一路由器。路由器为每个连接的设备分配一个私有 IP 地址。客户端使用路由器的外部 IP(和给定端口)拨打服务器。
从备份服务器切换回第一台服务器时,两台服务器都会短暂地监听所有接口。同一台机器上不能有多个这样的监听器,但可以从不同的机器监听。我的问题是,如果有多个监听器从不同的机器(具有不同的私有 IP 地址)监听所有接口上的端口,会发生什么?客户端连接将在哪里发生?
答案1
只要您的路由器上没有配置任何端口转发,就根本不会发生任何客户端连接,目前似乎就是这种情况。
配置端口转发后,到此端口的客户端流量将被传递到端口转发中指定为目标的内部系统 - 每个特定端口只能有一个目标。这意味着您在端口转发中设置的内部系统将是连接发生的地方。