Linux

為什麼在linux機器上,除了icmp以外的任何數據包都不通過,而在windows上卻正確通過

  • May 29, 2014

proxmox上有一個集群。在集群中有 vm - 配置路由器 (pfsense)。在我們的網中有Windows和Linux機器。

問題是:Windows 機器可以訪問網際網路,但 linux 機器沒有。

所有 Linux 機器的行為方式都相同,它發送請求並等待響應,但響應不會返回。我使用 wget、ssh 和 nslookup 檢查外部伺服器(8.8.8.8 範例)並 ping。一切都不起作用,除了 ping。ICMP 數據包正確通過,因此我冒昧地提出 TCP 的問題。但是對於所有 Windows 機器,一切正常。

我沒有為 linux 或 windows 創建特殊的過濾規則。

我打破了頭,但一直無法解決這個問題。

基線:

Our External IP:    XX.XXX.XX.XX
External Server IP:   Y.YYY.Y.YYY   (which was used to test)

因此,我進行了兩次測試:

測試 1. 來自 linux 機器的 wget:

從路由器擷取的數據包:

No.  Time         Source             Destination     Protocol Length Info
     1 0.000000  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     174 GET / HTTP/1.1
     2 21.798340 XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       74 49656 > http [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=173036151 TSecr=0 WS=128
     3 21.850793 Y.YYY.Y.YYY        XX.XXX.XX.XX       TCP       74 http > 49656 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSval=1304117522 TSecr=173036151 WS=1024
     4 21.850849 XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       66 49656 > http [ACK] Seq=1 Ack=1 Win=14720 Len=0 TSval=173036203 TSecr=1304117522
     5 21.850868 XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     174 GET / HTTP/1.1
     6 22.101939 XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     174 [TCP Retransmission] GET / HTTP/1.1
     7 22.605999 XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     174 [TCP Retransmission] GET / HTTP/1.1
     8 23.613997 XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     174 [TCP Retransmission] GET / HTTP/1.1
     9 25.629983 XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     174 [TCP Retransmission] GET / HTTP/1.1
    10 28.931894 Y.YYY.Y.YYY        XX.XXX.XX.XX       TCP       78 http > 11956 [FIN, ACK] Seq=1 Ack=1 Win=6 Len=0 TSval=1304124610 TSecr=172983238 SLE=109 SRE=110
    11 28.932001 XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       66 [TCP Previous segment not captured] 11956 > http [ACK] Seq=110 Ack=2 Win=115 Len=0 TSval=173043285 TSecr=1304124610
    12 29.661996 XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     174 [TCP Retransmission] GET / HTTP/1.1
    13 31.360021 XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     174 [TCP Retransmission] GET / HTTP/1.1

從我的外部伺服器擷取的數據包:

No.  Time         Source             Destination     Protocol Length Info
     1 0.000000  XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       76 49656 > http [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=173036151 TSecr=0 WS=128
     2 0.000059  Y.YYY.Y.YYY        XX.XXX.XX.XX       TCP       76 http > 49656 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSval=1304117522 TSecr=173036151 WS=1024
     3 0.059242  XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       68 49656 > http [ACK] Seq=1 Ack=1 Win=14720 Len=0 TSval=173036203 TSecr=1304117522
     4 0.059247  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     176 GET / HTTP/1.1
     5 0.303398  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     176 [TCP Retransmission] GET / HTTP/1.1
     6 0.809767  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     176 [TCP Retransmission] GET / HTTP/1.1
     7 1.815634  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     176 [TCP Retransmission] GET / HTTP/1.1
     8 3.836576  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     176 [TCP Retransmission] GET / HTTP/1.1
     9 7.088059  Y.YYY.Y.YYY        XX.XXX.XX.XX       TCP       80 http > 11956 [FIN, ACK] Seq=1 Ack=1 Win=6 Len=0 TSval=1304124610 TSecr=172983238 SLE=109 SRE=110
    10 7.134903  XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       68 11956 > http [ACK] Seq=110 Ack=2 Win=115 Len=0 TSval=173043285 TSecr=1304124610
    11 7.864582  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     176 [TCP Retransmission] GET / HTTP/1.1
    12 9.564772  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     176 [TCP Retransmission] GET / HTTP/1.1

測試 2. wget 從 windows 機器:

從路由器擷取的數據包:

No.  Time         Source             Destination     Protocol Length Info
     1 0.000000  XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       66 ampr-info > http [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
     2 0.053994  Y.YYY.Y.YYY        XX.XXX.XX.XX       TCP       66 http > ampr-info [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=1024
     3 0.054129  XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       54 ampr-info > http [ACK] Seq=1 Ack=1 Win=65536 Len=0
     4 0.054450  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     150 GET / HTTP/1.0
     5 0.110034  Y.YYY.Y.YYY        XX.XXX.XX.XX       TCP       60 http > ampr-info [ACK] Seq=1 Ack=97 Win=6144 Len=0
     6 0.113011  Y.YYY.Y.YYY        XX.XXX.XX.XX       HTTP     931 HTTP/1.1 200 OK  (text/html)
     7 0.115990  XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       54 ampr-info > http [RST, ACK] Seq=97 Ack=878 Win=0 Len=0

從我的外部伺服器擷取的數據包:

No.  Time         Source             Destination     Protocol Length Info
     1 0.000000  XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       66 ampr-info > http [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
     2 0.053994  Y.YYY.Y.YYY        XX.XXX.XX.XX       TCP       66 http > ampr-info [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=1024
     3 0.054129  XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       54 ampr-info > http [ACK] Seq=1 Ack=1 Win=65536 Len=0
     4 0.054450  XX.XXX.XX.XX       Y.YYY.Y.YYY        HTTP     150 GET / HTTP/1.0
     5 0.110034  Y.YYY.Y.YYY        XX.XXX.XX.XX       TCP       60 http > ampr-info [ACK] Seq=1 Ack=97 Win=6144 Len=0
     6 0.113011  Y.YYY.Y.YYY        XX.XXX.XX.XX       HTTP     931 HTTP/1.1 200 OK  (text/html)
     7 0.115990  XX.XXX.XX.XX       Y.YYY.Y.YYY        TCP       54 ampr-info > http [RST, ACK] Seq=97 Ack=878 Win=0 Len=0    

請幫幫我,有什麼想法嗎?

我過去曾看到過類似的問題。原來是由於校驗和解除安裝的問題。虛擬化客戶作業系統會將校驗和解除安裝到虛擬化主機,而虛擬化主機應該將其解除安裝到物理網路介面。

但最終校驗和從未計算過,數據包在沒有有效校驗和的情況下通過網路發送。在連接的接收端,由於校驗和無效,數據包將被丟棄。

在虛擬化主機和來賓上,您可以嘗試查找具有以下任何名稱的選項並嘗試將其關閉:

  • UDP校驗和解除安裝
  • TCP 校驗和解除安裝
  • UDP 分片解除安裝
  • TCP 分段解除安裝

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