Come posso impostare la priorità delle connessioni di rete in Ubuntu?


42

Se una macchina Ubuntu 11.04 è connessa contemporaneamente a WiFi e 3G, come posso impostare la priorità per consentire alle applicazioni (browser, ecc.) Di utilizzare prima WiFi? Se questo non è disponibile, dovrebbe utilizzare il 3G.

Fondamentalmente, vorrei impostare l'ordine in cui vengono utilizzate le connessioni di rete.

Modifica: sto cercando un approccio più semplice che sarebbe utile per coloro che sono solo a proprio agio e non esperti in Ubuntu / Linux.

Risposte:


28

Sono sorpreso nessuno ha menzionato il comando più semplice per farlo: ifmetric. Può essere installato usando sudo apt-get install ifmetric. Questo comando può essere utilizzato per modificare la metrica di qualsiasi interfaccia. L' interfaccia con metrica inferiore è preferita per Internet.

Per usarlo, prima guarda le metriche usando il routecomando:

$ 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

Qui, eth0ha una metrica inferiore, quindi sarà preferito rispetto a wlan0. Se vuoi preferire wlan0, quindi riduci la sua metrica:

sudo ifmetric wlan0 50

Ora, la tabella di routing sarebbe simile a:

$ 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

Ora Linux utilizzerà wlan0per Internet. Il cambiamento si rifletterà immediatamente.


1
Bella risposta. Grazie (anche per la route -n). Ho dovuto riavviare dopo aver installato ifmetric per il comando per cambiare la metrica
Thorsten Niehues

Come rendere permanente questa modifica (non voglio usare accidentalmente l'hotspot del mio iPhone)
Thorsten Niehues

2
@ThorstenNiehues: Una soluzione rapida venire in mente per renderla permanente è quello di aggiungere il comando ifmetric al vostro crontab, facendo crontab -ee quindi aggiungere la riga alla fine: @reboot sudo ifmetric wlan0 50.
shivams,

Funziona. Ma dopo questo non riesco ad accedere alle macchine locali (tramite browser ad es.). Qualche idea? Grazie.
tomasb,

@tomasb: dubbio interessante. Ciò è previsto, tuttavia, poiché la modifica della preferenza dell'interfaccia ti porterà nella rete locale dell'interfaccia preferita. Un modo semplice per accedere alle macchine locali sarebbe accedervi usando una macchina virtuale. Tuttavia, devono esistere soluzioni migliori. Fammi pensare e rispondere.
shivams,

14

L'impostazione delle metriche consente di modificare le priorità. La metrica più alta è più "costosa" da utilizzare, quindi il sistema operativo utilizzerà le interfacce con la metrica più bassa se deve instradare il traffico. Nel caso in cui l'interfaccia della metrica inferiore venga arrestata, utilizzerà l'interfaccia della metrica superiore poiché è l'unica interfaccia che può essere utilizzata per instradare il traffico verso quella particolare rete / destinazione.

Le metriche sono specificate nel file / etc / network / interfaces , i punti di collegamento alla documentazione.

Utilizzare qualsiasi editor di testo per modificare il file, identificare le reti e modificare semplicemente il metricparametro e salvare. Il riavvio è il modo più semplice per ripristinare tutti i valori senza entrare nei dettagli geek del riavvio dei servizi di rete.


2
Harry - Grazie per la risposta - La rete che mi interessa in eth1 è mostrata in "ifconfig", ma non in "/ etc / network / interfaces". Cosa sono mostrati in "ifconfig" e cosa in "/ etc / network / interfaces"?
Praveen Sripati,

1
L'aggiunta di eth0 a "/ etc / network / interfaces" è più rischiosa. Puoi provare ifconfig come root per modificare la metrica per l'interfaccia (controlla che rimanga lì dopo l'avvio).
harrymc,

Quando ho eseguito 'sudo ifconfig eth1 metric 4' ho ricevuto il seguente errore 'SIOCSIFMETRIC: Operazione non supportata'. goo.gl/UhXBJ afferma che 'Inoltre, non tutti i sistemi utilizzano l'argomento metrico. ..... Quando si configura un sistema Linux, si aggiunge un comando di route esplicito per ciascuna interfaccia. "Sembra che non vi sia un approccio diretto in Ubuntu come da un'interfaccia utente per un utente alle
prime armi

2
Sembra che Linux decida se stesso sull'adattatore più veloce dopo un rapido test di velocità su tutti gli adattatori. La metrica non è più supportata su molte distribuzioni. Puoi ancora provare a dettare le cose tramite "/ etc / network / interfaces", ma non so quanto avrai successo. Vedi anche questa domanda .
harrymc,

3
La soluzione più semplice, che fanno tutti, è semplicemente disattivare l'interfaccia che non si desidera utilizzare o limitarla a "Usa questa connessione solo per le risorse sulla sua rete" (se hai anche la tua stampante o qualsiasi altra cosa stesso router).
harrymc,

7
  1. La priorità delle interfacce per il traffico generale viene effettuata manipolando le metriche di routing. A ciascuna route sono associati parametri come il conteggio dei luppoli e le larghezze di banda. Vedere l'opzione "metrica" ​​nella pagina man per il routecomando.

    $ 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 priorità dell'accesso delle applicazioni alle risorse di rete è spesso affrontata dalla "modellatura del traffico": utilizzerei un motore di ricerca Web per vedere se Ubuntu o il router sono in grado di farlo.


Nota.

Su MS Windows, ma non su Linux, il netstat -nrcomando genera le stesse informazioni di route print. Incluse le metriche di routing.


Nella pagina man per il percorso "Metrica La 'distanza' dal bersaglio (di solito conteggiato in luppolo). Non è usato dai kernel recenti, ma può essere necessario per instradare i demoni.". Non sono sicuro che su un normale desktop Ubuntu il parametro Metric avrà qualche effetto.
Praveen Sripati,

1
Potete per favore darmi il comando route specifico per fare questo?
Praveen Sripati,

11
@PraveenSripati - Non credo che tu abbia dato un centinaio del tuo duro rappresentante per una risposta del genere - tecnicamente corretto, ma non aiuta te o me. :-( Sto cercando anche un comando specifico.
Lord Loh.

1
Davvero che risposta ?? anche netstat -nr non mostra la metrica. Visualizza la risposta di @shivams
Thorsten Niehues,

3

Non l'ho ancora provato, ma NCD (Network Configuration Daemon - 1) può essere utilizzato per questo scopo. Il sito afferma di semplificare la configurazione della rete. La sintassi sembra essere semplice.

# Attendi qualche connessione di rete. Preferisci eth1 mettendolo di fronte a eth0.
lista ("NET-eth1", "NET-eth0") nomi;

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


Hai ragione, il mio software NCD lo fa bene; l'esempio lì funziona così com'è. Devo tuttavia notare che l' pnameselenco è in realtà solo un argomento per l' multidepend()affermazione della riga successiva: questa è quella che implementa le priorità. Il meccanismo alla base di questo è che quando eth1si presenta quando eth0è già attivo, eseguito multiprovide("NET-eth1");, perché NET-eth1è davanti NET-eth0, multidepend()scenderà e tornerà immediatamente, ma esponendo le variabili dal eth1processo anziché eth0.
Ambroz Bizjak,

L'ho guardato ma non sono riuscito a capirlo. Questo non dovrebbe essere così difficile.
SDsolar,

3

Questo è tutto a causa delle metriche del percorso. Si desidera eliminare la route predefinita con la metrica più bassa e quindi ripristinare la vecchia route con la metrica più alta. Si prega di seguire i comandi di seguito.

Supponiamo che la tabella di routing sia simile alla seguente:

# 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

Ora cancella il gateway predefinito

# route delete default gateway

Ora ripristina il gateway predefinito precedente (nota che in questo caso la metrica è superiore a 102 rispetto all'attuale route predefinita 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

Questo funziona Nota per tutti gli altri novizi (ho dovuto leggere questo un paio di volte per seguire quello che stava succedendo): il passaggio 1 sopra rimuove la voce per Gateway= 10.16.87.254, che è il UGcon il più basso Metric, e il passaggio 2 lo rimette con un valore più alto, Metricquindi è ancora disponibile come backup nel caso in cui 192.168.151.2non sia disponibile.
WillC

0

[Aggiornamento] A partire da Ubuntu 18.04 LTS (server), netplanè il wrapper predefinito per la gestione della rete. La configurazione di Netplan avviene tramite un file YAML , per impostazione predefinita /etc/netplan/01-netcfg.yaml(maggiori dettagli qui ).

La metrica di routing è definita metricdall'opzione " ", che prevede un numero intero positivo ( 100generalmente è il valore predefinito). Ecco l' esempio dalla pagina di riferimento:

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

Il percorso con il più basso metric(lunghezza percorso) diventa il gateway "preferito". (Usa: sudo netplan tryper abilitare le modifiche)

Si noti che in un ambiente di roaming (connessioni multiple, accensione e spegnimento), è possibile impostare il optionalparametro (booleano) su true(il valore predefinito è falso):

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

Notare la sintassi leggermente diversa per la metrica del percorso nel caso delle connessioni DHCP.

Puoi anche usare NetworkManagercome renderer, che suppongo (non mi sono ancora verificato) che ti consenta di vedere / modificare quella parte della configurazione anche tramite strumenti della GUI.

renderer (scalare)

Utilizzare il backend di rete fornito per questa definizione. Attualmente sono supportati networkde NetworkManager. Questa proprietà può essere specificata globalmente in networks:, per un tipo di dispositivo (ad es. ethernets:) O per una particolare definizione di dispositivo. L'impostazione predefinita è networkd.

(L'ultimo esempio "grande" nella pagina di riferimento mostra un uso così ibrido di entrambi i renderer).

Vedi anche questa domanda (askubuntu) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.