Bagaimana saya bisa membuat ethernet diutamakan melalui wifi di Ubuntu 18.04?

13

Tujuan

Biarkan ethernet diutamakan melalui nirkabel ketika kabel ethernet dicolokkan

metode

Setelah melakukan cukup banyak Googling dan membaca, saya sampai pada titik di mana saya percaya apa yang seharusnya saya lakukan adalah sesuatu yang sejalan dengan

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

di mana 200 adalah nilai yang lebih rendah daripada metrik nirkabel, agar ethernet diutamakan daripada nirkabel.

Hasil

Yang membingungkan saya adalah laporan yang saya dapatkan route -nsetelah saya menjalankan perintah di atas dan mem-boot ulang (untuk ukuran yang baik), dan fakta bahwa ini sepertinya tidak berarti mencapai tujuan saya

$ 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

Angka-angka bertambah sehubungan dengan eksekusi perintah saya, tetapi untuk baris yang mengatakan

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

Baris pertama memiliki 20 awalan sebelum nilai 200 yang saya atur. Ini terus diterapkan secara konsisten berdasarkan apa yang saya jalankan; Jika saya mengubah nilai metrik nmclimenjadi 500, route -nakan melaporkan 20500. Mengapa ini terjadi? Jelas tidak kelihatan benar, karena saya menyatakan saya ingin 200 atau 500, bukan 20200 dan 20500.

Baris kedua memiliki nilai metrik yang saya tidak tahu dari mana asalnya, dan sepertinya saya tidak bisa memengaruhi sama sekali. Jika ada yang bisa menjelaskan ini, saya bersyukur.

Itu tidak tampak seperti perintah ini berakhir dengan sesuatu yang nyata, selain memengaruhi metrik; Saya tidak tahu bahwa ethernet diutamakan, jadi saya anggap tidak.

Temuan lainnya

Apa yang saya temukan penasaran, dan tampaknya akan bekerja untuk beberapa batas, adalah penggunaan $ sudo ifmetric enp0s31f6 200. Ini melakukan dua hingga tiga hal;

  • Ini memengaruhi metrik antarmuka ( route -nmelaporkan semua baris dengan Iface enp0s31f6memiliki nilai 200)
  • Ini mempengaruhi UI di Ubuntu (Di sudut kanan atas saya akan melihat saklar visual antara ethernet dan ikon nirkabel yang berpindah, tergantung pada nilai metrik yang saya berikan dalam ifmetricperintah)
  • Ini kadang-kadang melemparkan NETLINK: Error: File existskesalahan pada saya. Eksekusi berikutnya dari perintah yang sama dapat atau tidak dapat mengakibatkan kesalahan ini

Beberapa info sistem

  • EliteBook 850 G5
  • Ubuntu 18.04
  • Penginstalan Ubuntu dilakukan dengan membiarkan penginstal menggunakan seluruh disk, enkripsi yang diaktifkan, pengunduhan pihak ketiga yang diaktifkan untuk driver, dll.

Perbarui # 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

sumber
Ethernet seharusnya lebih disukai secara default. Aneh. Apakah output nmcli c showsama dengan route -noutput?
Tommiie
Lihat pertanyaan saya yang diperbarui.
Harap perbarui pertanyaan Anda dengan hasil tersebut alih-alih dibuang dalam komentar.
Tommiie
Ya, saya sadari dengan cepat, pembuangan ke komentar tidak akan berhasil. Saya membuat perubahan pada hasil edit. Beri saya 1 menit lagi, dan Anda akan mendapatkan hasil yang lengkap. Selesai.
untuk kasus khusus di mana ethernet dan wifi berbagi LAN yang sama, menggunakan perangkat ikatan dalam mode cadangan aktif harus menyederhanakan hal-hal: failover mulus dan hanya satu rute: Bonding - Debian Wiki (konfigurasi hanya harus diterjemahkan ke manajer jaringan)
AB

Jawaban:

2

Anda memiliki masalah yang bertumpuk di sini:

  • LAN kabel dan LAN nirkabel Anda merupakan jembatan ke subnet yang sama 123.456.89.0/24
  • Anda akan memiliki dua gateway default jika Anda menghubungkan waktu yang sama di jaringan tersebut (ini dapat diselesaikan dengan beberapa perutean lanjutan ip rules)
  • Gateway tersebut memiliki ALAMAT YANG SAMA, karena Anda memiliki jembatan antara wifi dan koneksi kabel.

Mungkin Anda harus mengandalkan skrip eksternal untuk menonaktifkan wifi secara otomatis ketika ethernet dicolokkan seperti ini:

Buat skrip /etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh. Isi:

#!/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

Untuk menonaktifkan skrip, jalankan saja touch /etc/NetworkManager/.wifi-wired-exclusive


sumber
0

Saya percaya ini adalah NetworkManager menghukum koneksi yang dianggapnya tidak dapat dijangkau, dengan menambahkan 20000 ke nilai metrik. Dari manual NetworkManager.conf :

rute default perangkat tanpa konektivitas global mendapatkan penalti +20000 untuk metrik-rute

Solusi 1

Anda dapat mencoba menonaktifkan pemeriksaan konektivitas dengan mengomentari opsi uri=atau membiarkannya kosong NetworkManager.conf.

Solusi 2

Set net.ipv4.conf.all.rp_filter = 2di /etc/sysctl.confatau di mana berlaku di distro Anda. Waspadai kemungkinan kerentanan kebocoran informasi .

Latar Belakang

The pengguna NetworkManager.conf memiliki penjelasan kecil tentang mengapa memeriksa konektivitas mungkin mengalami gangguan fungsi:

Perhatikan bahwa distribusi Anda mungkin mengatur / proc / sys / net / ipv4 / conf / * / rp_filter ke penyaringan ketat . Itu berfungsi buruk dengan pemeriksaan konektivitas per perangkat, yang menggunakan SO_BINDDEVICE untuk mengirim permintaan pada semua perangkat. Pengaturan rp_filter yang ketat akan menolak respons apa pun dan pemeriksaan konektivitas pada semua tetapi rute terbaik akan gagal.

Di distro ketat saya difilter:

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

Nilai ini 1berarti penyaringan yang ketat dan ini bertanggung jawab atas kegagalan pemeriksaan konektivitas. Orang-orang systemd mengubah ini menjadi 2(penyaringan longgar) dengan komitmen kontroversial yang memperkenalkan kerentanan , dengan demikian dikembalikan oleh distro.

Jimi
sumber