Ubuntu

亂碼的 SSH 數據包、亂碼的 HTML 數據包,但並非在所有情況下

  • August 10, 2016

嘗試聯繫來賓 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)”,所有問題都消失了。

引用自:https://serverfault.com/questions/760490