Ubuntu Fedora CentOSなどLinuxシステムで百度しかアクセスできない問題の解決方法
まず、この問題の背景知識を紹介します。
典型的なTCPパケットには最大ウィンドウサイズ64KBのウィンドウフィールドがあります。インターネット発展初期には、ほとんどのシステムがこれより大きなデータを処理できなかったため、このサイズで十分でした。しかし、現在の帯域幅アプリケーションにとっては小さすぎます。
この問題を解決するために、1992年にウィンドウスケーリングと呼ばれる解決策が提案されました。これは8ビットのスケーリング係数を含む追加のTCPウィンドウスケーリングオプションを提供します。このオプションの値はウィンドウの大きさを指定し、ウィンドウサイズ値を数ビットシフトすることで実現されます。例えば、スケーリング係数が5に設定されている場合、ウィンドウサイズは5ビットシフトするか32を乗じます。
ウィンドウスケーリングオプションはTCPのウィンドウ定義を16ビットから32ビットに拡張します。これはTCPヘッダーの変更によって実現されるのではなく、TCPヘッダーは依然として16ビットを使用し、16ビット拡張操作を実装するオプションを定義することで完成されます。
カーネル2.6.16以前では、デフォルトのスケーリング係数は0だったため、ウィンドウサイズは増加しませんでした。カーネル2.6.17では、スケーリング係数が7に設定されました。理想的には、これは問題にならないはずです。しかし実際には、一部の「壊れた」ルーターがウィンドウスケーリングTCPオプションを書き換えます - スケーリング係数を0に設定しますが、実際の処理能力オプションは変更しません。
本質的に、これはカーネル2.6.17以上を使用するシステムからアクセスできないウェブサイトがあることを意味します。カーネル開発者の立場からすると、それらのルーターは壊れていて交換が必要だと考えています。実際には、これらのルーターは修理または交換される前に何年も使用され続ける可能性があります。
この問題を解決する一つの方法は、Linuxカーネルのウィンドウスケーリングオプションをリセットすることです。これは壊れたルーターを修正しませんが、ウィンドウスケーリングの問題の影響を受けている場合、この方法でシステムをリモートサイトに接続できます。
解決方法は、/etc/sysctl.confファイルを編集して、次の行を追加します:
net.ipv4.tcp_window_scaling = 0前の#を削除します
これにより、ウィンドウスケーリング機能が完全に無効になり、以前接続できなかったサイトに接続できるようになります。正しいか間違いかにかかわらず、カーネル開発者はこの変更を元に戻すことを拒否しているため、このオプションを使用することで、独自のウィンドウスケーリング機能を無効にして2.6.17以前のデフォルト設定に戻すことも、到達できないサイトに接続して壊れたルーターを見つけて交換すべきだと確信させることもできます。