如何强制网络管理器在启动时将特定 NIC(eth0)的自动协商设置为 false/关闭?

如何强制网络管理器在启动时将特定 NIC(eth0)的自动协商设置为 false/关闭?

碰巧的是,我的 NIC 只有在自动协商设置为 false 时才能与当前网络建立连接。在 Windows 中,可以通过设备管理器更改 NIC 属性来轻松实现这一点。目前,我只能在 Ubuntu(10.04,如果有必要的话)中通过以下方式实现这一点登录:

sudo ethtool -s eth0 autoneg off 速度 100 全双工

sudo 服务网络管理器重新启动

附言:我读过来自 ubuntu 论坛的报告,可能需要删除 network-manager 并仅使用 /etc/network/interfaces 进行配置,但我打算只在万不得已的情况下才这么做。如果有人可以添加auto-negotiation ethtool到标签列表中,我将不胜感激。

答案1

似乎没有办法在网络管理器中执行此操作。/etc/network/interfaces另一方面,编辑很笨拙,并且会导致 Ubuntu 12.04 等更高版本的延迟(请参阅)最终的解决方案这里事实证明 (就目前而言) 最好的方法是将 ethtool 命令添加到rc.local

sudo -H gedit /etc/rc.local

ethtool -s eth0 autoneg off speed 100 duplex full    # put this above 'exit 0'

答案2

如果其他人在尝试配置 18.04 中的网络接口时遇到此问题,则结果是网络管理器将自动协商设置为关闭,因此重新启动时似乎没有任何效果;ifupdown(已弃用)netplan,可能是因为我们无法选择其他技术,所以可能需要其他选项。

使用

nmcli c show "Wired connection 1"

显示当前设置。用于nmcli c edit "Wired connection 1"以交互方式设置值(使用后退改变值。有内置帮助):

goto 802-3-ethernet.auto-negotiate
change
save persistent
quit

答案3

我将 ethtool 脚本放入 中,结果更好/etc/network/if-up.d。根据网络管理器文档, 中的脚本/etc/NetworkManager/dispatcher.d将在 NM“摆弄接口”后运行。在我的 12.04 系统上,唯一的脚本是 01ifupdown,然后它将运行 中的脚本/etc/network/if-up.d(也/etc/network/if-post-down.d)。

这一系列事件似乎都发生在我的系统出现登录屏幕之后。

我在系统日志中发现多次出现以下行,这也许可以解释导致延迟的原因:

NetworkManager[871]: <info> (eth0): carrier now OFF (device state 100, deferring action  for 4 seconds).

不要忘记将解释器描述 ( #!/bin/sh) 作为脚本的第一行。否则它将无法工作,因为 NetworkManager 使用 run-parts 实用程序来运行它们。它们还需要由 root 拥有,并且只有其所有者才具有写入权限。

答案4

正如 Jeff M 所暗示的,您可以使用 NetworkManager 来做到这一点,而且我通过这种方式做得非常好。

/etc/NetworkManager/dispatcher.d/在命名中创建一个文件50-ethtool-autoneg-off,并将以下内容放入其中。请注意,如果您想要禁用任何 eth 设备,您可以更改eth0为,如果您的系统使用较新的“可预测内核名称”,您也可以添加。eth*eth*|en*

#!/bin/sh
myname=${0##*/}
log() { logger -p user.info -t "${myname}[$$]" "$*"; }
IFACE=$1
ACTION=$2

case ${IFACE} in
    eth0)
        case ${ACTION} in
            up)
                log "Disabling auto-negotation on $IFACE"
                ethtool -s $IFACE autoneg off speed 100 duplex full
                ;;
        esac
        ;;
esac

您确实需要一个 shebang #!/bin/sh,或者#!/bin/bash从我见过的示例来看,他提到的权限绝对重要。它至少应该对 root 具有读取/执行权限,并且可写使更新变得更容易,而无需更改权限或强制编辑器保存。

sudo chmod 0744 /etc/NetworkManager/dispatcher.d/50-ethtool-autoneg-off

如果您对此有任何问题,请告诉我,我会做一些实验,但我目前正在使用类似的方法将界面从更改为,speed 1000因为speed 100默认速度不稳定。

相关内容