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.