Netzwerk unter Linux
Auf dieser Seite geht es um die Netzwerkkonfiguration von Linux-Rechnern, siehe auch:
- Netbox (Inventarisierung)
Dateien im Netzwerk freigeben
Zur Dateifreigabe/Dateiübertragung im Netzwerk hat man mehrere Möglichkeiten:
- FTP: unverschlüsselt, verschlüsselte Variante FTPs möglich (FTP over SSL)
- Samba (Windows/*nix-Rechner): unverschlüsselt
- SCP (Secure Copy), SSHfs oder SFTP laufen verschlüsselt über SSH
- NFS (vorrangig bei *nix-Rechnern): unverschlüsselt
Die Option mit VPN bzw. IPSec das Netz grundsätzlich abzusichern besteht natürlich zusätzlich.
Netzwerkkonfiguration
Grundsätzlich erfolgte die Konfiguration über ifconfig
, bei wlan (s.u.) kann man auch mit iwconfig
arbeiten. Aktuell wird der Befehl ip verwendet, ifconfig funktioniert jedoch auch noch.
Mit dem Befehl netcardconfig
kann man auf einigen Systemen arbeiten.
relevante Befehle
Einstellung | Befehl(e) |
---|---|
IP-Adresse, Broadcast, Netzwerkmaske anzeigen | ip addr show
oder ifconfig
|
IP-Adresse hinzufügen | zweite IP: ip addr add $IP/$Netmask broadcast $bcIP dev $device oder ifconfig $device:1 $IP netmask $SUBNET up |
IP-Adresse entfernen | ip addr del $IP/$netmask dev $device oder alle IPs entfernen: ip addr flush dev $device |
ARP-Eintrag hinzufügen | ip neigh add $IP lladdr $MAC nud permanent dev $device oder arp -i $device -s $IP $MAC |
Netzwerkkarten (de)aktivieren | ip link down $device ifup, ifdown; auch ifconfig: ifconfig $device down |
Hostname | hostname |
Standard/Defaultroute® oder Gateway | ip route show
oder route -n
|
Route hinzufügen | ip route add $IP/$netmask dev $device oder route add -net $IP/$netmask dev $device |
Nameserver, Domainname | Ausgabe: cat /etc/resolv.conf oder eintragen in dieser Datei. Achtung: Bei aktuellen Linux-Distributionen steht dort eine IP wie 127.x.x.x. Grund ist das die historische Datei-Lösung eher ungeeignet für dynamische Wechsel von DNS-Servern ist (Wechsel ins Wlan, VPN, …). Daher gibt es lokal fest eingetragene Resolver die nach Bedarf schnell zwischen verschiedenen DNS-Servern umschalten können. Das sind Beispielsweise der networkmanager, resolvconf oder systemd 2). |
Netzwerkschnittstellen | |
Netzwerkschnittstellenkonfiguration | cat /etc/network/interfaces
bzw. |
Bekannte Dienste (Ports) | Ausgabe: cat /etc/services |
Wlan | iwconfig, iwlist, iwpriv (private Parameter für wlan) |
Anmerkung: der Befehl cat gibt den Inhalt der Datei aus.
Benennung der Netzwerkschnittstellen
Je nach Reihenfolge in der die Treiber geladen werden, werden die Netzwerkschnittstellen hochnummeriert: eth0, eth1, … . Durch udev kann die Zuordnung abgeändert werden, dazu muss bei früher bei Debian die Datei /etc/udev/rules.d/70-persistent-net.rules
abgeändert werden. Heutzutage werden die Schnittstellen abhängig von diversen Faktoren benannt, z.B. enp0s3.
Vlan-Funktionen sind im Namen durch einen Punkt abgetrennt, Aliase durch einen Doppelpunkt.
Diese Namen könnten sich nach größeren kernel-upgrades ändern, deshalb ist möglicherweise ein festes Schema sinnvoller. Beispiel anhand eingebauter MAC-Adressen:
# /etc/systemd/network/99-interfaces.link [Match] OriginalName=* [Link] NamePolicy=mac MACAddressPolicy=persistent
Beispiel: Eine konkrete Netzwerkkarte mit MAC-Adresse aa:bb:cc:dd:ee:ff auf eth1p1:
[Match] MACAddress=aa:bb:cc:dd:ee:ff [Link] Name=eth1p1
eth0 beibehalten
Kernel-Boot-Parameter: net.ifnames=0 biosdevname=0
in /etc/default/grub
# debian: sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT=\"quiet\"/GRUB_CMDLINE_LINUX_DEFAULT=\"quiet net.ifnames=0 biosdevname=0\"/' /etc/default/grub # ubuntu: sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT=\"\"/GRUB_CMDLINE_LINUX_DEFAULT=\"net.ifnames=0 biosdevname=0\"/' /etc/default/grub update-grub
Parsen von Schnittstelleninformationen
Im Debian-Paket moreutils befindet sich „ifdata“, dies kann diverse Informationen über Netzwerkschnittstellen maschinenlesbar aufbereiten:
Usage: ifdata [options] iface -e Reports interface existence via return code -p Print out the whole config of iface -pe Print out yes or no according to existence -pa Print out the address -pn Print netmask -pN Print network address -pb Print broadcast -pm Print mtu -ph Print out the hardware address -pf Print flags -si Print all statistics on input -sip Print # of in packets -sib Print # of in bytes -sie Print # of in errors -sid Print # of in drops -sif Print # of in fifo overruns -sic Print # of in compress -sim Print # of in multicast -so Print all statistics on output -sop Print # of out packets -sob Print # of out bytes -soe Print # of out errors -sod Print # of out drops -sof Print # of out fifo overruns -sox Print # of out collisions -soc Print # of out carrier loss -som Print # of out multicast -bips Print # of incoming bytes per second -bops Print # of outgoing bytes per second
Wlan
siehe Seite zu wlan.
Einstellungen
DHCP (IP-Adresse dynamisch beziehen)
Konfiguration mit DHCP (dynamische Adressvergabe, unter Windows wird dies als „automatisch“ bezeichnet.
ifupdown2 / ifupdown2
DHCP-Einstellungen in der (/etc/network/interfaces
):
allow-hotplug eth0 iface eth0 inet dhcp
allow-hotplug eth0 iface eth0 inet6 dhcp
Wenn man seine IP mit DHCP aktiv beziehen möchte start man entweder den DHCP-Dienst (wenn man ihn installiert hat):
sudo dhcpd eth0
oder die Clientversion, die vorhanden sein sollte:
sudo dhclient eth0
Eine komplette Videovorführung findet sich dazu auch bei offensive-security.com.
Alternativ geht machmal auch:
ifconfig eth0 dhcp start
Status des DHCP-Abrufs:
ifconfig eth0 dhcp status
IP freigeben:
ifconfig eth0 dhcp release
ifconfig eth0 dynamic
oder der Aufruf von pump
das natürlich dann installiert sein muss.
netplan
Networkmanager
Benutzt u.a. bei RedHat / CentOS. Bei Desktop-PCs werden auch oft grafische Oberflächen (wie der Networkmanager) benutzt, die dann eigene Konfigurationen haben.
systemd-networkd
Feste IP-Adressen
Konfiguration mit einer festen IP-Adresse (unter Windows wird dies als „manuell“ bezeichnet).
ifupdown2 / ifupdown2
Alter Befehl mit ifconfig:
ifconfig eth0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 up
Im obigen Bespiel wird für die erste Ethernet-Karte eth0 die IP 192.168.0.1 gesetzt, Netzmaske ist bei einem Class-C Netzwerk standardmäßig 255.255.255.0 und die Broadcast-Adressse auch dementsprechend.
Bei IPv6:
ip addr add 2a01:4e8:141:1d1::1/64 dev eth0 ifup eth0
oder
ifconfig eth0 inet6 add 2a01:4e8:141:1d1::1 ifconfig eth0 up
Das entfernen der Adresse ist mit dem Ersetzen von „add“ durch „del“ erledigt.
Mit up werden die Netzwerkkartentreiber geladen, man kann sie auch später mit ifconfig eth0 down
entladen und damit die Schnittstelle deaktivieren.
Dauerhafte Einstellungen in der Datei /etc/network/interfaces
(Debian, Ubuntu und darauf basierende):
Beispiel 1: Feste IP (192.168.0.123) aus dem 192.168.0.0-Netz:
allow-hotplug eth0 iface eth1 inet static address 192.168.0.123 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.0.1 dns-search local
Bei IPv6:
iface eth0 inet6 static # Haupt-IPv6-Adresse des Servers address 2a01:4e8:141:1d1::1 netmask 64 gateway fe80::1
Auf Servern kann auch anstatt allow-hotplug eth0
gleich „auto eth0“ eingetragen werden, damit Dienste, die sich beim Start des Rechners an eine bestimmte IP (oder eine bestimmte Schnittstelle) binden wollen, nicht beim Start fehlschlagen. Siehe Hotplug unter Debian, SLES 9 und RHAS 4 erweitern.
netplan
Ab Ubuntu 18.04 wird die Netzwerkkonfiguration mit Netplan realisiert. Hiermit kann die Konfiguration in mehrere Dateien aufgesplittet (wie vorher auch mit /etc/network/interfaces.d
) werden und folgt der yaml-Syntax.
Der Ubuntu-Installer legt die folgende Datei an: /etc/netplan/50-cloud-init.yaml
, Beispiel einer Dual-stack-Konfiguration:
network: ethernets: enp0s3: addresses: [192.168.0.2/24, "2a02:708:xx:xx::2/64"] gateway4: 192.168.0.1 gateway6: 2a02:708:xx:xx::1 dhcp4: no dhcp6: no nameservers: addresses: [8.8.8.8, "2001:4860:4860::8888"] version: 2 renderer: networkd
Networkmanager
systemd-networkd
zusätzliche feste IP-Adressen auf einer Karte
ifupdown2 / ifupdown2
Zusätzliche IP-Adressen können auf einer Karte durch anhängen von „:1“, „:2“ usw. erzeugt werden:
ifconfig eth0:1 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up
Bei IPv6:
ip addr add 2a01:4e8:141:1d1::1/64 dev eth0:1
Dauerhafte Konfiguration:
# 1. IP auto eth0 iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.254 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.0.2 dns-nameservers 192.168.0.3 # 2. IP auto eth0:1 iface eth0:1 inet static address 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255
netplan
Networkmanager
systemd-networkd
de-installieren von netplan
sudo apt install ifupdown2 sudo apt purge netplan.io
/etc/default/grub:
GRUB_CMDLINE_LINUX="netcfg/do_not_use_netplan=true"
sudo update-grub
Die Datei /etc/network/interfaces
muss angelegt und konfiguriert werden.
DNS von systemd (systemd-resolved)
Aktuellen Status anzeigen: systemd-resolve --status
DNS-caching von systemd-resolved deaktivieren
DNS-Cache löschen (temporär): systemd-resolve --flush-caches
Caching-Statistiken: systemd-resolve --statistics
Caching permanent deaktiveren: /etc/systemd/resolved.conf
(siehe auch: man 5 resolved.conf
):
Cache=no
systemctl restart systemd-resolved.service
manuell DNS-Server für ein Interface setzen
Beispiel: eth0 mit DNS-Server 192.168.88.22:
sudo systemd-resolve –interface eth0 –set-dns 192.168.88.22 –set-domain yourdomain.local
systemd-resolved deaktivieren
Bei Serversystemen kann die Abstraktion durch systemd nicht gewünscht oder störend wirken. So kann der systemd-resolved-service deaktiviert werden:
systemctl stop systemd-resolved.service systemctl disable systemd-resolved.service rm /etc/resolv.conf # (weil nun broken link auf ../run/systemd/resolve/stub-resolv.conf)
Neue /etc/resolv.conf anlegen:
nameserver 8.8.4.4 nameserver ...
nscd
nscd „Name service caching daemon“ wurde bei einigen Distributionen eingesetzt (Ubuntu 16.04, …). Dabei werden Zugriff auf die /etc/passwd, /etc/group und /etc/hosts via Systemfunktionen abgefangen.
Config: /etc/nscd.conf
Standardroute
Standardroute vergeben:
route add default gw 192.168.0.254
Hier als Beispiel ein Router (ins Internet) mit der IP 192.168.0.254 angegeben.
Bei IPv6:
ip -6 route add default via 2a01:3e8:22:1200::1 dev eth0
oder
route --inet6 add default gateway 2a01:3e8:22:1200::1
Route für ein Subnetz
In manchen Fällen kennt das Standard-Gateway die passende Route nicht, man möchte diese dort hinterlegen oder gezielt übergehen.
Beispiel: Das Netz 192.168.3.0 (Netzmaske 255.255.255.0) ist hinter dem Router 192.168.2.2 zu erreichen:
route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.2.2 eth0
Equivalent in ipv6 (Netz 2001:41d0:1000:1234:ffff:ffff:ffff:ffff soll via Router 2a01:1234:1234:1234::1 erreicht werden):
ip -6 route add 2001:41d0:1000:1234:ffff:ffff:ffff:ffff via 2a01:1234:1234:1234::1 dev eth0
Nameserver / DNS (glibc)
Den Nameserver trägt man in der Datei /etc/resolv.conf
im Format
nameserver 192.168.0.254
ein. Hier muss natürlich die richtige IP-Adresse eingetragen werden.
Bei neueren (eher desktop)-Systemen findet sich dort ein Verweis auf 127.0.0.53, was auf das lokal laufende systemd-resolve --status
verweist.
IP für ausgehende Verbindungen ändern
IP für ausgehende Verbindungen ändern (wenn mehrere IPs konfiguriert sind)
Vorher:
ip route
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.2 default via 10.0.0.1 dev eth0
Default Route erweitern:
ip route change default via 10.0.0.1 dev eth0 src 10.0.0.3
Nacher:
ip route
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.2 default via 10.0.0.1 dev eth0 src 10.0.0.3
Internetverbindungsfreigabe
Für die Freigabe von Internetverbindungen für private Adressen aus einem angeschlossenen Netzwerk.
Als Beispiel wird in der ersten Zeile die Weiterleitung von Paketen aktiviert und in der zweiten mit der Firewall iptables die Pakete auf das Interface eth0 weitergeleitet:
Jeweils mit root-Rechten ausführen:
- für IPv4:
echo "1" > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- für IPv6:
echo "1" >/proc/sys/net/ipv6/conf/all/forwarding ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Diese Einstellungen lassen sich auch dauerhaft in der Datei /etc/sysctl.conf
vornehmen:
- IPv4:
net.ipv4.ip_forward=1
- IPv6:
net.ipv6.conf.all.forwarding=1
Oder die obigen Zeilen in einem Skript unter /etc/network/if-up.d/
ablegen.
MAC-Adresse ändern
ifconfig eth0 down ifconfig eth0 hw ether 00:0f:ff:ff:ff:ff
hier besser eine bekannte (z.B. von einer rumliegenden Netzwerkkarte) und eine sinnvolle MAC-Adresse eingeben, bei Gleichheiten im Netz gibt es Probleme.
Das Programm macchanger (auch mit grafischer Oberfläche verfügbar) hilft ebenfalls bei der Änderung:
/usr/bin/macchanger --mac=XX:XX:XX:XX:XX:XX ethX
Unter Ubuntu: Wenn man nicht ifconfig benutzen will, gibt es auch „/usr/bin/network-admin“ dass man mit „gksu -u root network-admin“ aufrufen kann.
Bei Atheros-Chipsätzen: WLAN/MadWifi.
Traffic shaping
Unter „traffic shaping“ versteht man die Begrenzung bzw. das Einteilen vorhandener Kapazitäten zur Qualitätssicherung (siehe auch QoS).
- Für einen einzelnen Rechner geht es einfach: Mit wondershaper hängt man der Datei
/etc/network/interfaces
(Befehlsudo pico /etc/network/interfaces
) beim gewünschten Interface (hier eth0) die beiden Zeilenup /usr/sbin/wondershaper eth0 3000 350 down /usr/sbin/wondershaper clear eth0
an. 3000 ist hier die Downloadgeschwindigkeit (in Kbit/s) und 350 die Upload-Geschwindigkeit.
- Trickle kann sowohl einzelne Programme begrenzen als auch den gesamten Netzwerkverkehr
Vlan
Um auf der Netzwerkkarte eth0 die vlans 100 und 101 zu aktivieren reichen diese Befehle:
ip link add link eth0 name eth0.100 type vlan id 100 ip link set dev eth0.100 up ip addr add a.b.c.1/24 brd 1.b.c.255 dev eth0.100
vconfig ist veraltet (wird in aktuellen Systemen nicht mehr unterstützt)
modprobe 8021q vconfig add eth0 100 vconfig add eth0 101
Anschließend sind die logischen interfaces eth0.100
und eth0.101
angelegt, diese lassen sich wiederum mit den üblichen Mitteln konfigurieren. vconfig
ist bei Debian / Ubuntu im Paket vlan enthalten.
Diagnose-Tools
- Network Emulation tool (zum generieren von Testfällen)
Bandwidth Monitoring Tools for Ubuntu Users
wichtige Diagnosetools
netstat -lnptuw
(listening ports) besser ist vielleichtnetstat -tulpe
zu merkenlsof -i
(bestehende Netzwerk-Verbindungen auflisten)lsof -i :443
(welcher Prozess lauscht auf Port 443?)iptraf
(Traffic-überwachung)iftop
(Traffic-überwachung, einfacher als iptraf, für Übersichtszwecke)dhcping
DHCP-Server überwachen durch Abfragenhping3
ist ein Tool zum zusammenbasteln von TCP/IP-Paketen- IPSorcery ist ein Tool zum zusammenbasteln von IP, TCP, UDP, ICMP, and IGMP-Paketen
traceroute
traceroute - a very useful troubleshooting tool which reveals the bottlenecks on the Internet
Fehlercodes von traceroute | ||
---|---|---|
Code | engl. Bedeutung | Deutsch |
!H | host unreachable | Rechner nicht erreichbar |
!N | network unreachable | Netzwerk nicht verfügbar |
!P | protocol unreachable | Protokoll nicht erreichbar |
!S | source route failed | |
!F | fragmentation needed | Packet müsste fragementiert werden |
!X | communication administratively prohibited | ICMP-Antwort ist auf dem (Ziel-)Rechner verboten |
!V | host precedence violation | |
!C | precedence cutoff in effect | |
!<NUMMER> | ICMP unreachable code <num> | ICMP Fehlercode <Nummer> wird zurückgemeldet |
Nast
- Scannt Topologien via ARP:
-m
- Überwacht auf ARP-Poisioning:
-c
- sucht Gateway:
-g
andere Tools
Rsync
rsync ist eine leistungsfähige Software zur bandbreitenschonenden Übertragung von Daten, das geht auch über SSH.
Webseitenspiegelung (httrack)
zum spiegeln einer kompletten Seite gibt man httrack mit z.b. folgenden Parametern an:
httrack -K0 -%q0 --keep-alive --urlhack -D http://www.example.com
Der Ordner kann danach sehr schnell auf den aktuellen Stand gebracht werden (update)
httrack -u --continue
wget
wget URL # (auch ganze Verzeichnisse wenn wie bei FTP Verzeichnislisting funktioniert) wget -c datei fortsetzen wget --spider --force-html -i bookmarks.html : Prüfen ob Links noch funktionieren wget -r -l 1 -nd --convert-links -e robots=off URL # Datei incl. 1 Linkebene herunterladen, robots.txt ignorieren
GPRS/UMTS-Zugang
Zuerst sollte man einen Zugang zum Handy mit Bluetooth herstellen, dann kann man mit Einwahlprogrammen (wie wvdial oder kppp) eine Verbindung herstellen.
for i in $(ls /sys/class/net/) ; do /usr/sbin/ip addr flush $i & done
systemd-resolve --status
Deaktivierung siehe DNS von systemd deaktivieren