Jak skonfigurować sieć IP za pomocą „nmcli” w systemie Linux
Jako administrator Linuksa masz różne narzędzia do konfiguracji połączeń sieciowych, takie jak nmtui, NetworkManager z graficznym interfejsem użytkownika GNOME i oczywiście nmcli (narzędzie wiersza poleceń menedżera sieci).
Zaobserwowałem, że wielu administratorów używa nmtui ze względu na jego prostotę. Jednak użycie nmcli oszczędza czas, zwiększa pewność siebie, umożliwia integrację ze skryptami i jest głównym narzędziem do rozwiązywania problemów z siecią serwerów Linux, szybko przywracając jej funkcjonalność.
Po zauważeniu licznych komentarzy proszących o pomoc dotyczącą nmcli, zdecydowałem się napisać ten artykuł. Oczywiście powinieneś zawsze uważnie czytać strony podręcznika (są one dla ciebie źródłem nr 1). Moim celem jest zaoszczędzenie Twojego czasu i dostarczenie przydatnych wskazówek.
Składnia polecenia nmcli
Składnia nmcli jest następująca:
nmcli [OPTIONS] OBJECT {COMMAND | help}
Gdzie OBJECT
jest jednym z ogólnych, sieciowych, radiowych, połączeń, urządzeń i agentów.
Sprawdź stan urządzenia sieciowego w systemie Linux
Dobrym punktem wyjścia byłoby sprawdzenie naszych urządzeń:
nmcli dev status
DEVICE TYPE STATE CONNECTION
docker0 bridge connected docker0
virbr0 bridge connected virbr0
enp0s3 ethernet connected enp0s3
virbr0-nic ethernet disconnected --
lo loopback unmanaged --
Jak widzimy w pierwszej kolumnie znajduje się lista naszych urządzeń sieciowych. Mamy jedną kartę sieciową o nazwie enp0s3
. Na Twoim komputerze możesz zobaczyć różne nazwy.
Nazwy zależą od typu karty sieciowej (czy jest ona zintegrowana, czy karta PCI itp.). W ostatniej kolumnie widzimy nasze pliki konfiguracyjne, za pomocą których nasze urządzenia łączą się z siecią
Łatwo zrozumieć, że nasze urządzenia same w sobie nie są w stanie nic zrobić. Potrzebują, abyśmy utworzyli plik konfiguracyjny, w którym poinstruujemy ich, jak uzyskać łączność sieciową. Pliki te nazywane są także „profilami połączeń” i znajdziemy je w katalogu /etc/sysconfig/network-scripts.
cd /etc/sysconfig/network-scripts/
ls
Przykładowe wyjście
ifcfg-enp0s3 ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-lo ifdown-post ifup-aliases ifup-plusb ifup-wireless
ifdown ifdown-ppp ifup-bnep ifup-post init.ipv6-global
ifdown-bnep ifdown-routes ifup-eth ifup-ppp network-functions
ifdown-eth ifdown-sit ifup-ib ifup-routes network-functions-ipv6
ifdown-ib ifdown-Team ifup-ippp ifup-sit
ifdown-ippp ifdown-TeamPort ifup-ipv6 ifup-Team
ifdown-ipv6 ifdown-tunnel ifup-isdn ifup-TeamPort
Jak widać, pliki o nazwach rozpoczynających się od 'ifcfg-'
(konfiguracja interfejsu) są profilami połączeń. Kiedy tworzymy nowe połączenie lub modyfikujemy istniejące za pomocą nmcli lub nmtui, wyniki są zapisywane tutaj jako profile połączeń.
Pokażę ci dwa z nich z mojego komputera, jeden z konfiguracją DHCP i jeden ze statycznym adresem IP.
cat ifcfg-static1
cat ifcfg-Myoffice1
Zdajemy sobie sprawę, że niektóre właściwości mają różne wartości, a inne nie istnieją, jeśli nie są konieczne.
Rzućmy okiem na najważniejsze.
TYPE
– mamy tutaj typ Ethernet. Moglibyśmy mieć także WiFi, zespół, więź i inne.DEVICE
– nazwa urządzenia sieciowego powiązanego z tym profilem.BOOTPROTO
– jeśli ma wartość „dhcp”, to nasz profil połączenia uzyskuje dynamiczny adres IP z serwera DHCP. Jeśli ma wartość „brak”, oznacza to, że nie używa dynamicznego adresu IP i prawdopodobnie przypisujemy statyczny adres IP.IPADDR
– to statyczny adres IP, który przypisujemy do naszego profilu.PREFIX
– maska podsieci. Wartość 24 oznacza 255.255.255.0. Maskę podsieci można lepiej zrozumieć, zapisując jej format binarny. Na przykład wartości 16, 24 i 26 oznaczają, że pierwsze 16, 24< lub odpowiednio 26 bitów jest ustawione na 1, a pozostałe na 0. Określa to adres sieciowy i zakres adresów IP, które można przypisać.GATEWAY
– adres IP bramy.DNS1
,DNS2
– dwa serwery DNS, z których chcemy skorzystać.ONBOOT
– jeśli ma wartość „tak” oznacza to, że przy uruchomieniu nasz komputer odczyta ten profil i spróbuje przypisać go do swojego urządzenia.
Sprawdź połączenie sieciowe w systemie Linux
Przejdźmy teraz dalej i sprawdźmy nasze połączenia:
nmcli con show
Ostatnia kolumna urządzeń pomaga nam zrozumieć, które połączenie jest „UP” i działa, a które nie. Na powyższym obrazku widać dwa aktywne połączenia: Myoffice1 i enp0s8.
Wskazówka: jeśli chcesz zobaczyć tylko aktywne połączenia, wpisz:
nmcli con show -a
Wskazówka: możesz użyć przycisku automatycznego uzupełniania Tab
, gdy używasz nmcli, ale lepiej jest użyć minimalny format polecenia.
Zatem następujące polecenia są sobie równe:
nmcli connection show
nmcli con show
nmcli c s
Sprawdź adres IP w systemie Linux
Jeśli sprawdzę adresy IP moich urządzeń:
ip a
Widzę, że moje urządzenie enp0s3
pobrało adres IP 192.168.1.6 z serwera DHCP, ponieważ profil połączenia Myoffice1
, który jest uruchomiony, ma konfigurację DHCP.
Jeśli „uruchom”
mój profil połączenia o nazwie static1
, moje urządzenie przyjmie statyczny adres IP 192.168.1.40 zdefiniowany w profil połączenia.
nmcli con down Myoffice1 ; nmcli con up static1
nmcli con show
Zobaczmy jeszcze raz adres IP:
ip a
Możemy stworzyć nasz pierwszy profil połączenia. Minimalne właściwości, które musimy zdefiniować, to type, ifname i con-name:
type
– dla typu połączenia.ifname
– dla nazwy urządzenia, która jest przypisana do naszego połączenia.con-name
– jako nazwa połączenia.
Tworzenie nowego połączenia Ethernet w systemie Linux
Utwórzmy nowe połączenie Ethernet o nazwie Myhome1
, przypisanej do urządzenia enp0s3
:
nmcli con add type ethernet con-name Myhome1 ifname enp0s3
Sprawdź jego konfigurację:
cat ifcfg-Myhome1
Jak widać ma BOOTPROTO=dhcp
, ponieważ nie podaliśmy żadnego statycznego adresu IP.
Wskazówka: możemy modyfikować dowolne połączenie za pomocą polecenia „nmcli con mod”
. Jeśli jednak zmodyfikujesz połączenie DHCP i zmienisz je na statyczne, nie zapomnij zmienić go „ipv4.method ”
z „auto ”
na „manual ”
. W przeciwnym razie otrzymasz dwa adresy IP: jeden z serwera DHCP i adres statyczny.
Stwórzmy nowy profil połączenia Ethernet o nazwie static2
, który zostanie przypisany do urządzenia enp0s3
, ze statycznym adresem IP 192.168.1.50, podsiecią maska 255.255.255.0=24, i brama 192.168.1.1.
nmcli con add type ethernet con-name static2 ifname enp0s3 ip4 192.168.1.50/24 gw4 192.168.1.1
Sprawdź jego konfigurację:
cat ifcfg-static2
Zmodyfikuj serwery DNS w systemie Linux
Zmodyfikujmy ostatni profil połączenia i dodajmy dwa serwery dns.
nmcli con mod static2 ipv4.dns “8.8.8.8 8.8.4.4”
Wskazówka: jest coś, na co musisz zwrócić uwagę: właściwości adresu IP i bramy mają inne nazwy po dodaniu i modyfikacji połączenia. Kiedy dodajesz połączenia, używasz „ip4 ”
i „gw4 ”
, natomiast gdy je modyfikujesz, używasz „ipv4 ”
i „ gwv4”
.
Uruchom połączenie Ethernet w systemie Linux
Przywołajmy teraz ten profil połączenia:
nmcli con down static1 ; nmcli con up static2
Jak widać, urządzenie enp0s3
ma teraz adres IP 192.168.1.50.
ip a
Wskazówka: istnieje wiele właściwości, które możesz modyfikować. Jeśli nie pamiętasz ich na pamięć, możesz sobie pomóc, wpisując „nmcli con show ”
, a następnie nazwę połączenia:
nmcli con show static2
Możesz modyfikować wszystkie te właściwości pisane małymi literami.
Na przykład: gdy wyłączysz profil połączenia, NetworkManager wyszukuje inny profil połączenia i wyświetla go automatycznie. (Pozostawiam to jako ćwiczenie, aby to sprawdzić). Jeśli nie chcesz, aby Twój profil połączenia łączył się automatycznie:
nmcli con mod static2 connection.autoconnect no
Ostatnie ćwiczenie jest bardzo przydatne: utworzyłeś profil połączenia, ale chcesz, aby korzystali z niego konkretni użytkownicy. Warto klasyfikować swoich użytkowników!
Ustaw uprawnienia do połączenia Ethernet na Użytkownik w systemie Linux
Zezwalamy tylko użytkownikowi stella na korzystanie z tego profilu:
nmcli con mod static2 connection.permissions stella
Wskazówka: jeśli chcesz nadać uprawnienia więcej niż jednemu użytkownikowi, musisz wpisać user:user1,user2
bez spacji między nimi:
nmcli con mod static2 connection.permissions user:stella,john
Jeśli zalogujesz się jako inny użytkownik, nie będziesz mógł uruchomić tego profilu połączenia:
nmcli con show
nmcli con up static2
ls /etc/sysconfig/network-scripts
Komunikat o błędzie informuje, że połączenie „static2” nie istnieje, nawet jeśli widzimy, że istnieje. Dzieje się tak, ponieważ bieżący użytkownik nie ma uprawnień do nawiązania tego połączenia.
Wniosek: nie wahaj się użyć nmcli. To proste i pomocne.