Sieci w Linuksie/iproute2/ip/link
Polecenie ip link służy do konfigurowania, włączania i zarządzania urządzeniami sieciowymi oraz urządzeniami wirtualnymi warstwy sieci. Składnia polecenia wyświetlona za pomocą polecnia `ip link help` wygląda następująco:
Składnia polecenia
[edytuj]Usage: ip link add link DEV [ name ] NAME [ txqueuelen PACKETS ] [ address LLADDR ] [ broadcast LLADDR ] [ mtu MTU ] type TYPE [ ARGS ] ip link delete DEV type TYPE [ ARGS ] ip link set DEV [ { up | down } ] [ arp { on | off } ] [ dynamic { on | off } ] [ multicast { on | off } ] [ allmulticast { on | off } ] [ promisc { on | off } ] [ trailers { on | off } ] [ txqueuelen PACKETS ] [ name NEWNAME ] [ address LLADDR ] [ broadcast LLADDR ] [ mtu MTU ] [ netns PID ] ip link show [ DEV ] TYPE := { vlan | veth | dummy | ifb | macvlan }
Opis poleceń i ich opcji
[edytuj]ip link add link
[edytuj]Polecenie to służy do dodawania nowych interfejsów virtualnych w systemie. Dostępne są następujące interfejsy wirtualne:
- vlan - interfejs VLAN zgodny ze standardem 802.11Q.
- veth - wirtualna para interfejsów Ethernet.
- dummy - interfejs wirtualny dummy.
- ifb - interfejs IFB (ang. Intermediate Functional Block), służący do realizowania zaawansowanych funkcji QoS (następca IMQ).
- macvlan - interfejs pozwalający na posiadanie wielu adresów MAC przypisanych do jednej fizycznej karty sieciowej.
Opcje związane z tworzeniem poszczególnych interfejsów opisane są w kolejnym punkcie. Opis opcji polecenia ip link add link:
- DEV - nazwa interfejsu, do którego zostanie przywiązane urządzenie wirtualne.
- name NAME - nazwa nowotworzonego interfejsu wirtualnego.
- txqueuelen PACKETS - długość kolejki wyjściowej (w pakietach) interfejsu sieciowego.
- address LLADDR - adres warstwy 2 interfejsu (MAC)
- broadcast LLADDR - adres rozgłoszeniowy warstwy 2 interfejsu
- mtu MTU - MTU interfejsu
ip link delete
[edytuj]Polecenie to służy do kasowania wirtualnych interfejsów. Jedynym wymaganym parametrem jest nazwa interfejsu do skasowania.
ip link set
[edytuj]Polecenie to służy do zmiany ustawień istniejących interfejsów. Opcje, które nie zostały opisane poniżej mają identyczne znaczenie jak w poleceniu ip link add link. Polecenie ip link set jest jedynym poleceniem, które nie działa atomowo, tj. istnieje możliwość, że podanie parametry interfejsu sieciowego zostaną ustawione częściowo. Jest to związane z tym, że polecenie to kończy wykonanie po napotkaniu pierwszego błędu. Oznacza to, że lepiej wykonywać kilka zmian po kolei w pojedynczych poleceniach, zamiast na raz. Opcje polecenia:
- { up | down } - włączenie/wyłączenie interfejsu. Jest to coś zupełnie innego niż jego zniszczenie (np. przez wyładowanie sterownika karty sieciowej). Aby działały interfejsy wirtualne powiązane z danym musi on być również włączony.
- arp { on | off } - włączenie/wyłączenie protokołu ARP. Jeżeli dla interfejsu ethernet zostanie wyłączony ARP maszyna będzie widzieć tylko hosty, których adresy zostaną dopisane statycznie do tablicy ARP.
- dynamic { on | off } -
- multicast { on | off } - włączenie/wyłączenie obsługi ruchu multicast.
- allmulticast { on | off } - włączenie/wyłączenie odbioru całego ruchu multicast przez hosta. Ta opcja jest włączona w routerach multikastowych.
- promisc { on | off } - włączenie/wyłączenie trybu podsłuchu. W trybie promisc interfejs odbiera nie tylko pakiety, które są adresowane do niego (adresem docelowym jest adres lokalny warstwy 2, lub adres rozgłoszeniowy), ale również wszystkie inne, które nadejdą.
- trailers { on | off } -
- name NEWNAME - nowa nazwa dla interfejsu. Za pomocą tej opcji można zmienić nazwę interfejsu na nową. Aby móc to zrobić interfejs nie może być używany (należy najpierw go wyłączyć).
- netns PID -
- Przykłady
ip link set dev eth0 down
Powyższe polecenie wyłącza interfejs sieciowy.
ip link set dev eth0 name iface3
Powyższe polecenie zmienia nazwę interfejsu eth0 na iface3.
ip link show
[edytuj]Polecenie to służy do wyświetlania bieżącej konfiguracji urządzeń sieciowych.
Typy interfejsów
[edytuj]dummy
[edytuj]Interfejs dummy służy do tworzenia atrapy interfejsu. Interfejs dummy może posiadać adres konfigurację IP, jednak nie wysyła, ani nie odbiera żadnych pakietów - wszystkie wysyłane przez niego pakiety są przez jądro usuwane. Moduł ten jest przydatny, jeżeli z jakiegoś powodu należy zasymulować istnienie danego interfejsu dla aplikacji użytkownika (np. SLIP, czy PPP).
ifb
[edytuj]Interfejs ifb został stworzony w celu zastąpienia IMQ. Aby móc utworzyć interfejs IFB w jądrze musi być skompilowana jego obsługa (Device Drivers --> Network device support --> Intermediate Functional Block). Aby przerzucić pakiety do urządzenia ifb należy użyć akcji mirred filtrów w poleceniu tc. Aby urządzenie ifb działało, musi zostać włączone. Pakiety, po przejściu przez urządzenie ifb pojawiają się z powrotem w miejscu, z którego zostały wysłane. Aby utworzyć interfejs ifb należy podać nazwę interfejsu rodzica, jednak interfejs ifb nie jest powiązany z rzeczywistym interfejsem i potrzebne jest to jedynie w celu zachowania spójności składni polecenia ip. Podczas ładowania modułu jądra tworzone są automatycznie interfejsy w liczbie równej parametrowi numifbs (domyślnie 2). Składnia polecenia ip link używana do tworzenia interfejsów ifb:
ip link add link DEV [[ name ] NAME ] [ txqueuelen PACKETS ] [ address LLADDR ] [ broadcast LLADDR ] [ mtu MTU ] type ifb
macvlan
[edytuj]Interfejs macvlan pozwala na stworzenie interfejsu wirtualnego z przypisanym innym adresem MAC, niż adres interfejsu-rodzica. Aby móc utworzyć interfejs macvlan w jądrze musi być skompilowana jego obsługa (Device Drivers --> Network device support --> MAC-VLAN). Składnia polecenia ip link używana do utworzenia urządzenia macvlan jest postaci:
ip link add link DEV [[ name ] NAME ] [ txqueuelen PACKETS ] [ address LLADDR ] [ broadcast LLADDR ] [ mtu MTU ] type macvlan
- Przykłady
ip link add link eth0 type macvlan
- Powyższe polecenie utworzy urządzenie macvlan0 (albo macvlanN jeżeli istnieje urządzenie maclvan o numerze N-1) z losowym adresem MAC, przywiązane do interfejsu eth0.
ip link add link eth0 mv0 type macvlan
- Powyższe polecenie utworzy urządzenie mv0 z losowym adresem MAC, przywiązane do interfejsu eth0.
ip link add link eth0 name mv0 address 01:23:45:67:89:AB type macvlan
- Powyższe polecenie utworzy urządzenie mv0 z adresem MAC 01:23:45:67:89:AB, przywiązane do interfejsu eth0.
vlan
[edytuj]Interfejs vlan pozwala na tworzenie wirtualnych interfejsów sieciowych obsługujących tagi VLAN (IEEE 802.1Q). Obsługa interfejsu vlan przez polecenie ip link add link zastępuje użycie przestarzałego narzędzia vconfig (opisanego w rozdziale Sieci:Linux/vconfig. Aby móc korzystać z VLANów jądro musi je obsługiwać, w tym celu należy w menuconfig zaznaczyć opcję Networking support --> Networking options --> 802.1Q VLAN Support (VLAN_8021Q w .config). Prócz tego można włączyć również obsługę protokołu GVRP (ang. GARP VLAN Registration Protocol). Składnia polecenia ip link add link podczas tworzenia interfejsu vlan jest następująca:
ip link add link DEV [[ name ] NAME ] [ txqueuelen PACKETS ] [ address LLADDR ] [ broadcast LLADDR ] [ mtu MTU ] type vlan ARGS ARGS := id VLANID [ FLAG-LIST ] [ ingress-qos-map QOS-MAP ] [ egress-qos-map QOS-MAP ] VLANID := 0-4095 FLAG-LIST := [ FLAG-LIST ] FLAG FLAG := [ reorder_hdr { on | off } ] [ gvrp { on | off } ] QOS-MAP := [ QOS-MAP ] QOS-MAPPING QOS-MAPPING := FROM:TO
Znaczenie poszczególnych opcji jest następujące:
- id VLANID - numer VID sieci VLAN, w której ma działać interfejs. Numery VID obejmują zakres 0-4095, przy czym 0 ma specjalne znaczenie.
- reorder_hdr { on | off} - włączenie tej opcji powoduje usunięcie tagu VLAN z ramki Ethernet wewnątrz jądra. Opcja ta jest potrzebna w przypadku używania aplikacji, które nie potrafią pracować na tagowanych ramkach Ethernet (np. starsze wersje demona DHCPD). Włączenie tej opcji może także spowodować ogłupienie innych aplikacji, np. snifferów Wireshark i tcpdump (opisanych w rozdziałach Sieci:Linux/Wireshark i Sieci:Linux/tcpdump).
- gvrp { on | off} - włączenie tej opcji powoduje uruchomienie w jądrze demona GVRP, służącego do rejestrowania VLANów w przełącznikach obsługujących protokół GVRP.
- ingress-qos-map QOS-MAP - opcja ta pozwala na mapowanie pola QoS pomiędzy odpowiednim polem tagu VLAN, a polem skb->priority pakietu.
- egress-qos-map QOS-MAP - opcja ta pozwala na mapowanie pola skb->priority na odpowiednie pole tagu VLAN.
- Przykłady
ip link add link eth0 name vl4004 type vlan id 4004 gvrp on
Powyższe polecenie utworzy interfejs o nazwie vl4004 podłączony do VLAN 4004 na interfejsie eth0.