我在 kvm 客户机上有一个服务器(邮件 - postfix+dovecot,网络 - apache),主机位于普通路由器(zte 或 ISP 提供的任何路由器)后面的本地网络上。KVM 客户机的 IP 与主机位于同一子网中。(主机上的 wicked+network bridge)
如果我尝试在客户端位于 LAN 之外时访问内容(例如 4g 链路上的移动设备或完全不同的网络),一切都会正常运行。
问题是,当我尝试在客户端与服务器登录到同一网络时进行连接时,它就超时了。
到目前为止,我已经禁用了所有防火墙并尝试过......没有成功。路由器上的所有端口转发都运行良好,因为所有内容都可以从外部访问。
有什么想法吗?我可以尝试看看到底出了什么问题或卡在哪里。
Dovecot 调用甚至没有记录在服务器上,当客户端在本地网络上时,也没有任何数据包到达服务器。
但是 Apache 可以工作,我可以在本地网络上查看该网站,尽管我无法从同一台计算机通过端口 80 或 443 远程登录服务器。
答案1
会发生什么?
您的客户端很可能正在尝试连接到您的 ISP 的公共 IP。
大多数消费者调制解调器/路由器不支持环回连接。
因此,基本上发生的情况是,请求被发送到调制解调器,调制解调器看到不在路由器 DHCP 范围内的 IP 地址,并认为:哦,这是用于互联网的。它向 ISP 发出请求,ISP 立即将其发回。
调制解调器此刻正在发送流量,因此端口被占用,从而导致连接超时。
在支持环回的设备上,调制解调器足够智能,能够理解该请求是针对其自身的,并根据端口转发规则集转发连接。
怎么解决?
您需要做的是要求您的客户端不要使用公共 IP 地址,而是使用本地 IP 地址。
假设您的公共 IP 地址是:123.45.67.89,并且端口转发设置为将端口 1234 重定向到 IP:192.168.0.1,那么客户端将需要连接到 192.168.0.1,而不是使用 123.45.67.89。