从一台服务器上的一个站点到同一台服务器上的另一个站点

从一台服务器上的一个站点到同一台服务器上的另一个站点

大家好,我最近被要求管理几个运行 Web 服务器的 ubuntu 机器。我是一名职业开发人员,所以如果这个问题比较菜鸟,请原谅。

我们在这个机器上运行了大约十几个网站。其中两个网站需要通过 restful api 进行通信。不幸的是,我们通过 wget 连接网站时遇到了问题。当我们尝试从服务器上的命令行手动运行 wget 并指向该服务器上的一个网站时,它会挂起并最终超时。如果我们从服务器外部对服务器上的同一网站执行同样的事情,它就会正常工作。

是否有原因导致同一台服务器上的站点无法相互通信?从服务器 ping 站点时也会发生同样的事情。

答案1

我会检查 /etc/hosts 中是否有错误条目。我还会检查主机解析顺序和 DNS 配置。

例如,如果您的运行wget http://www.example.com/whatever包含/etc/hosts一个条目,www.example.com那么此命令在本地运行时将会失败。


编辑

/etc/hosts不包含通常意义上的“路线”(参见netstat -nr),它包含主机名和 IP 地址之间的关联。

您提到“内部 IP 名称”和“外部 IP” - 您指的是“外部 IP 地址”和“内部 IP 地址”,其中外部 IP 地址是路由器外部接口的地址,因此是互联网用户用来访问您的生产网络服务器的地址?

如果是这样,很可能您的 Web 服务器认为这是一个外部的 LAN 外 IP 地址,将流量转发wget到您的路由器,而路由器的 NAT 和端口映射不允许从其 LAN 端路由到该 IP 地址。

如果是这样,请编辑/etc/hosts并将外部 IP 地址替换为内部的ip-address 或添加一个额外的test.host.local条目内部的10.nnn ip 地址并在 中使用该新名称wget http://test.host.local/whatever

答案2

我假设你有一个像这样的设置:

Internet--NAT设备/路由器--内部网络-->Web服务器

假设 Web 服务器的名称为 www.example.com,解析为外部 IP 地址 1.2.3.4,NAT 设备 DNAT 1.2.3.4 至 10.4.4.4,这是 Web 服务器的内部 IP。

这对于外部客户端来说很有效,但内部客户端需要额外的配置。原因:假设内部客户端 (10.4.4.5) 想要访问 www.example.com (1.2.3.4)。它将流量发送到默认路由器(假设它是 NAT 设备,尽管更可能使用复杂的路由设置)。NAT 设备将目标 IP 从 1.2.3.4 NAT 到 10.4.4.4,并将流量发送到 10.4.4.4。(此时,哑 NAT 可能会发送(无用的)ICMP 重定向,因为流量从它进入的同一接口流出。)10.4.4.4 获取流量,制定响应,并将其发送回客户端 10.4.4.5。由于 Web 服务器位于同一子网中,因此没有进行路由/NAT。 10.4.4.5 接收来自 10.4.4.4 的流量并显示“WTF?”(即发送 TCP 重置数据包),因为它不是在与 10.4.4.4 通信。它正在与 1.2.3.4 通信,并且不知道 1.2.3.4 实际上是 10.4.4.4。只有 NAT 设备知道这一点。

对此问题有三个解决方案。

  1. SNAT。当 NAT 设备从内部接收到对 NAT 外部 IP 的请求时,它会将源地址 NAT 为其自己的 IP 地址(之一),以便从 Web 服务器获取响应并对其执行 DNAT。

  2. 不同的内部/外部 DNS。配置内部名称服务器以返回 www.example.com 的 10.4.4.4。(需要另一个名称服务器来使用外部 IP 地址处理外部查询。)

  3. 由于本例中的客户端是 Web 服务器本身,因此您可以添加 www.example.com 作为 127.0.0.1 的别名。(简单但不可扩展。)

相关内容