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)
それで、私は2つのテストを行いました。
テスト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. Windowsマシンからのwget:
ルーターからキャプチャされたパケット:
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
助けてください、何かアイデアはありますか?
私は過去に同様の問題を見てきました。チェックサムのオフロードの問題が原因であることが判明しました。仮想化ゲストOSは、仮想化ホストにチェックサムをオフロードします。仮想化ホストは、物理ネットワークインターフェイスにチェックサムをオフロードすることになっています。
しかし、最終的にチェックサムは計算されず、パケットは有効なチェックサムなしでネットワーク経由で送信されました。接続の受信側で、無効なチェックサムがあるためにパケットがドロップされます。
仮想化ホストとゲストの両方で、次の名前のいずれかを持つオプションを探して、それらをオフにすることができます。
数か月の作業の後、Windowsマシンのネットワークカードドライバーをvirtioに変換したところ、Windowsマシンでも問題が発生しました。それは十分に真実です、問題は個人的な非互換性pfSense(またはfreebsd)そしてvirtio)に関連しているようです-ドライバーまたはproxmoxの他のコンポーネント。
この時点で、私はこの問題を回避することにしました:
その結果、次のようになりました:
皆さん、ありがとうございました!
興味深い問題。ファイアウォールの問題のようには見えません。そうでない場合、最初の3ウェイTCPハンドシェイクは機能しません。また、TCP再送信にもかかわらず、機能しません。パケットが非常に小さく、両端にパケットが表示されているため、MTUの問題のようです。実際には、WebサーバーがGET要求に応答していないようです。
DNSルックアップはUDPを使用するため、これもまた別のことです。 SSHを試しているパケットキャプチャで何がわかりますか?また、外部サーバーのポート80にtelnetで接続し、手動のGETリクエストを発行した場合はどうなりますか。
telnet y.y.y.y 80
GET / HTTP/1.1
Host: y.y.y.y
<line feed>
HTTP1.0および1.1について上記を試してください。 LinuxとWindowsのパケットキャップのGETリクエストの違いに気づきました。問題ではありませんが、試す価値はあります。
残念ながら、まだコメントできません:-(
私が理解している限り、ルーターを通過し、ターゲットサーバーとの間で送受信されるパケットを確認しました。動作に問題のあるLinuxホストでtcpdumpまたはwiresharkを試し、実際にホストに到着/離脱するものを確認しましたか?
テストするもう1つのことは、テストのためだけにLinuxホストの1つでiptablesを完全に無効にすることかもしれません。ホストに特別なファイアウォールルールを設定していなくても、デフォルトのルールが正しく動作しない可能性があります。