Cel
Niech ethernet ma pierwszeństwo przed bezprzewodowym, gdy kabel Ethernet jest podłączony
metoda
Po tym, jak zrobiłem sporo Google'a i przeczytałem, doszedłem do punktu, w którym uważam, że to , co powinienem robić, to coś
nmcli connection modify [id-of-ethernet-interface] ipv4.route-metric 200
nmcli connection modify [id-of-ethernet-interface] ipv6.route-metric 200
gdzie 200 jest wartością niższą niż metryka sieci bezprzewodowej, aby ethernet miał pierwszeństwo przed siecią bezprzewodową.
Wyniki
Niepokoi mnie to, że otrzymałem raporty route -n
po wykonaniu powyższych poleceń i ponownym uruchomieniu (na wszelki wypadek) oraz fakt, że nie wydaje się to równoznaczne z osiągnięciem mojego celu
$ 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
Liczby sumują się w odniesieniu do mojego wykonania polecenia, ale dla linii, które mówią
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
Pierwszy wiersz ma 20 prefiksów przed ustawioną wartością 200. To jest konsekwentnie stosowane w oparciu o to, co uruchamiam; Jeśli zmienię wartość metryki nmcli
na 500, route -n
zgłoś 20500. Dlaczego tak się dzieje? Z pewnością nie wygląda to dobrze, ponieważ powiedziałem, że chcę 200 lub 500, a nie 20200 i 20500.
Drugi wiersz ma wartość metryczną, o której nie mam pojęcia, skąd pochodzi, i wydaje mi się, że nie mam na to żadnego wpływu. Jeśli ktoś może rzucić na to światło, jestem wdzięczny.
Nie wygląda na to, że te polecenia kończą się na czymś namacalnym, poza wpływaniem na wskaźniki; Nie mogę powiedzieć, że Ethernet ma pierwszeństwo, więc zakładam, że tak nie jest.
Inne ustalenia
Ciekawe i wydaje mi się, że do pewnego stopnia działa, to wykorzystanie $ sudo ifmetric enp0s31f6 200
. Robi to dwie do trzech rzeczy;
- Wpływa na metrykę interfejsu (
route -n
zgłasza wszystkie linie za pomocą Iface'a,enp0s31f6
aby mieć wartość 200) - Wpływa na interfejs użytkownika w systemie Ubuntu (w prawym górnym rogu widzę przełączanie między przełączaniem ikon Ethernet i bezprzewodowych, w zależności od wartości metryki podanych w
ifmetric
poleceniu) - To czasami rzuca
NETLINK: Error: File exists
błąd na mnie. Kolejne egzekucje tego samego polecenia może lub może nie doprowadzić do tego błędu
Niektóre informacje o systemie
- EliteBook 850 G5
- Ubuntu 18.04
- Instalacja Ubuntu polega na zezwoleniu instalatorowi na użycie całego dysku, włączonemu szyfrowaniu, włączonemu pobieraniu sterowników innych podmiotów itp.
Aktualizacja nr 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
taki sam jakroute -n
wynik?Odpowiedzi:
Masz tutaj stosy problemów:
123.456.89.0/24
ip rules
)Może powinieneś polegać na zewnętrznych skryptach, aby automatycznie dezaktywować Wi-Fi, gdy Ethernet jest podłączony tak:
Utwórz skrypt
/etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh
. Zawartość:Aby wyłączyć skrypt, po prostu uruchom
touch /etc/NetworkManager/.wifi-wired-exclusive
źródło
Wierzę, że jest to NetworkManager penalizujący połączenia, które jego zdaniem są nieosiągalne, poprzez dodanie 20000 do wartości metryki. Z podręcznika NetworkManager.conf :
Rozwiązanie 1
Możesz spróbować wyłączyć sprawdzanie łączności, komentując opcję
uri=
lub pozostawiając ją pustą, wNetworkManager.conf
.Rozwiązanie 2
Ustaw
net.ipv4.conf.all.rp_filter = 2
w/etc/sysctl.conf
lub w stosownych przypadkach w swojej dystrybucji. Uważaj na potencjalne luki związane z wyciekiem informacji .tło
Podręcznik NetworkManager.conf zawiera małe wyjaśnienie, dlaczego sprawdzanie łączności może działać nieprawidłowo:
W mojej dystrybucji włączone jest ścisłe filtrowanie:
Wartość
1
oznacza ścisłe filtrowanie, a to odpowiada za niepowodzenie sprawdzania łączności. Systematyczni ludzie zmienili to na2
(luźne filtrowanie) z kontrowersyjnym zatwierdzeniem, które wprowadziło luki , a zatem zostało przywrócone przez dystrybucje.źródło