"iproute2" statt "ifconfig,route,vconfig,ifenslave,brctl"
Mit iproute2
hat Linux schon lange einen Nachfolger für die althergebrachten Tools wie ifconfig
und route
.
Die gibt es zwar immer noch, aber für viele neuen Funktionen braucht man dann schon extra Tools wie bridge-utils
, vlan
, ifenslave
(für Bonding).
Der exakte Umfang hängt allerdings von der Kernel-Version und von der Paket-Version von iproute2
ab.
Mit iproute2 gibt es eine sehr schöne Übersicht, was man mit iproute so alles machen kann:
Ethernet-Interface konfigurieren (ifconfig,route)
ip addr replace 10.200.17.2/24 dev "eth0"
ip link set dev "eth0" up
ip route replace default via 10.200.17.1 dev "eth0"
replace
sorgt dafür, das eine ggf. vorher bereits existierende Adresse bzw. Route ersetzt wird;
add
würde sich sonst darüber beschweren.
Es lassen sich auch weitere Adressen hinzufügen, ohne das man die früheren virtuellen Interfaces (eth0:1) weiterhin verwenden muss, was bei IPv6 durchaus standard ist:
ip addr add f001:4dd0:ff00:8c42:ff17::5254:00af:f03c/80 dev "eth0"
Da teilen sich mehrer IP-Adressen die selbe Ethernet-MAC-Adresse. Mit macvlan kann man alternativ auch weitere virtuelle Ethernet-Interfaces mit eigenen MAC-Adressen erzeugen, um z.B. Dienste gezielt an eine IP-Adresse binden zu können:
ip link add name "eth-ssh" link eth0 type macvlan
ip addr add 10.200.17.3/24 dev "eth-ssh"
ip link set dev "eth-ssh" up
…
ip link del dev "eth-ssh"
Bridge einrichten (brctl, bridge)
ip link add name "br-inet" type bridge
ip addr add 10.200.17.2/24 dev "br-inet"
ip link set dev "br-inet" up
ip link set dev eth0 master "br-inet"
ip link set dev eth0 up
ip route replace default via 10.200.17.1 dev "br-inet"
802.1q VLAN einrichten (vconfig)
ip link add name "vlan-phahn17" link eth0 type vlan id 17
ip addr add 10.200.17.2/24 dev "vlan-phahn17"
ip link set dev "vlan-phahn17" up
…
ip link del dev "vlan-phahn17"
Kanal-Bündelung (Bonding) einrichten (ifenslave)
ip link add name "bond-intern" type bond
ip link set dev eth0 master "bond-intern"
echo … >/sys/class/net/"bond-intern"/bonding/…
…
ip link del dev "bond-intern"
tap-Interface für Ethernet-Frames anlegen (tunctl,openvpn –mktun)
Das eine Ende ist ein Netzwerk-Interface tap0
, das andere ein Device-File /dev/net/tun
, aus dem Ethernet-Frames heraus kommen bzw. geschrieben werden können.
ip tuntap add dev "tap0" mode tap user phahn group users
ip link set dev "tap0" up
…
ip link del dev "tap0"
Alternativ kann man auch tun-Interfaces für IP(v4)-Pakete konfigurieren:
Wie tap
, nur das IP(v4)-Pakete statt Ethernet-Frames verarbeitet werden.
Mit macvtap gibt es noch ein zu tap
kompatible Interfaces für VMs, die aber auch wie macvlan
direkt eine eigene MAC-Adresse bekommen und so keine explizite Bridge benötigen.
Allerdings kann (Design-bedingt) der Host dann nicht direkt mit den VMs kommunizieren, sondern der (externe) Switch muss die Pakete zurück schicken.
Hintergrund ist, dass die Linux-Bridge eher ineffizient ist, weil das Ethernet-Device dann im promiscuous-Modus laufen muss und damit zu viele Pakete aus dem Netzwerk die Bridge erreichen und damit von der Host-CPU gefiltert werden müssen.
Mit macvtap
bekommt jede VM seine eigene MAC-Adresse und nur diese werden über das Ethernet-Device an den Switch publiziert, so dass dieser schon die Pakete filtern kann.
Virtual-Ethernet-Device (veth) einrichten
Prinzipiell nur ein Patch-Kabel zwischen zwei Netzwerk-Interfaces, die direkt miteinander verbunden sind, ohne /dev/net/tun
dazwischen.
Nützlich für Container oder für die direkte Kommunikation zweier lokale Prozesse, die nur per Netzwerk kommunizieren.
ip link add name "veth-host" type veth peer name "veth-guest"
ip netns add "my-env"
ip link set dev "veth-guest" netns "my-env" name "eth0"
ip netns exec "my-env" ip …
…
ip link del dev "veth-host"
ip netns del "my-env"
Netzwerk-Interfaces können einen beliebigen Namen haben:
- maximal 15 Zeichen
- keine Leerzeichen, Tabs, Zeilenumbrüche, Slashes
- nicht
.
oder..