Отключить TCP-Offloading {полностью, универсально и легко}

Отключить TCP-Offloading {полностью, универсально и легко}

Я хочу отключитьtcp-разгрузка(TOE) на моих серверах Debian. Я бы использовал что-то вроде:

ethtool -K …

Однако у меня есть несколько пожеланий: возможно ли полностью интегрировать его в Debian?

Это звучит так: нет rc.local, я также хотел бы избежать псевдо-rc-скриптинга.

Я предполагаю, что это установка ethtoolи использование pre-up.d/hook, который деконфигурирует TOE, используя параметры из /etc/network/interfaces.

Я хотел бы деконфигурировать все мои (будущие) серверы универсальным способом с использованием FAI (поскольку FAI уже реализован — и востребован!).

А как насчет toe-options, которые не поддерживаются на некоторых аппаратных средствах? Будет ли сеть работать некорректно, если несуществующий-option должен быть отключен? Я думаю, что было бы разумно этого не делать, но это также не кажется мне желаемым решением.

Это очень загромождает конфигурацию, так как в ней 11 опций! Использование нескольких сетевых карт пахнет для меня склонностью к ошибкам.

Нет ли более универсального решения? Я имею в виду sysctl, но пока не нашел. Мое желание было:

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

ПС: Я был весьма удивлен, обнаружив, что на моем «новом оборудовании» TOE включен по умолчанию, из-заэтот.

решение1

В Debian ethtoolпакет теперь предоставляет if-up.dскрипт, реализующий параметры разгрузки (и другие ethtoolнастройки).

Вам просто нужно установить этот пакет и добавить такие строки в интерфейс в /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-offloading.

В качестве бонуса я добавил/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 post-upдля настройки разгрузки. Как упоминалось вотвечатьна другой вопрос.

Вы создаете скрипт в следующем каталоге с именем, к которому добавляется номер, указывающий порядок загрузки, например /etc/networkd-dispatcher/routable.d/40-offloading-config, исполняемый скрипт, принадлежащий пользователю root. Например, чтобы отключить разгрузку сегмента TCP на eth0:

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

Связанный контент