Sieci w Linuksie/iproute2/ip/link

Z Wikibooks, biblioteki wolnych podręczników.

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.