我在 Azure 服务上的 Ubuntu 机器上遇到了出站通信问题。我使用 Ubuntu 14.04 设置了服务器(也尝试过 12.04),并且我可以通过 SSH 进入机器或浏览机器,没有任何问题。我遇到的问题是,当我设置的应用程序尝试连接到 MongoDB 副本集时,它无法连接,抛出了以下两个错误:
pymongo.errors.AutoReconnect: [Errno 110] Connection timed out
和:
bson.errors.InvalidDocument: BSON document too large (7754 bytes)
- the connected server supports BSON document sizes up to 0 bytes
mtr --report
在副本集的域上以及 google 或 microsoft 或 stackoverflow 或 serverfault 上运行我总是得到以下返回:
Start: Fri Jul 25 09:35:38 2014
HOST: hostname Loss% Snt Last Avg Best Wrst StDev
如果我尝试 ping 域,我会得到以下结果:
PING serverfault.com (198.252.206.16) 56(84) bytes of data.
^C
--- serverfault.com ping statistics ---
106 packets transmitted, 0 received, 100% packet loss, time 105135ms
我不知道该怎么做。任何帮助都非常感谢。这是一个标准的 VM 设置,ssh 和 https 端口打开,没有虚拟网络。如果您需要其他任何东西,请告诉我,我会尽力提供。
答案1
Azure 不支持虚拟网络之外的 TCP 和 UDP 以外的任何协议。因此,您将无法使用 ping (ICMP) 出站。Traceroute 也将不起作用(即使出站探测使用 TCP SYN 或 UDP),因为它依赖于 ICMP TTL 过期消息来返回您的主机。
因此,您尝试的 ping 和 mtr 实际上没有任何意义。您可以尝试使用类似“nc -vz www.serverfault.com 80”的命令,它将检查您是否可以通过 Web 端口进行连接。您应该会看到类似以下内容的内容:
$ nc -vz www.serverfault.com 80
Connection to www.serverfault.com 80 port [tcp/www] succeeded!
至于您的应用程序和数据库之间的通信,您在这里提供的信息太少,无法正确解决这个问题。
一些一般性提示:如果您在同一个 Azure 虚拟网络上拥有应用程序和数据库服务器,则可以使用虚拟网络中的内部 IP 地址与数据库通信。由于它们不在同一个虚拟网络上,因此您需要在数据库服务器上设置一个端点并检查您的访问控制列表(记住安全要求)。这个问题可能会有所帮助:https://stackoverflow.com/questions/13995734/azure-vms-virtual-network-inter-communication。