Ubuntu 18.04でイーサネットをwifiよりも優先させるにはどうすればよいですか?


13

ゴール

イーサネットケーブルが接続されている場合、イーサネットよりもイーサネットを優先する

方法

グーグルの公正な量を行われ、読みした後、私はポイントに来ていると信じて、私がやるべきことの線に沿って何かであります

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。これは2つから3つのことを行います。

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

一部のシステム情報

  • EliteBook 850 G5
  • Ubuntu 18.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

デフォルトではイーサネットが推奨されます。奇妙な。の出力はの出力とnmcli c show同じroute -nですか?
Tommiie

私の更新された質問を参照してください。

コメントにダンプするのではなく、それらの結果で質問を更新してください。
Tommiie

ええ、私はかなり早く気付きました、コメントへのダンプはうまくいきませんでした。編集内容を修正しています。もう1分お待ちください。完全な出力が得られます。完了しました。

特定のケースのためのイーサネットや無線LAN共有し、同じLAN、物事を単純化する必要があり、アクティブバックアップモードでボンディング装置を使用して:シームレスなフェイルオーバーと唯一のルート:絆- Debianのウィキ(設定だけでネットワーク管理者に変換する必要があります)
AB

回答:


2

ここに積み重ねの問題があります:

  • ケーブルLANとワイヤレスLANが同じサブネットへのブリッジである 123.456.89.0/24
  • あなたはこれらのネットワークで同じ時間を接続する場合は、2つのデフォルトゲートウェイを持つことになります(これはルーティングいくつかの高度に解決することができますip rules
  • wifiとケーブル接続の間にブリッジがあるため、これらのゲートウェイには同じアドレスがあります。

おそらく、次のようにイーサネットが接続されている場合は、外部スクリプトを使用してwifiを自動的に無効にする必要があります。

スクリプトを作成します/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


0

これは、メトリック値に20000を追加することで、到達不可能と思われる接続にペナルティを課すNetworkManagerだと思います。NetworkManager.confマニュアルから:

グローバル接続のないデバイスのデフォルトルートは、ルートメトリックに+20000のペナルティを与えます

解決策1

オプションをコメントアウトするuri=か、空白のままにして、接続チェックを無効にしてみてくださいNetworkManager.conf

解決策2

ディストリビューションnet.ipv4.conf.all.rp_filter = 2/etc/sysctl.confまたは該当する場合は、ディストリビューションに設定します。情報漏えいの脆弱性に注意してください。

バックグラウンド

NetworkManager.confマニュアルには、接続チェックが誤動作する理由についての簡単な説明があります。

お使いのディストリビューションにはには、/ proc / sys / net / IPv4の/ confに/ * / rp_filterを設定する可能性があることを注意厳格なフィルタリング。これは、SO_BINDDEVICEを使用してすべてのデバイスにリクエストを送信するデバイスごとの接続チェックではうまく機能しません。rp_filterを厳密に設定すると、応答が拒否され、最適なルートを除くすべての接続チェックが失敗します。

私のディストリビューションでは、厳密なフィルタリングが有効になっています。

$ /usr/sbin/sysctl net.ipv4.conf.all.rp_filter
net.ipv4.conf.all.rp_filter = 1

1厳密なフィルタリングを意味し、これは接続性チェックの失敗の原因です。systemdの人々は、これを2(ゆるいフィルタリング)に変更し脆弱性を導入する議論の余地のあるコミットを行いまし

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.