Comment définir la priorité des connexions réseau dans Ubuntu?


42

Si une machine Ubuntu 11.04 est connectée simultanément au WiFi et à la 3G, comment définir la priorité pour permettre aux applications (navigateur, etc.) d'utiliser le WiFi en premier? Si ce n'est pas disponible, il devrait utiliser la 3G.

Fondamentalement, je voudrais définir l'ordre dans lequel les connexions réseau sont utilisées.

Edit: Je recherche une approche plus facile qui serait utile pour ceux qui sont simplement à l'aise et non experts en Ubuntu / Linux.

Réponses:


28

Je suis surpris que personne n'a mentionné la commande la plus simple de le faire: ifmetric. Il peut être installé à l'aide de sudo apt-get install ifmetric. Cette commande peut être utilisée pour modifier la métrique de n'importe quelle interface. L' interface avec une métrique inférieure est préférée pour Internet.

Pour l'utiliser, consultez d'abord les mesures à l'aide de la routecommande:

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0
0.0.0.0         10.42.0.2       0.0.0.0         UG    600    0        0 wlan0

Ici, eth0a une métrique inférieure, il sera donc préférable à wlan0. Si vous préférez wlan0, réduisez sa métrique:

sudo ifmetric wlan0 50

Maintenant, la table de routage ressemblerait à:

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.2       0.0.0.0         UG    50     0        0 wlan0
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0

Maintenant, Linux utilisera wlan0pour Internet. Le changement sera reflété immédiatement.


1
Très bonne réponse. Thx (également pour l'itinéraire -n). J'ai dû redémarrer après avoir installé ifmetric pour que la commande change la métrique
Thorsten Niehues

Comment rendre ce changement permanent (je ne veux pas utiliser accidentellement mon hotspot iPhones)
Thorsten Niehues

2
@ThorstenNiehues: Une solution rapide à venir à l' esprit pour le rendre permanent est d'ajouter la commande ifmetric à votre crontab, en faisant crontab -epuis ajoutez la ligne à la fin: @reboot sudo ifmetric wlan0 50.
shivams

Ça marche. Mais je ne peux pas accéder aux machines locales après cela (via un navigateur par exemple). Une idée? Merci.
tomasb

@tomasb: doute intéressant. Cela est toutefois attendu, car la modification de la préférence d'interface vous amènera dans le réseau local de l'interface préférée. Une façon simple d'accéder aux machines locales serait d'y accéder à l'aide d'une machine virtuelle. Cependant, de meilleures solutions doivent exister. Laissez-moi réfléchir et répondre.
shivams

14

La définition des métriques permet de modifier les priorités. La métrique supérieure est plus "coûteuse" à utiliser, donc le système d'exploitation utilisera les interfaces avec la métrique la plus basse s'il a besoin d'acheminer le trafic. Dans le cas où l'interface métrique inférieure est arrêtée, elle utilisera l'interface métrique supérieure car c'est la seule interface qui peut être utilisée pour acheminer le trafic vers ce réseau / destination particulier.

Les métriques sont spécifiées dans le fichier / etc / network / interfaces , des liens pointent vers la documentation.

Utilisez n'importe quel éditeur de texte pour modifier le fichier, identifier les réseaux et simplement modifier le metricparamètre et enregistrer. Le redémarrage est le moyen le plus simple de réinitialiser toutes les valeurs sans entrer dans les détails geek du redémarrage des services réseau.


2
Harry - Merci pour la réponse - Le réseau qui m'intéresse eth1 est affiché dans "ifconfig", mais pas dans "/ etc / network / interfaces". Que montre "ifconfig" et que contient "/ etc / network / interfaces"?
Praveen Sripati

1
Ajouter eth0 à "/ etc / network / interfaces" est plus risqué. Vous pouvez essayer ifconfig en tant que root pour changer la métrique de l'interface (vérifiez qu'elle y reste après le démarrage).
harrymc

Lorsque j'ai exécuté «sudo ifconfig eth1 metric 4», j'ai eu l'erreur suivante «SIOCSIFMETRIC: opération non prise en charge». goo.gl/UhXBJ indique que «De plus, tous les systèmes n'utilisent pas l'argument métrique. ..... Lors de la configuration d'un système Linux, vous ajoutez une commande de route explicite pour chaque interface. "Il semble qu'il n'y ait pas d'approche directe dans Ubuntu comme dans une interface utilisateur pour un utilisateur novice.
Praveen Sripati

2
Il semble que Linux se décide sur l'adaptateur le plus rapide après un test de vitesse rapide sur tous les adaptateurs. La métrique n'est plus prise en charge sur de nombreuses distributions. Vous pouvez toujours essayer de dicter des choses via "/ etc / network / interfaces", mais je ne sais pas à quel point vous réussirez. Voir aussi cette question .
harrymc

3
La solution la plus simple, que tout le monde fait, consiste simplement à désactiver l'interface que vous ne souhaitez pas utiliser, ou à la limiter à "Utiliser cette connexion uniquement pour les ressources de son réseau" (si vous avez également votre imprimante ou quoi que ce soit là-dessus) même routeur).
harrymc

7
  1. La hiérarchisation des interfaces pour le trafic général se fait en manipulant les métriques de routage. Chaque route a des paramètres associés tels que le nombre de sauts et les bandes passantes. Voir l'option "métrique" dans la page de manuel de la routecommande.

    $ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref     Use Iface
    0.0.0.0         192.168.1.254   255.255.255.255 U     0      0        0 eth0
    192.168.1.0     0.0.0.0         255.255.255.0   U     256    0        0 eth0
    
  2. La priorisation de l'accès des applications aux ressources réseau est souvent traitée par la "mise en forme du trafic" - j'utiliserais un moteur de recherche Web pour voir si Ubuntu ou le routeur peuvent le faire.


Note de bas de page.

Sous MS Windows, mais pas sous Linux, la netstat -nrcommande génère les mêmes informations que route print. Y compris les métriques de routage.


Dans la page de manuel pour la route "Métrique La 'distance' à la cible (généralement comptée en sauts). Elle n'est pas utilisée par les noyaux récents, mais peut être nécessaire par le routage des démons.". Je ne sais pas si sur un bureau Ubuntu normal le paramètre métrique aura un effet.
Praveen Sripati

1
Pouvez-vous s'il vous plaît me donner la commande d'itinéraire spécifique pour ce faire?
Praveen Sripati

11
@PraveenSripati - Je ne pense pas que vous ayez donné 100 de vos représentants durement gagnés pour une telle réponse - techniquement correct, mais cela ne vous aide ni moi ni moi. :-( Je recherche également une commande spécifique.
Lord Loh.

1
Vraiment quelle réponse ?? netstat -nr n'affiche pas non plus la métrique. Voir la réponse de @shivams
Thorsten Niehues

3

Je ne l'ai pas vraiment essayé, mais NCD (Network Configuration Daemon - 1) peut être utilisé à cet effet. Le site prétend faciliter la configuration du réseau. La syntaxe semble simple.

#Attendez une connexion réseau. Préférez eth1 en le plaçant devant eth0.
list ("NET-eth1", "NET-eth0") pnames;

(1) - http://code.google.com/p/badvpn/wiki/NCD


Vous avez raison, mon logiciel NCD le fait bien; l'exemple fonctionne tel quel. Je dois cependant noter que la pnamesliste n'est en fait qu'un argument de la multidepend()déclaration de la ligne suivante - c'est celle qui met en œuvre les priorités. Le mécanisme derrière cela est que lorsque eth1vient quand eth0est déjà en place, il s'exécute multiprovide("NET-eth1");, car NET-eth1est en face de NET-eth0, multidepend()descendra et reviendra immédiatement, mais exposant les variables du eth1processus au lieu de eth0.
Ambroz Bizjak

Je l'ai regardé mais je n'ai pas pu le comprendre. Ça ne devrait pas être si difficile.
SDsolar

3

C'est tout à cause des métriques de route. Vous souhaitez supprimer l'itinéraire par défaut avec la métrique la plus basse, puis rétablir l'ancien itinéraire avec la métrique la plus élevée. Veuillez suivre les commandes ci-dessous.

Disons que votre table de routage ressemble à ceci:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.16.87.254    0.0.0.0         UG    100    0        0 ens38
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

Maintenant, supprimez la passerelle par défaut

# route delete default gateway

Réinstallez maintenant l'ancienne passerelle par défaut (notez que la métrique dans ce cas est supérieure à 102 par rapport à la route par défaut actuelle 101)

# route add default gw 10.16.87.254 metric 102 dev ens38                                                              
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
0.0.0.0         10.16.87.254    0.0.0.0         UG    102    0        0 ens38
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

Cela marche. Remarque pour tous les autres novices (j'ai dû lire ceci plusieurs fois pour suivre ce qui se passait): l'étape 1 ci-dessus supprime l'entrée pour Gateway= 10.16.87.254, qui est UGla plus basse Metric, et l'étape 2 la remet avec une valeur plus élevée Metricafin qu'elle soit toujours disponible en tant que sauvegarde en cas d' 192.168.151.2indisponibilité.
WillC

0

[Mise à jour] Depuis Ubuntu 18.04 LTS (serveur), netplanest le wrapper par défaut pour la gestion du réseau. La configuration de Netplan se fait par défaut via un fichier YAML/etc/netplan/01-netcfg.yaml (plus de détails ici ).

La métrique de routage est définie par l' metricoption " ", qui attend un entier positif (il 100s'agit généralement de la valeur par défaut). Voici l' exemple de la page de référence:

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      addresses:
      - 10.0.0.10/24
      - 11.0.0.11/24
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      routes:
      - to: 0.0.0.0/0
        via: 10.0.0.1
        metric: 100
      - to: 0.0.0.0/0
        via: 11.0.0.1
        metric: 100

La route avec la plus petite metric(longueur de trajet) devient la passerelle "préférée". (Utilisez: sudo netplan trypour activer les modifications)

Notez que dans un environnement itinérant (plusieurs connexions, allumées et éteintes), vous souhaiterez peut-être définir le optionalparamètre (booléen) sur true(la valeur par défaut est false):

network:
  version: 2
  ethernets:
    enred:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 100
    engreen:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 200
      # this is plugged into a test network that is often
      # down - don't wait for it to come up during boot.
      optional: true

Notez la syntaxe légèrement différente pour la métrique de route dans le cas des connexions DHCP.

Vous pouvez également l'utiliser NetworkManagercomme moteur de rendu, ce qui, je suppose (ne m'a pas encore testé) vous permettrait de voir / modifier cette partie de la configuration également via des outils GUI.

renderer (scalaire)

Utilisez le backend de réseau donné pour cette définition. Actuellement pris en charge sont networkdet NetworkManager. Cette propriété peut être spécifiée globalement dans networks:, pour un type de périphérique (par exemple ethernets:) ou pour une définition de périphérique particulière. La valeur par défaut est networkd.

(Le tout dernier «grand» exemple sur la page de référence montre une telle utilisation hybride des deux moteurs de rendu).

Voir aussi cette question (askubuntu) .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.