ILB配置後telnet不通

ILB後端server去telnet ILB 80測試,發現有時鏈接成功,有時超時失敗,經過子網中別的server去 telnet ILB 80 沒有問題,HTTPserver1和HTTPserver2的本地telnet localhost 80也沒問題。後端



1.這個問題能夠總結爲當ILB後端server 1 Telnet ILB 80時,若是ILB把流量轉發到server2 ,則會Telnet成功,若是ILB把流量轉發到server1自身,則會失敗。ide

2.根據咱們的測試和後臺的確認,Azure ILB會對進入的流量作DNAT,對於內部server出去的流量,會作SNAToop

blob.png


情景1:當server1 去telnet  ILB 80時,ILB將流量轉發到server2時會出現Telnet成功,這時ILB會對目的地址作一個轉換,轉換成server2的ip。此時這個請求的格式會變成測試

目的MAC:server2的MACspa

MAC:ILB的MAC設計

IP:server2 的IP10.0.1.6server

ip:server1的IP10.0.1.5blog

Server2回覆這個包的時候,因爲ILB充當的是網關的做用,因此這個包會回給ILB,ILB收到以後,會對這個包作一個SNAT,將原地址轉換成ILB的地址。因此咱們在server1上抓包的結果是Server1在和ILB 通訊,可是在server2上抓包時,會看到server2在和server 1通訊。ip

 

情景2:當server1去telnet  ILB 80時,ILB將流量轉發到server1自身時會出現Telnet失敗。這是由於ILB會對流量作一個DNAT。格式是虛擬機

目的MAC:server1 MAC

MAC:ILB MAC

目的IP:Server 1 的IP 10.0.1.5

ip:server1的IP,10.0.1.5

    當server1收到上述包以後,就會開始構建回包,此時他查到目的IP是自身,這樣的包屬於loopback環回包。會直接在虛擬機裏丟棄。

目的IP:Server 1 的IP 10.0.1.5

ip: server 1ip 10.0.1.5

 

在虛擬機裏抓包會看到虛擬機會每隔3s從新發出 SYN包。但沒有收到ILB回覆的ACK包,因而Telnet顯示結果就會出現timeout


工程師建議:

=========== 

   這是平臺ILB的設計和TCP/IP 協議原理決定的。後端server不做爲Client便可避免這個問題。

相關文章
相關標籤/搜索