WAN =====> 路由器(WAN1 接口使用我的公共 IP 设置)==> 将传入的 443 连接到 ====> Apache2 Web 服务器
apache2 在端口 443 上配置了一个虚拟主机,监听 mysite.com 的端口
问题:
我的 /etc/hosts 文件说:
172.16.xxx.xxx mysite.com
所以我打开浏览器并输入https://mysite.com一切顺利,服务器使用 https 协议在指定的虚拟主机上响应。
现在我想尝试使用我的公共 IP 连接到服务器。
更新后的 /etc/hosts 文件现在显示:
xxpublicipxx mysite.com
当我打开浏览器时,出现超时错误。我的路由器防火墙显示已接受 443 个连接
当我在 /etc/hosts 文件中使用私有 IP 时,服务器的 netstat 命令在 https 请求之后显示:
Proto Local Address Foreign Address State User PID/Program name</br>
tcp6 172.16.xxx.xxx:https 172.16.xxx.xxx.57154 ESTABLISHED www-data 8105/apache2
那就好了。
当我用我的公共 IP 更新主机时,我得到了
Proto Local Address Foreign Address State User PID/Program
tcp 172.16.10.20:https xxx.xxx.xxx.xxx:53618 SYN_RECV root -
连接卡在 SYN_RECV 中,并且在客户端我收到超时错误,并且如您所见没有 PID/程序。
有什么建议吗?
问题解决了
我的路由器是 Zyxel ZyWALL USG 100。为了获得有效的 WAN 连接,必须设置策略路由。
使用 Web 界面:
Configuration -> Network -> Routing -> Policy Route -> +Add
User: any
Incoming: any (Exluding ZyWALL)
Source Address: any
Destination address: ***LAN IP OF YOUR NAT(ted) LAN SERVER
DSCP Code: any
Schedule: none
Service: HTTPS
非常感谢!
答案1
这似乎是路由问题。客户端发送 SYN 以连接到服务器;服务器接收它并发送其 ACK;但客户端从未收到 ACK。wireshark 会话将证实这一点。它与 LAN IP 地址一起工作但与公共 IP 地址一起工作的事实也强烈表明路由器有问题。
很难确定路由器配置出了什么问题,但合理的猜测是它通过 WAN 接口发送 ACK,因此它永远不会到达客户端。换句话说,路由器的 NAT 坏了。
您能从 LAN 外部连接到服务器吗?