web-dev-qa-db-ja.com

起動時に特定のNIC(eth0)に対してNetwork Managerに自動ネゴシエーションをfalse / offに設定させるにはどうすればよいですか?

自動ネゴシエーションがfalseに設定されている場合にのみ、現在のネットワークとの接続を確立できるNICが存在することがあります。 Windowsでは、これは、デバイスマネージャーを介してNICプロパティを変更することで、かなり簡単に実現できます。現在、私はUbuntu(それが重要な場合は10.04)で次のようにしかできませんafter login:

Sudo ethtool -s eth0 autoneg off speed 100 duplex full

Sudoサービスネットワークマネージャーの再起動

PS:ネットワークマネージャーを削除し、構成には/ etc/network/interfacesのみを使用する必要があるかもしれないという報告をUbuntuフォーラムから読みましたが、最後の手段としてのみ行うつもりです。また、誰かがauto-negotiation ethtoolをタグのリストに追加できる場合もありがたいです。

4
prusswan

Network Manager内でそれを行う方法はないようです。一方、/etc/network/interfacesの編集は不器用で、12.04などのUbuntuの以降のエディションで遅延が発生します( this および this を参照)。最終的に提供されるソリューションは、ethtoolコマンドをrc.localに追加することにより、 here が(現時点では)最良であることがわかりました。

Sudo -H gedit /etc/rc.local

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

18.04でネットワークインターフェースを設定しようとするこの問題に他の誰かが直面した場合、ネットワークマネージャーが自動ネゴシエーションをオフに設定していることが判明したため、再起動時に何も機能していないように見えました。 ifupdown(非推奨)、netplan、おそらく技術を選択できないため、他のオプションもあります。

つかいます

nmcli c show "Wired connection 1"

現在の設定を表示します。 nmcli c edit "Wired connection 1"を使用して、インタラクティブに値を設定します(設定階層をgotoおよびbackchangeおよびsetでトラバースします) =値の場合。組み込みヘルプがあります):

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

/etc/network/if-up.dにethtoolスクリプトを配置した方が良い結果が得られました。 Network Managerのドキュメントによると、/etc/NetworkManager/dispatcher.dのスクリプトはNM 'fiddles with interfaces'の後に実行されます。私の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ユーティリティを使用して実行するため、機能しません。また、ルートによって所有され、所有者のみに書き込み権限が必要です。

2
Jeff M.

Jeff Mがほのめかしたように、NetworkManagerでこれを行うことができ、私はそれをそのようにしてかなり幸運でした。

/etc/NetworkManager/dispatcher.d/という名前の50-ethtool-autoneg-offにファイルを作成し、次の内容をその中に入れます。 ethデバイスを無効にする場合はeth0eth*に変更できますが、新しい「予測可能なカーネル名」を使用するシステムがある場合は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が必要です。彼が言及した許可は間違いなく重要です。少なくともルートに対して読み取り/実行する必要があり、書き込み可能であれば、アクセス許可を変更したり、エディターを強制的に保存したりすることなく、更新が容易になります。

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

これに問題がある場合はお知らせください。いくつか実験を行いますが、現在、デフォルトの速度での不安定性のため、インターフェイスをspeed 1000からspeed 100に変更するために同様の方法を使用しています。

1
dragon788