我目前有 2 个负载平衡的 Ubuntu 12.04 服务器。如果我从 shell 找到任何人并输入:
wget stackoverflow.com
该页面被提取到index.html
. 但是,假设托管在这些服务器上的网站名为mysite.com
,调用
wget mysite.com
我得到:
Resolving mysite.com (mysite.com)... 50.XXX.YY.ZZZ
Connecting to mysite.com (mysite.com)|50.XXX.YY.ZZZ|:80... failed: Connection refused.
50.XXX.YY.ZZZ
的公共 IP在哪里mysite.com
。知道这些服务器出了什么问题吗?
基本问题是这样的:
服务器有一个私有的内部 IP 地址。(为简单起见,我将其称为 192.168.0.2。)
它打开从其私有内部 IP 地址到其公共地址的连接。(从 192.168.0.2 到 59.XXX.YY.ZZ)
这将按照服务器的默认路由到达路由器。(因为机器不知道公共地址与它自己相关联。)
路由器端口将请求转发到公网IP地址,转发给本机。该请求仍然具有 192.168.0.2 的源,但现在它具有 192.168.0.2 的目标。
机器接收到从 192.168.0.2 到 192.168.0.2 的连接,接受连接,并向自己发送响应。(因为它知道 192.168.0.2 是本地的。)
机器无法收到来自 192.168.0.2 的响应,因为它期待来自 59.XXX.YY.ZZ 的响应,并且连接尝试失败。
为了使发夹 NAT工作,路由器不仅必须将请求转发到正确的内部机器重写目的地,而且还必须重写源以确保回复数据包通过路由器返回,以便它们也可以进行 NAT 转换。许多路由器无法做到这一点,而且许多路由器可能需要特定配置。
放
在你的 /etc/hosts
我假设它使用公共 IP 将包裹路由到您的盒子外,并且它们以某种方式无法返回。