TCP オフロードを無効にする(完全に、一般的に、簡単に)

TCP オフロードを無効にする(完全に、一般的に、簡単に)

無効にしたいTCP オフロード(TOE) を Debian サーバーで使用します。次のようなものを使用します:

ethtool -K …

ただし、いくつか希望があります。Debian にきれいに統合することは可能でしょうか?

これは、いいえrc.local、疑似 RC スクリプトも避けたいということです。

おそらく、ethtoolのオプションを使用して TOE を構成解除する pre-up.d/hook をインストールして使用しているのでしょう/etc/network/interfaces

FAI を使用して、一般的な方法ですべての (将来の) サーバーを構成解除したいと思います (FAI はすでに導入されており、必要であるため)。

一部のハードウェアでサポートされていない toe オプションについてはどうでしょうか? 存在しないオプションを無効にすると、ネットワークは失敗しますか? そうしない方が堅牢だと思いますが、これも私が望んでいる解決策ではないようです。

現時点ではオプションが 11 個あるため、設定が非常に乱雑になります。複数の NIC を使用すると、エラーが発生しやすくなるようです。

もっと一般的な解決策はないでしょうか? sysctl を考えていますが、まだ見つけていません。私の希望は次のとおりです。

echo 0 > /proc/sys/net/core/enable_tcp_offloading

追伸: 「新しいハードウェア」がデフォルトでTOEを有効にしていることにとても驚きました。これ

答え1

Debian では、パッケージはオフロード (およびその他の設定)のオプションを実装するスクリプトethtoolを提供するようになりました。if-up.dethtool

このパッケージをインストールして、 のインターフェースに次のような行を追加するだけです/etc/network/interfaces

auto eth0
iface eth0 inet static
    address 10.0.3.1/255.255.248.0
    gateway 10.0.2.10
    offload-tx  off
    offload-sg  off
    offload-tso off

答え2

やった!「私の」解決策が見つかった!

私は単に自分の意見を述べているだけですつま先を無効にするスクリプト/etc/network/if-up.d/これにより、TCP オフロードが完全に無効になります。

ボーナスとして、/etc/ネットワーク/インターフェース-これを無効にするオプション。

#!/bin/bash

RUN=true
case "${IF_NO_TOE,,}" in
    no|off|false|disable|disabled)
        RUN=false
    ;;
esac

if [ "$MODE" = start -a "$RUN" = true ]; then
  TOE_OPTIONS="rx tx sg tso ufo gso gro lro rxvlan txvlan rxhash"
  for TOE_OPTION in $TOE_OPTIONS; do
    /sbin/ethtool --offload "$IFACE" "$TOE_OPTION" off &>/dev/null || true
  done
fi

答え3

話題から外れますが、RHEL6サーバーで同じことを行う方法を見つけようとしたときにここにたどり着きました。RHEL/CentOS/Fedoraのようなディストリビューションで同じことを探している人がいたら、答えが見つかるでしょう。ここ

答え4

使用するシステムを使用している場合ネットプラン(例:Ubuntu)ネットワークを設定するには、Netplan ポストアップ スクリプトオフロードを構成する。答え別の質問へ。

次のディレクトリに、ロード順序を示す数字を先頭に付けた名前のスクリプトを作成します。/etc/networkd-dispatcher/routable.d/40-offloading-configこれは実行可能で、root によって所有されます。例: eth0 で TCP セグメント オフロードをオフにするには、次のようにします。

#!/bin/sh
/sbin/ethtool -K eth0 tso off

関連情報