Zarządzanie połączeniami sieciowymi w Linuxie za pomocą narzędzia konsolowego nmcli

Wykorzystaj wszystkie możliwości narzędzia do zarządzania połączeniami sieciowymi NetworkManager w wierszu poleceń Linux za pomocą narzędzia nmcli.

Zarządzanie połączeniami sieciowymi w Linuxie za pomocą narzędzia konsolowego nmcli

Narzędzie nmcli bezpośrednio komunikuje się z API w celu uzyskania dostępu do funkcji NetworkManager.

Pojawił się w 2010 roku i dla wielu stał się alternatywnym sposobem konfiguracji interfejsów sieciowych i połączeń. Chociaż niektórzy nadal używają ifconfig. Ponieważ nmcli jest narzędziem interfejsu wiersza poleceń (CLI) przeznaczonym do użycia w oknach terminali i skryptach, idealnie nadaje się dla administratorów systemów działających bez GUI.

Składnia poleceń ncmli

Ogólnie składnia wygląda następująco:

$ nmcli  

  • options — to parametry określające szczegóły działania nmcli,
  • section (sekcja) — definiuje, jakimi możliwościami narzędzia można się posługiwać,
  • action (akcja) — pozwala określić, co dokładnie należy zrobić.

Istnieje łącznie 8 sekcji, z których każda jest związana z zestawem poleceń (akcji):

  • Pomoc wyświetla pomoc na temat poleceń ncmcli i ich zastosowania.
  • General zwraca status NetworkManager i globalną konfigurację.
  • Networking włącza polecenia do zapytania o stan połączenia sieciowego oraz włączania / wyłączania połączeń.
  • Radio włącza polecenia do zapytania o stan połączenia z siecią WiFi oraz włączania / wyłączania połączeń.
  • Monitor włącza polecenia do monitorowania aktywności NetworkManager i obserwacji zmian stanu połączeń sieciowych.
  • Connection włącza polecenia do zarządzania interfejsami sieciowymi, dodawania nowych połączeń i usuwania istniejących.
  • Device głównie używane do zmiany parametrów związanych z urządzeniami (na przykład nazwą interfejsu) lub do łączenia urządzeń przy użyciu istniejącego połączenia.
  • Secret rejestruje nmcli jako „agenta sekretnego” NetworkManager, który nasłuchuje ukrytych wiadomości. Ta sekcja jest rzadko używana, ponieważ nmcli działa w ten sposób domyślnie przy łączeniu się z sieciami.

Proste przykłady

Przed rozpoczęciem pracy upewnij się, że NetworkManager jest uruchomiony i nmcli może się z nim komunikować:

$ nmcli general
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled

Często pracę zaczyna się od przeglądania wszystkich profili połączeń sieciowych:

$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

Ta komenda używa działania show dla sekcji Connection.

Na testowej maszynie działa Ubuntu 20.04. W tym przypadku znaleźliśmy trzy połączenia przewodowe: enp0s3, enp0s8 i enp0s9.

Zarządzanie połączeniami

Ważne jest, aby zrozumieć, że w nmcli termin Connection odnosi się do podmiotu, który zawiera wszystkie informacje o połączeniu. Innymi słowy, to konfiguracja sieci. Connection enkapsuluje wszystkie informacje związane z połączeniami, w tym poziom kanału i informacje o adresach IP. To poziom 2 i poziom 3 w modelu OSI.

Gdy konfigurujesz sieć w Linuksie, zazwyczaj ustawiasz połączenia, które ostatecznie będą przypisane do urządzeń sieciowych, które z kolei są interfejsami sieciowymi zainstalowanymi na komputerze. Kiedy urządzenie korzysta z połączenia, uznaje się je za aktywne lub uruchomione. Jeśli połączenie nie jest używane, jest nieaktywne lub zresetowane.

Dodawanie połączeń sieciowych

Narzędzie nmcli pozwala szybko dodawać i od razu konfigurować połączenia. Na przykład, aby dodać Wired connection 2 (z enp0s8), należy z uprawnieniami superużytkownika uruchomić następującą komendę:

$ sudo nmcli connection add type ethernet ifname enp0s8
Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully added.

W opcji type określamy, że będzie to połączenie Ethernet, a w opcji ifname (nazwa interfejsu) wskazujemy, którego interfejsu sieciowego chcemy użyć.

Oto co będzie po uruchomieniu polecenia:

$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9
ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  --  

Utworzono nowe połączenie, ethernet-enp0s8. Przypisano mu UUID, typ połączenia — Ethernet. Uruchamiamy je za pomocą komendy up:

$ nmcli connection up ethernet-enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

Jeszcze raz sprawdzamy listę aktywnych połączeń:

$ nmcli connection show --active
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

Dodano nowe połączenie ethernet-enp0s8, jest aktywne i używa interfejsu sieciowego enp0s8.

Konfiguracja połączeń

Narzędzie ncmli umożliwia łatwą zmianę parametrów już istniejących połączeń. Na przykład, jeśli potrzebujesz zmienić dynamiczny (DHCP) na statyczny adres IP.

Załóżmy, że chcemy ustawić adres IP na 192.168.4.26. Można to zrobić za pomocą dwóch poleceń. Pierwsze bezpośrednio ustawi adres IP, a drugie przełączy metodę ustawienia adresu IP na wartość „ręcznie” (manual):

$ nmcli connection modify ethernet-enp0s8 ipv4.address 192.168.4.26/24
$ nmcli connection modify ethernet-enp0s8 ipv4.method manual

Nie zapomnij również ustawić maski podsieci. Dla naszego testowego połączenia jest to 255.255.255.0, czyli z /24 dla bezklasowego routingu (CIDR).

Aby zmiany zaczęły obowiązywać, należy dezaktywować i następnie ponownie aktywować połączenie:

$ nmcli connection down ethernet-enp0s8
Połączenie 'ethernet-enp0s8' pomyślnie dezaktywowane (aktywny ścieżka D-Bus: /org/freedesktop/NetworkManager/ActiveConnection/4)
$ nmcli connection up ethernet-enp0s8
Połączenie pomyślnie aktywowane (aktywny ścieżka D-Bus: /org/freedesktop/NetworkManager/ActiveC

Jeśli potrzebujesz ustawić DHCP, zamiast manual użyj auto:

$ nmcli connection modify ethernet-enp0s8 ipv4.method auto

Praca z urządzeniami

W tym celu używamy sekcji Device.

Sprawdzanie statusu urządzeń

$ nmcli device status
URZĄDZENIE  TYP      STAN      POŁĄCZENIE        
enp0s3  ethernet  połączone  Połączenie kablowe 1
enp0s8  ethernet  połączone  ethernet-enp0s8    
enp0s9  ethernet  połączone  Połączenie kablowe 3
lo      loopback  niezarządzane  --  

Zapytanie o informacje o urządzeniu

W tym celu używamy akcji show z sekcji Device (należy podać nazwę urządzenia). Narzędzie wyświetla dość dużo informacji, często na kilku stronach.
Sprawdźmy interfejs enp0s8, który wykorzystuje nasze nowe połączenie. Upewnijmy się, że używa dokładnie tego adresu IP, który ustawiliśmy wcześniej:

$ nmcli device show enp0s8
GENERAL.DEVICE:                         enp0s8
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:81:16:20
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (połączone)
GENERAL.CONNECTION:                     ethernet-enp0s8
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/6
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.4.26/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.4.0/24, nh = 0.0.0.0, mt = 103
IP6.ADDRESS[1]:                         fe80::6d70:90de:cb83:4491/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 103
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

Jest sporo informacji. Wybierzmy najważniejsze:

  • Nazwa interfejsu sieciowego: enp0s8.
  • Typ połączenia: przewodowe połączenie Ethernet.
  • Widok adresu MAC urządzenia.
  • Podano Maximum transmission unit (MTU) — maksymalny rozmiar użytecznego bloku danych jednego pakietu, który może być przesyłany przez protokół bez fragmentacji.
  • Urządzenie aktualnie połączono.
  • Nazwa połączenia, używającego urządzenia: ethernet-enp0s8.
  • Urządzenie używa adresu Adres IP, który wcześniej ustawiliśmy: 192.168.4.26/24.

Inne informacje dotyczą domyślnych parametrów routingu i bramki połączenia. Zależą one od konkretnej sieci.

Interaktywny edytor nmcli

Nmcli ma także prosty interaktywny edytor, w którym niektórym może być wygodniej pracować. Aby go uruchomić, np. dla połączenia ethernet-enp0s8, użyj działania edit:

$ nmcli connection edit ethernet-enp0s8

Ma również małą pomoc, która jest wprawdzie mniejsza od wersji konsolowej:

===| edytor interaktywny nmcli |===
Edycja istniejącego połączenia '802-3-ethernet': 'ethernet-enp0s8'
Wpisz 'help' lub '?' aby zobaczyć dostępne komendy.
Wpisz 'print' aby pokazać wszystkie właściwości połączenia.
Wpisz 'describe [<setting>.<prop>]' aby uzyskać szczegółowy opis właściwości.
Możesz edytować następujące ustawienia: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, tc, proxy
nmcli>

Jeśli wpiszesz polecenie print i naciśniesz Enter, nmcli wyświetli wszystkie właściwości połączenia:

===============================================================================
                 Szczegóły profilu połączenia (ethernet-enp0s8)
===============================================================================
connection.id:                          ethernet-enp0s8
connection.uuid:                        09d26960-25a0-440f-8b20-c684d7adc2f5
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              enp0s8
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (domyślnie)
connection.multi-connect:               0 (domyślnie)
connection.auth-retries:                -1
connection.timestamp:                   1593967212
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (domyślnie)
connection.secondaries:                 --

Na przykład, aby ustawić właściwość DHCP dla połączenia, wejdź do ipv4 i naciśnij Enter:

nmcli> goto ipv4
Możesz edytować następujące właściwości: method, dns, dns-search, 
dns-options, dns-priority, addresses, gateway, routes, route-metric, 
route-table, routing-rules, ignore-auto-routes, ignore-auto-dns, 
dhcp-client-id, dhcp-iaid, dhcp-timeout, dhcp-send-hostname, 
dhcp-hostname, dhcp-fqdn, dhcp-hostname-flags, never-default, may-fail, 
dad-timeout
nmcli ipv4>

Następnie wpisz set method auto i naciśnij Enter:

nmcli ipv4> set method auto
Czy chcesz również wyczyścić 'ipv4.addresses'? [tak]:

Jeśli chcesz wyczyścić statyczny adres IP, naciśnij EnterW przeciwnym razie wpisz no i naciśnij Enter. Możesz go zapisać, jeśli myślisz, że będzie ci potrzebny w przyszłości. Ale nawet z zapisanym statycznym adresem IP zostanie użyte DHCP, jeśli metoda jest ustawiona na auto.

Użyj polecenia save, aby zapisać zmiany:

nmcli ipv4> save
Połączenie 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) zostało pomyślnie zaktualizowane.
nmcli ipv4>

Wpisz quit, aby wyjść z interaktywnego edytora nmcli. Jeśli zmienisz zdanie i nie chcesz wychodzić — użyj polecenia back.

I to jeszcze nie wszystko

Otwórz interaktywny edytor nmcli i zobacz, ile istnieje ustawień i ile właściwości ma każde ustawienie. Interaktywny edytor to doskonałe narzędzie, ale jeśli chcesz używać nmcli w jednowierszowych poleceniach lub skryptach, potrzebujesz zwykłej wersji w wierszu poleceń.

Teraz, gdy znasz podstawy, zapoznaj się z stroną pomocy nmcli, aby dowiedzieć się, jak jeszcze może ci pomóc.

Reklama

Epickie serwery — to serwery wirtualne na Windows lub Linux z potężnymi procesorami z rodziny AMD EPYC i bardzo szybkim dyskiem NVMe Intel. Nie zwlekaj, zamów już teraz!

Zarządzanie połączeniami sieciowymi w Linuxie za pomocą narzędzia konsolowego nmcli

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster