Jak ustawić priorytet połączeń sieciowych w Ubuntu?

41

Jeśli maszyna Ubuntu 11.04 jest jednocześnie podłączona do Wi-Fi i 3G, jak ustawić priorytet, aby aplikacje (przeglądarka itp.) Najpierw korzystały z Wi-Fi? Jeśli to nie jest dostępne, należy użyć 3G.

Zasadniczo chciałbym ustawić kolejność, w jakiej połączenia sieciowe są używane.

Edycja: Szukam łatwiejszego podejścia, które byłoby przydatne dla tych, którzy są po prostu komfortowi i nie są ekspertami w Ubuntu / Linux.

Praveen Sripati
źródło

Odpowiedzi:

27

Jestem zaskoczony nikt nie wspomniał najprostsze polecenia, aby to zrobić: ifmetric. Można go zainstalować za pomocą sudo apt-get install ifmetric. Za pomocą tego polecenia można zmienić metrykę dowolnego interfejsu. Interfejs z niższym metryki jest korzystne dla Internetu.

Aby tego użyć, najpierw zobacz metryki za pomocą routepolecenia:

$ 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

Tutaj eth0ma niższą charakterystykę, więc będzie lepsza niż wlan0. Jeśli chcesz wlan0, obniż jego metrykę:

sudo ifmetric wlan0 50

Teraz tabela routingu wyglądałaby następująco:

$ 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

Teraz Linux będzie korzystał wlan0z Internetu. Zmiana zostanie odzwierciedlona natychmiast.

Shivams
źródło
1
Świetna odpowiedź. Thx (także dla trasy -n). Musiałem zrestartować komputer po zainstalowaniu ifmetric, aby polecenie zmieniło metrykę
Thorsten Niehues
Jak ustawić tę zmianę na stałe (nie chcę przypadkowo użyć mojego hotspotu iPhone'a)
Thorsten Niehues
2
@ThorstenNiehues: Szybkie rozwiązanie przychodzi mi do głowy, aby na stałe jest dodanie komendy ifmetric do crontab, wykonując crontab -ea następnie dodaj linię na końcu: @reboot sudo ifmetric wlan0 50.
shivams
To działa. Ale po tym nie mogę uzyskać dostępu do lokalnych komputerów (np. Przez przeglądarkę). Dowolny pomysł? Dzięki.
tomasb
@tomasb: ciekawe wątpliwości. Jest to jednak oczekiwane, ponieważ zmiana preferencji interfejsu spowoduje przejście do sieci lokalnej preferowanego interfejsu. Jednym z prostych sposobów uzyskania dostępu do maszyn lokalnych jest dostęp do nich za pomocą maszyny wirtualnej. Jednak muszą istnieć lepsze rozwiązania. Pozwól mi pomyśleć i odpowiedzieć.
shivams
14

Ustawienie wskaźników to sposób zmiany priorytetów. Wyższy wskaźnik jest droższy w użyciu, więc system operacyjny użyje interfejsów o najniższym wskaźniku, jeśli będzie musiał kierować ruchem. W przypadku zamknięcia interfejsu o niższej wartości metrycznej użyje interfejsu o wyższej wartości, ponieważ jest to jedyny interfejs, którego można użyć do kierowania ruchu do tej konkretnej sieci / miejsca docelowego.

Metryki są określone w pliku / etc / network / interfaces , odsyłacz wskazuje na dokumentację.

Użyj dowolnego edytora tekstu, aby edytować plik, zidentyfikować sieci, po prostu zmień metricparametr i zapisz. Ponowne uruchomienie to najprostszy sposób na zresetowanie wszystkich wartości bez wchodzenia w geekowe szczegóły ponownego uruchamiania usług sieciowych.

harrymc
źródło
2
Harry - Dzięki za odpowiedź - Sieć, którą interesuję się w eth1, jest pokazana w „ifconfig”, ale nie w „/ etc / network / interfaces”. Co pokazano w „ifconfig”, a co w „/ etc / network / interfaces”?
Praveen Sripati,
1
Dodanie eth0 do „/ etc / network / interfaces” jest bardziej ryzykowne. Możesz spróbować ifconfig jako root, aby zmienić metrykę interfejsu (sprawdź, czy pozostanie tam po uruchomieniu).
harrymc
Kiedy uruchomiłem „sudo ifconfig eth1 metric 4”, otrzymałem następujący błąd „SIOCSIFMETRIC: Operacja nie jest obsługiwana”. goo.gl/UhXBJ mówi, że „Ponadto nie wszystkie systemy korzystają z argumentu metrycznego. ..... Podczas konfigurowania systemu Linux dodajesz jawne polecenie trasy dla każdego interfejsu. "Wygląda na to, że w Ubuntu nie ma prostego podejścia, takiego jak interfejs użytkownika dla początkującego użytkownika.
Praveen Sripati
2
Wygląda na to, że Linux decyduje się na najszybszy adapter po szybkim teście szybkości na wszystkich adapterach. Metryka nie jest już obsługiwana w wielu dystrybucjach. Nadal możesz próbować dyktować różne rzeczy za pomocą „/ etc / network / interfaces”, ale nie wiem, jak odniesiesz sukces. Zobacz także to pytanie .
harrymc
3
Najprostszym rozwiązaniem, które wszyscy robią, jest wyłączenie interfejsu, którego nie chcesz używać, lub ograniczenie go do „Używaj tego połączenia tylko do zasobów w jego sieci” (jeśli masz także drukarkę lub cokolwiek innego na tym ten sam router).
harrymc
7
  1. Priorytetyzacja interfejsów dla ogólnego ruchu odbywa się poprzez manipulowanie metrykami routingu. Każda trasa ma powiązane parametry, takie jak liczba przeskoków i przepustowość. Zobacz opcję „metryka” na stronie podręcznika dla routepolecenia.

    $ 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. Priorytetowy dostęp aplikacji do zasobów sieciowych jest często rozwiązany przez „kształtowanie ruchu” - użyłbym wyszukiwarki internetowej, aby sprawdzić, czy Ubuntu lub router może to zrobić.


Notatka.

W systemie MS Windows, ale nie w systemie Linux, netstat -nrpolecenie wyświetla te same informacje, co route print. W tym metryki routingu.

RedGrittyBrick
źródło
Na stronie podręcznika dla trasy „Metryka„ Odległość ”do celu (zwykle liczona w przeskokach). Nie jest używana przez ostatnie jądra, ale może być potrzebna przez routowanie demonów.”. Nie jestem pewien, czy na zwykłym Ubuntu Desktop parametr Metric będzie miał jakikolwiek wpływ.
Praveen Sripati,
1
Czy możesz mi podać konkretne polecenie trasy, aby to zrobić?
Praveen Sripati,
11
@PraveenSripati - Nie sądzę, że dałeś 100 swoich ciężko zarobionych przedstawicieli za taką odpowiedź - technicznie poprawne, ale nie pomaga tobie ani mnie. :-( Szukam też konkretnego polecenia.
Lord Loh.
1
Naprawdę jaka odpowiedź? również netstat -nr nie wyświetla metryki. Zobacz odpowiedź od @shivams
Thorsten Niehues
3

Naprawdę tego nie wypróbowałem, ale do tego celu można użyć NCD (Network Configuration Daemon - 1). Witryna twierdzi, że ułatwia konfigurację sieci. Składnia wydaje się prosta.

# Poczekaj na połączenie sieciowe. Preferuj eth1, umieszczając go przed eth0.
pnames list („NET-eth1”, „NET-eth0”);

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

Praveen Sripati
źródło
Masz rację, moje oprogramowanie NCD robi to dobrze; przykład tam działa jak jest. Powinienem jednak zauważyć, że pnameslista ta jest w rzeczywistości tylko argumentem do multidepend()oświadczenia w następnym wierszu - tym, który realizuje priorytety. Mechanizmem tego jest to, że gdy eth1pojawia się, gdy eth0jest już w górze, wykonuje się multiprovide("NET-eth1");, ponieważ NET-eth1jest przed NET-eth0, multidepend()spadnie i natychmiast wróci, ale eth1zamiast tego ujawnia zmienne z procesu eth0.
Ambroz Bizjak,
Spojrzałem na to, ale nie mogłem tego zrozumieć. To nie powinno być takie trudne.
SDsolar
3

Wszystko to z powodu wskaźników trasy. Chcesz usunąć domyślną trasę z najniższą metryką, a następnie przywrócić starą trasę z wyższą metryką. Wykonaj poniższe polecenia.

Powiedzmy, że twoja tabela routingu wygląda następująco:

# 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

Teraz usuń domyślną bramę

# route delete default gateway

Teraz przywróć starszą domyślną bramę (zauważ, że w tym przypadku metryka jest wyższa niż 102 niż bieżąca domyślna trasa 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
PnotNP
źródło
To działa. Uwaga dla wszystkich innych nowicjuszy (musiałem przeczytać to kilka razy, aby śledzić to, co się działo): krok 1 powyżej usuwa wpis dla Gateway= 10.16.87.254, który jest UGnajniższy Metric, a krok 2 odsyła go z wyższym, Metricwięc jest nadal dostępny jako kopia zapasowa na wypadek, gdyby 192.168.151.2był niedostępny.
WillC
0

[Aktualizacja] Począwszy od Ubuntu 18.04 LTS (serwer), netplanjest domyślnym opakowaniem do zarządzania siecią. Konfigurowanie Netplan odbywa się domyślnie za pomocą pliku YAML/etc/netplan/01-netcfg.yaml (więcej szczegółów tutaj ).

Metryka routingu jest zdefiniowana przez metricopcję „ ”, która oczekuje dodatniej liczby całkowitej ( 100jest to zazwyczaj wartość domyślna). Oto przykład ze strony referencyjnej:

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

Trasa o najniższej metric(długości ścieżki) staje się bramą „preferowaną”. (Użyj: sudo netplan tryaby włączyć zmiany)

Zauważ, że w środowisku mobilnym (wiele połączeń, włączanie i wyłączanie) możesz ustawić parametr optional(boolean) na true(domyślnie 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

Zwróć uwagę na nieco inną składnię metryki trasy w przypadku połączeń DHCP.

Możesz także użyć NetworkManagerjako renderer, który, jak sądzę (jeszcze nie przetestowałem), pozwoliłby ci zobaczyć / edytować tę część konfiguracji również za pomocą narzędzi GUI.

renderer (skalarny)

Użyj podanego zaplecza sieciowego dla tej definicji. Obecnie obsługiwane są networkdi NetworkManager. Tę właściwość można określić globalnie w networks:, dla typu urządzenia (np. ethernets:) Lub dla określonej definicji urządzenia. Domyślnie jest networkd.

(Ostatni „duży” przykład na stronie referencyjnej pokazuje takie hybrydowe użycie obu rendererów).

Zobacz także to pytanie (askubuntu) .

EvDev
źródło