服务器在 LAN 外部无响应

服务器在 LAN 外部无响应

我有一台运行 Apache 的 Ubuntu Server 14.04,它位于公司防火墙后面。上个月它一直运行良好,但现在服务器无法响应来自 LAN 外部的请求(防火墙进行端口转发)。现在我最初的想法是认为 Apache 出了问题,但当我尝试使用内部地址(192.168.8.10)访问服务器时,一切正常。当我尝试从本地网络进行 telnet 时:

$ telnet 192.168.8.10 80
Trying 192.168.8.10...
Connected to 192.168.8.10.
Escape character is '^]'.

服务器上的 Netstat 显示以下输出:

$netstat -n -c | grep "192.168.8.19:80"
tcp        0      0 192.168.8.10:80         192.168.8.250:49728     SYN_RECV
tcp        0      0 192.168.8.10:80         192.168.8.250:49728     SYN_RECV
tcp        0      0 192.168.8.10:80         192.168.8.250:49728     SYN_RECV
tcp        0      0 192.168.8.10:80         192.168.8.250:49728     SYN_RECV
tcp        0      0 192.168.8.10:80         192.168.8.250:49728     SYN_RECV

当我http://192.168.8.10在浏览器中访问时,netstat 会生成:

$netstat -n -c | grep "192.168.8.19:80"
tcp6       0      0 192.168.8.10:80         192.168.8.252:63798     ESTABLISHED
tcp6       0      0 192.168.8.10:80         192.168.8.252:63798     ESTABLISHED
tcp6       0      0 192.168.8.10:80         192.168.8.252:63798     ESTABLISHED
tcp6       0      0 192.168.8.10:80         192.168.8.252:63798     ESTABLISHED
tcp6       0      0 192.168.8.10:80         192.168.8.252:63798     ESTABLISHED
tcp6       0      0 192.168.8.10:80         192.168.8.252:63798     FIN_WAIT2
tcp6       0      0 192.168.8.10:80         192.168.8.252:63798     FIN_WAIT2
tcp6       0      0 192.168.8.10:80         192.168.8.252:63798     FIN_WAIT2

现在,当我从 LAN 外部尝试执行此操作时,telnet 无法连接并且浏览器超时。

$ telnet 78.xx.xx.245 80
Trying 78.xx.xx.245...

这只是无限期挂起,但 netstat 仍然确认SYN_RECV数据包。

$ netstat -n -c | grep "192.168.8.19:80"
tcp        0      0 192.168.8.10:80         194.xx.xx.62:52721      SYN_RECV
tcp        0      0 192.168.8.10:80         194.xx.xx.62:52721      SYN_RECV
tcp        0      0 192.168.8.10:80         194.xx.xx.62:52721      SYN_RECV
tcp        0      0 192.168.8.10:80         194.xx.xx.62:52721      SYN_RECV

浏览器测试不会在 netstat 中产生任何输出。

这让我认为问题出在防火墙的端口转发上。但是当我尝试将端口 80 转发到 Windows 服务器时,它工作得非常好。当我将端口 80 更改为转发回 Ubuntu 服务器时,问题仍然存在。telnet 测试实际上通过防火墙到达服务器,这一事实表明防火墙不是问题所在。

我的 IT 部门告诉我,过去几天防火墙的配置没有发生任何变化,我也没有对服务器进行任何更改。事实上,尝试将端口 80 转发到其他运行 apache 的 Ubuntu 桌面机器产生了相同的结果(尽管有 netstat 输出,但浏览器挂起并且 telnet 无法连接)。

其他端口已成功转发到防火墙后面的 Windows 服务器(转发到 Windows 服务器时 80 端口也能正常工作),因此我认为问题不在于 ISP。这似乎只是 Ubuntu 的问题。

有谁知道这可能是什么原因,因为这对我们来说现在是一个大问题?

答案1

当主机可以与 LAN 通信但不能与 LAN 外部通信时,最有可能出现的配置错误是网关 IP 地址不正确。

如果网关配置错误的主机是 TCP 连接的服务器端,则症状是 SYN 数据包被接收并接受,但由于网关地址不正确,SYN-ACK 数据包无法传送。这与您的问题中描述的症状一致。

一种糟糕的解决方法是在网关处对传入连接的源 IP 进行 NAT,这似乎是您的 IT 部门所做的。这不是一个好主意,因为您会在日志文件中丢失客户端 IP 地址,并且可能会引入额外的连接跟踪。但是,它可能看起来工作正常,因为服务器不再将数据包发送到客户端 IP 地址,而是发送到网关 IP 地址,因为它位于直接连接的网段上,所以不依赖于配置错误的默认网关。

在这种情况下,正确的解决方法是在服务器上配置正确的网关 IP 地址,并恢复在防火墙上应用的解决方法。

如果您的 Ubuntu 服务器配置了静态 IP 地址,则 IP 地址和网关地址均位于 中/etc/network/interfaces。更改该文件将在下次重启时生效。

答案2

尝试 sudo ufw disable

还请检查 conf 文件中的 Apache 配置。 /etc/apache2/apache2.conf

例如:- /var/www

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted </Directory>

答案3

曾是防火墙的配置问题。显然,防火墙规则启用 NAT 以使端口转发正常工作。IT 部门向我保证,这是不是之前就已打开(尽管它之前一直有效),而且这似乎只有在将端口转发到 Linux 服务器时才会出现问题(即 Windows 服务器不需要在相关防火墙规则上启用 NAT,端口转发才能成功工作)。

编辑 这仅仅是问题的冰山一角。正如 kasperd 所指出的,问题出在服务器上的网关配置上。

相关内容