彻底、通用且轻松地禁用 TCP 卸载

彻底、通用且轻松地禁用 TCP 卸载

我想禁用tcp 卸载(TOE)在我的 Debian 服务器上。我会使用类似的东西:

ethtool -K …

不过,我有一些愿望:是否可以将它干净地集成到 Debian 中?

内容如下:不rc.local,我还想避免伪 rc 脚本。

我猜测,它正在安装ethtool并使用 pre-up.d/hook,它使用来自的选项解除 TOE 的配置/etc/network/interfaces

我想使用 FAI 以通用方式解除我所有(未来)服务器的配置(因为 FAI 已经到位 - 并且是我们需要的!)。

如果某些硬件不支持 toe-options 怎么办?如果禁用不存在的选项,网络会失败吗?我想不这样做应该是可靠的,但这似乎也不是我想要的解决方案。

这让配置变得非常混乱,因为目前有 11 个选项!使用多个 NIC 对我来说很容易出错。

有没有更通用的解决方案?我想到了一个 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 发布脚本配置卸载。如在回答另一个问题。

您可以在以下目录中创建一个脚本,其名称以数字为前缀以指示加载顺序,例如/etc/networkd-dispatcher/routable.d/40-offloading-config- 该脚本是可执行的并由 root 拥有。例如,要关闭 eth0 上的 TCP 段卸载:

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

相关内容