Objectif
Laissez Ethernet l'emporter sur le sans fil lorsque le câble Ethernet est branché
Méthode
Après avoir fait pas mal de recherches sur Google et lu, je suis arrivé à un point où je crois que ce que je devrais faire est quelque chose comme
nmcli connection modify [id-of-ethernet-interface] ipv4.route-metric 200
nmcli connection modify [id-of-ethernet-interface] ipv6.route-metric 200
où 200 est une valeur inférieure à la métrique sans fil, pour que Ethernet soit prioritaire sur le sans fil.
Résultats
Ce qui me rend perplexe, ce sont les rapports que je reçois route -n
après avoir exécuté les commandes ci-dessus et redémarré (pour faire bonne mesure), et le fait que cela ne semble pas équivaloir à atteindre mon objectif
$ 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
Les chiffres s'additionnent en ce qui concerne l'exécution de ma commande, mais pour les lignes qui disent
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
La première ligne comporte 20 préfixes avant la valeur 200 que j'ai définie. Cela continue d'être appliqué de manière cohérente en fonction de ce que je lance; Si je modifie la valeur de la mesure nmcli
pour dire 500, route -n
le rapport 20500. Pourquoi cela se produit-il? Cela ne semble certainement pas correct, car j'ai déclaré que je voulais 200 ou 500, et non 20200 et 20500.
La deuxième ligne a une valeur métrique dont je n'ai aucune idée d'où elle vient et je ne peux pas du tout l'affecter. Si quelqu'un peut faire la lumière là-dessus, je lui en suis reconnaissant.
Il ne semble pas que ces commandes aboutissent à quelque chose de tangible, à part affecter les métriques; Je ne peux pas dire que Ethernet est prioritaire, je suppose donc que non.
Autres constatations
Ce que j'ai trouvé curieux et qui semble fonctionner dans une certaine mesure, c'est l'utilisation de $ sudo ifmetric enp0s31f6 200
. Cela fait deux à trois choses;
- Il affecte la métrique de l'interface (
route -n
signale que toutes les lignes avec l'Ifaceenp0s31f6
ont la valeur 200) - Cela affecte l'interface utilisateur dans Ubuntu (dans le coin supérieur droit, je verrai un commutateur visuel entre la commutation des icônes Ethernet et sans fil, en fonction des valeurs métriques que je fournis dans la
ifmetric
commande) - Cela me lance parfois une
NETLINK: Error: File exists
erreur. Exécutions ultérieures du même ordre peuvent ou peuvent ne pas entraîner cette erreur
Quelques informations système
- EliteBook 850 G5
- Ubuntu 18.04
- Installation d'Ubuntu effectuée en laissant le programme d'installation utiliser l'intégralité du disque, le cryptage activé, les téléchargements tiers autorisés pour les pilotes, etc.
Mise à jour # 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
-elle identique àroute -n
la sortie de?Réponses:
Vous avez empilé des problèmes ici:
123.456.89.0/24
ip rules
)Vous devriez peut-être compter sur des scripts externes pour désactiver automatiquement le wifi lorsque Ethernet est branché comme celui-ci:
Créez le script
/etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh
. Contenu:Pour désactiver le script, exécutez simplement
touch /etc/NetworkManager/.wifi-wired-exclusive
la source
Je crois que c'est NetworkManager pénalisant les connexions qu'il pense être inaccessibles, en ajoutant 20000 à la valeur métrique. Dans le manuel NetworkManager.conf :
Solution 1
Vous pouvez essayer de désactiver la vérification de la connectivité en commentant l'option
uri=
ou en la laissant vide, dansNetworkManager.conf
.Solution 2
Mettre
net.ipv4.conf.all.rp_filter = 2
dans/etc/sysctl.conf
ou le cas échéant dans votre distro. Méfiez-vous des vulnérabilités possibles de fuite d'informations .Contexte
Le manuel NetworkManager.conf contient une petite explication sur les raisons pour lesquelles la vérification de la connectivité peut ne pas fonctionner correctement:
Dans ma distribution, le filtrage strict est activé:
La valeur
1
signifie un filtrage strict et cela est responsable de l'échec du contrôle de connectivité. Les gens de systemd ont changé cela en2
(filtrage lâche) avec un commit controversé qui a introduit des vulnérabilités , donc a été annulé par les distributions.la source