Ubuntu 18.04でWi-Fiよりイーサネットに優先順位を付ける方法は?

Ubuntu 18.04でWi-Fiよりイーサネットに優先順位を付ける方法は?

ターゲット

イーサネットケーブルを接続するときは、ワイヤレスよりイーサネットに優先順位を付けてください。

方法

多くのインターネット検索と読書の最後に、次のポイントに達しました。信じる私がしなければならないことは次のとおりです

nmcli connection modify [id-of-ethernet-interface] ipv4.route-metric 200
nmcli connection modify [id-of-ethernet-interface] ipv6.route-metric 200

ここで、200は、無線よりイーサネットに優先順位を与えるための無線メトリックより低い値である。

結果

私を混乱させることは、上記のコマンドを実行して再起動した後(良い測定のために)得られたレポートroute -nとこれが私の目標を達成できないようです。

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         123.456.89.1    0.0.0.0         UG    600    0        0 wlp1s0
0.0.0.0         123.456.89.1    0.0.0.0         UG    20200  0        0 enp0s31f6
123.456.89.0    0.0.0.0         255.255.255.192 U     200    0        0 enp0s31f6
123.456.89.0    0.0.0.0         255.255.255.192 U     600    0        0 wlp1s0
654.321.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s31f6

この数は私のコマンドの実行に関連していますが、

0.0.0.0         123.456.89.1    0.0.0.0         UG    20200  0        0 enp0s31f6
654.321.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s31f6

最初の行には、私が設定した200値の前に20のプレフィックスがあります。実行中の項目に基づいて指標値をnmcli500に変更すると、route -n20500が報告されます。なぜこれが起こるのですか? 20200や20500ではなく、200や500が欲しいと言ったので間違っているようです。

2行目には測定値があり、その値がどこから来たのか全くわからないし、まったく影響を及ぼすことができないようです。誰もがこれについて明らかにすることができれば幸いです。

これらのコマンドは、影響指標以外には実質的な結果を生成しないようです。イーサネットが優先順位かどうかわからないので、そうでないと仮定します。

その他の結果

気になって作業していると思います。一部程度は用途です$ sudo ifmetric enp0s31f6 200。これは二つか三つのことをします。

  • インターフェイスのメトリックに影響します(route -nIfaceがあるすべての行の200値を報告しますenp0s31f6)。
  • これはUbuntuのUIに影響します(右上隅には、コマンドに提供された指標の値に応じて、イーサネットとワイヤレスアイコンの間の視覚的な切り替えが表示されますifmetric)。
  • それ時々NETLINK: Error: File exists私にエラーが発生します。同じコマンドの後続実行可能または可能このエラーは発生しません

一部のシステム情報

  • エリートノートブック850 G5
  • Ubuntu18.04
  • Ubuntuのインストールは、インストーラがディスク全体を使用し、暗号化を有効にし、サードパーティのドライバのダウンロードを有効にするなどの方法で行われます。

アップデート#1

$ nmcli c show
NAME                UUID  TYPE      DEVICE    
Wired connection 2  [n/a] ethernet  enp0s31f6 
WiFi1               [n/a] wifi      wlp1s0

$ route -n
Destination     Gateway  Genmask         Flags Metric Ref    Use Iface
0.0.0.0         [n/a]    0.0.0.0         UG    600    0        0 wlp1s0
0.0.0.0         [n/a]    0.0.0.0         UG    20200  0        0 enp0s31f6
[n/a]           0.0.0.0  255.255.255.192 U     200    0        0 enp0s31f6
[n/a]           0.0.0.0  255.255.255.192 U     600    0        0 wlp1s0
[n/a]           0.0.0.0  255.255.0.0     U     1000   0        0 enp0s31f6

ベストアンサー1

ここに多くの質問があります。

  • 有線LANと無線LANは同じサブネットのブリッジです。123.456.89.0/24
  • これらのネットワークに同時に接続すると、2つのデフォルトゲートウェイが発生します(これはいくつかの高度なルーティングで解決可能ですip rules)。
  • Wi-Fiと有線接続の間にブリッジがあるため、これらのゲートウェイのアドレスは同じです。

イーサネットに接続したときにWi-Fiを自動的に無効にするには、次のように外部スクリプトを使用する必要があります。

スクリプトを作成します/etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh。コンテンツ:

#!/usr/bin/env bash

name_tag="wifi-wired-exclusive"
syslog_tag="$name_tag"
skip_filename="/etc/NetworkManager/.$name_tag"

if [ -f "$skip_filename" ]; then
  exit 0
fi

interface="$1"
iface_mode="$2"
iface_type=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f2)
iface_state=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f3)

logger -i -t "$syslog_tag" "Interface: $interface = $iface_state ($iface_type) is $iface_mode"

enable_wifi() {
   logger -i -t "$syslog_tag" "Interface $interface ($iface_type) is down, enabling wifi ..."
   nmcli radio wifi on
}

disable_wifi() {
   logger -i -t "$syslog_tag" "Disabling wifi, ethernet connection detected."
   nmcli radio wifi off
}

if [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "down" ]; then
  enable_wifi
elif [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "up"  ] && [ "$iface_state" = "connected" ]; then
  disable_wifi
fi

スクリプトを無効にするには、次を実行します。touch /etc/NetworkManager/.wifi-wired-exclusive

おすすめ記事