尝试联系来宾 VM 时,我遇到了一个非常奇怪的问题,即数据包上的标头丢失。
我有运行 CentOS 7 和 VirtualBox v.5.0.14 的裸机。然后我有一个使用桥接网络运行 Ubuntu 15.10 的来宾。它很高兴地从我们的 DHCP 服务器中获取了它的 IP 地址。来宾正在运行 SSH 和 Apache。
在以下测试中使用的 VirtualBox 主机、来宾和所有客户端上都禁用了所有防火墙。
我可以从访客通过 SSH 连接到我们网络上的任何其他 Linux 主机。我还可以连接到由 Windows 主机提供的 Windows Samba 服务 =D
- 从 VirtualBox 主机访问来宾时,SSH 和 Apache 工作。同样,我可以从 guest =D SSH 到 VBox 主机
- 从 Ubuntu 笔记本电脑访问来宾时 SSH 和 Apache 工作 =D
- 从 CentOS 7 VM 访问来宾时 SSH 和 Apache 工作 =D
- 在 Windows 中使用 PuTTY SSH 到 VBox 主机工作正常 =D
一切正常,对吧?
- 来自任何使用 PuTTY 的 Windows 主机的 SSH 会导致“数据包在解密时出现乱码”错误 =(
- 任何 Windows 主机上的 Apache 都会导致无法理解的文本输出到屏幕,或者它会尝试下载包含相同无法理解的文本的文件,具体取决于浏览器 =(
使用 Solaris 获取 Apache 网页或 SSH 可以让我们更深入地了解一些情况。我猜它的行为与 Windows 主机相同,除了我们得到更多的调试输出。
ssh fullyqualifiedguesthostname
0000 0000 0000 a89f
Disconnecting: Bad packet length 0.
该行数字的结尾每次都不同,带有一个十六进制字符串。即 0000 0000 0000 xxxx
当使用 wget 获取网页时...
wget --no-proxy fullyqualifiedguesthostname
--09:57:38-- fullyqualifiedguesthostname
=> `index.html'
Resolving fullyqualifiedguesthostname... x.x.x.x
Connecting to fullyqualifiedguesthostname|x.x.x.x|:80... connected.
HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9
Length: unspecified
[ <=> ] 11,638 2.33K/s
09:57:43 (2.33 KB/s) - `index.html' saved [11638]
注意No 标头,假设 HTTP/0.9
此外,下载这个 11Kb 文件需要几秒钟的时间。
在 Ubuntu 主机上使用 wget:
wget --no-proxy fullyqualifiedguesthostname
--2016-02-26 10:08:06-- fullyqualifiedguesthostname
Resolving fullyqualifiedguesthostname (fullyqualifiedguesthostname)... x.x.x.x
Connecting to fullyqualifiedguesthostname (fullyqualifiedguesthostname)|x.x.x.x|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11321 (11K) [text/html]
Saving to: ‘index.html’
100%[=========================================================>] 11,321 --.-K/s in 0s
2016-02-26 10:08:06 (160 MB/s) - ‘index.html’ saved [11321/11321]
没有问题,没有关于缺少标题的消息,正如您所期望的那样,眨眼间就完成了。
现在这里是下载到 Solaris 主机上的 index.html 文件的第一行:
cat index.html
.1 200 OK
Date: Fri, 26 Feb 2016 10:18:26 GMT
Server: Apache/2.4.12 (Ubuntu)
Last-Modified: Tue, 26 Jan 2016 15:38:24 GMT
ETag: "2c39-52a3e79e18489"
Accept-Ranges: bytes
Content-Length: 11321
Vary: Accept-Encoding
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
正常的、不受干扰的 HTML 代码如下。
在 Ubuntu 主机上下载的 index.html 文件不包含这些第一行。它只是 HTML 代码。
我假设缺少的标题是从 Windows 主机访问网页时导致无法理解的文本的原因 - 浏览器不知道文件是什么,因此不知道如何显示它。我还假设 SSH 失败也是如此 - 缺少标头。
我还应该注意,我可以从任何地方 ping 来宾,Windows、Linux、Solaris。
我认为这几乎涵盖了这个混乱网络中的所有变量。
有谁知道到底发生了什么?
我将客户操作系统的网络适配器类型更改为“准虚拟化网络(virtio-net)”,所有问题都消失了。