Netzwerkkonfiguration
Netplan
Quelle https://netplan.io/examples
- Netzwerkkonfiguration schreiben (siehe unten)
- Konfiguration aktivieren
netplan apply
/etc/netplan/50-cloud-init.yaml
- DHCP
network: ethernets: enp2s0: dhcp4: true version: 2
- Statische IP
network: version: 2 renderer: networkd ethernets: eth0: addresses: - 10.10.10.2/24 dhcp4: no gateway4: 10.10.10.1 nameservers: addresses: [10.10.10.1,1.1.1.1] search: - mydomain - otherdomain
- Netzwerkrouten
network: version: 2 renderer: networkd ethernets: enp3s0: ... ... routes: - to: 0.0.0.0/0 via: 9.0.0.1 metric: 100 - to: 0.0.0.0/0 via: 10.0.0.1 metric: 100 - to: 0.0.0.0/0 via: 11.0.0.1 metric: 100
- Bridges
network: version: 2 renderer: networkd ethernets: enp3s0: ... ... bridges: br0: dhcp4: yes interfaces: - enp3s0
- VLAN
network: version: 2 renderer: networkd ethernets: mainif: match: macaddress: "de:ad:be:ef:ca:fe" set-name: mainif addresses: [ "10.3.0.5/23" ] gateway4: 10.3.0.1 nameservers: addresses: [ "8.8.8.8", "8.8.4.4" ] search: [ example.com ] vlans: vlan15: id: 15 link: mainif addresses: [ "10.3.99.5/24" ] vlan10: id: 10 link: mainif addresses: [ "10.3.98.5/24" ] nameservers: addresses: [ "127.0.0.1" ] search: [ domain1.example.com, domain2.example.com ]
- WLAN
network: version: 2 renderer: networkd wifis: wlp2s0b1: dhcp4: no dhcp6: no addresses: [192.168.0.21/24] gateway4: 192.168.0.1 nameservers: addresses: [192.168.0.1, 8.8.8.8] access-points: "network_ssid_name": password: "**********"
per Befehl "ip"
Nützeliche Befehle:
- IP Adresse setzen/löschen
ip a [add|del] <IP_ADRESSE-IN-CIDR> dev <INERFACE_NAME>
- Netzwerkkarte ein-/ausschalten
ip link set <INERFACE_NAME> [up|down]
- Netzwerkrouten anzeigen
ip route show
- Stadardgateway setzen
ip route [add|dell] default via <GATEWAYASDRESS>
- Netzwerkroute setzen/löschen
ip route [add|dell] <NETADDRESS_OR_IPASDRESS_IN_CIDR> via <GATEWAYASDRESS> dev <INTERFACE_NAME>
Interfaces
Die Datei /etc/network/interfaces
beschreibt die Netzwerkkonfiguration des Linux Systems.
Hier ein Beispiel:
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth1 #iface eth1 inet dhcp iface eth1 inet static address <IP> netmask <MASK> broadcast <IP> gateway <IP> dns-nameservers <IP1> <IP2> dns-search <DOMAINNAME> # emergency fallback addresses # post-up ip addr add <CIDR-IP> dev eth0 # pre-down ip addr del <CIDR-IP> dev eth0 auto eth0 iface eth0 inet manual iface wlan0 inet static #Bridge auto br0 iface br0 inet static # gateway <IP> bridge_ports eth1 wlan0 bridge_fd 5 bridge_stp no # unter Umständen auf 'yes' setzen - s.u. address <IP> netmask <MASK> auto wlan0_1_rename iface wlan0_1_rename inet static address <IP> netmask <MASK> broadcast <IP> # Kommando vor Netzwerkarteneinstellungen ausführen pre-up <KOMMANDO> # Kommando starten up <KOMMANDO> # Kommando nach Netzwerkkarteneinstellungen ausführen post-up <KOMMANDO> #DSL-Einwahl auto dsl-provider iface dsl-provider inet ppp pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf provider dsl-provider # DynDNS Client starten up /etc/init.d/ddclient restart
Netzwerk neustarten
sudo systemctl restart network
DNS registrieren
Ein Linux Client registriert sich beim Booten an dem, in der Netzwerkkonfiguration angegebenen, DNS-Server.
Wenn dies ein lokaler DNS-Server ist (z. B. Router) dann wird die Registrierung angenommen.
An diesem Beispiel sieht man, wie sich ein Linux-Client an einem DNS-Server erneut registrieren kann:
nsupdate update delete <ALTER_HOSTNAME>.<DOMAIN>.<TLD> A update add <NEUER_HOSTNAME>.<DOMAIN>.<TLD> 86400 A <IP-ADRESSE_DES_HOSTS> send
In der Datei /etc/dhcp/dhclient.conf
kann man auch folgende Einstellungen eintragen um den o.g. Prozess zu automatisieren und z.B. so einen Active Directory DNS Server aktuell halten.
send fqdn.fqdn "<HOSTNAME_FQDN>"; send fqdn.encoded on; send fqdn.server-update on;
Nachdem das gespeichert wurde, kann man sich so eine neue IP holen und nachsehen ob der DNS-Server aktualisiert wurde.
sudo dhclient -r sudo dhclient
IP Adresse ausgeben und DNS Eintrag aktualisieren
Hier eine Alternative zum o.g. Verfahren über die dhclient.conf
.
Man kann das u.a. Script z.B. in der Datei /etc/cron.daily/nsupdate
hinterlegen, so dass es tgl. ausgeführt wird.
#!/bin/bash DNSSVR=$(dig +noall +answer +short $(dig +noall +answer +short <DOMAIN_NAME>.<TLD> ns | head -1)) DEV=$(ip route get ${DNSSVR}|awk 'BEGIN{FS="dev *"}{sub(/ .*/,"",$2);print $2}') IPCIDR=$(ip a show dev ${DEV}|grep -w 'inet'|awk '{print $2}') IP=$(echo "${IPCIDR}"|cut -d '/' -f1) echo -e "server ${DNSSVR}\n update add $(hostname -f) 86130 A ${IP} \nsend\n" | nsupdate -v
DNS flush
Zuerst alles Caches vom Resolver leeren (gibt keine Ausgaben auf der Konsole).
- ab Ubunbu 22.04
resolvectl flush-caches
- bis Ubuntu 20.04
systemd-resolve --flush-caches
Danach kann man sich die Statistiken anzeigen lassen und sehen, dass alles genullt wurde.
- ab Ubunbu 22.04
resolvectl statistics
- bis Ubuntu 20.04
systemd-resolve --statistics
Die Anzeige auf diese ankommt ist
Current Cache Size: 0
Networkteaming / -bonding
Quelle: https://wiki.ubuntuusers.de/Netzwerkkarten_b%C3%BCndeln/
Um eine Ausfallsicherheit bzw. Bandbreitenerhöhung herzustellen, kann man mehrere Netzwerkschnittstellen zu einer zusammenfassen.
Dies kann mit dem Programm ifenslave
gemacht werden.
apt-get install ifenslave
Vorbereitung
Nachdem man sicher ist, dass der Kernel Bonding kann
find /lib/modules/`uname -r` -iname bonding*
schaut man, ob es Netzwerkkarten gibt die sich dafür eignen (diese müssen angeschlossen und in Betrieb sein, sprich eine IP haben und erreichbar sein)
mii-tool
Bonding
Zunächst schaltet man die Netzwerkkarten ab, welche zusammengefasst werden sollen.
ifdown enp1s0 ifdown enp1s0 ...
Nun konfiguriert man das Bonding in der /etc/network/interfaces
#eth0 is manually configured, and slave to the "bond0" bonded NIC auto eth0 iface eth0 inet manual bond-master bond0 bond-primary eth0 #eth1 ditto, thus creating a 2-link bond. auto eth1 iface eth1 inet manual bond-master bond0 auto bond0 iface bond0 inet static address 10.0.0.10 netmask 255.255.255.0 network 10.0.0.0 broadcast 10.0.0.255 gateway 10.0.0.1 dns-nameservers 10.0.0.1 bond-slaves eth0 eth1 bond-mode 0 bond-miimon 100 bond-updelay 200 bond-downdelay 200
- bond-slaves: Welche Schnittstellen diesem Bond zugehörig sind, „all“, falls alle.
- bond-mode: 0 bis 6 oder Names des Modus, in dem der bonding-Treiber arbeiten soll.
- bond-miimon: Das bonding-Modul überprüft alle 100ms den Link-Status aller gebündelten Schnittstellen.
- bond-updelay: Wenn eine Schnittstelle als (wieder) aktiv erkannt wird, werden 200ms abgewartet, ehe der bonding-Treiber das interface wieder in den Verbund integriert, ansonsten sofort.
- bond-downdelay: Gibt es einen Übertragungsfehler oder Aussetzer, so betrachtet das bonding-Modul die Schnittstelle erst nach 200ms als verloren und entfernt diese aus dem bond, ansonsten sofort.
Nun lässt man das Bonding-Kernelmodul beim Booten automatisch laden. Dazu trägt man folgendes in die Datei /etc/modules
ein:
bonding
Nach einem Reboot sollte es nur noch die eine Netzwerkkarte namens „bond0“ geben, welche dann auch die o.g. Netzwerkadresse hat und damit erreichbar ist.
Ohne Reboot kann man den Bond wie gewohnt starten:
ifup bond0 ifdown bond0
Bonding Modi
Folgende Bonding Modi gibt es:
Modus | Bezeichnung | Zweck | Beschreibung |
---|---|---|---|
0 | balance-rr | Lastverteilung & Ausfallsicherheit | Die genutzte Netzwerkschnittstelle wird im Round-Robin-Verfahren festgelegt, das heißt die verfügbaren Schnittstellen werden in Senderichtung wechselweise genutzt. In Empfangsrichtung kann max. die Geschwindigkeit einer einzelnen Schnittstelle erreicht werden - je mehr Teilnehmer, umso mehr Upload-Gesamtbandbreite, denn diese werden auf die übrigen freien Schnittstellen aufgeteilt. |
1 | active-backup | Ausfallsicherheit | Nur eine Schnittstelle ist aktiv, im Fehlerfalle wird eine der anderen im Verbund genutzt. die Netzwerkkarten können über verschiedene Switches angebunden werden. |
2 | balance-xor | Lastverteilung & Ausfallsicherheit | Es wird für jede Gegenstelle im Netzwerk eine zu nutzende Netzwerkschnittstelle zugewiesen, die Zuordnung geschieht über den Modulo der Division zwischen der Formel (Quell-MAC-Adresse XOR Ziel-MAC-Adresse) und der Anzahl der Slave-Schnittstellen. |
3 | broadcast | Ausfallsicherheit | Daten werden auf allen Netzwerkschnittstellen gesendet. Die Nutzung mehrerer Switches ist möglich. |
4 | 802.3ad | Lastverteilung & Ausfallsicherheit | 802.3ad ist ein Standard der IEEE, der die Bündelung mehrerer Schnittstellen mit gleichen Übertragungseinstellungen (Geschwindigkeit und Duplex-Einstellungen) erlaubt, um eine höhere Bandbreite zu erhalten. Es kann nur ein Switch verwendet werden, dieser muss 802.3ad unterstützen. ethtool oder mii-tool wird benötigt. |
5 | balance-tlb | Lastverteilung | Es wird für jede Gegenstelle im Netzwerk eine zu nutzende Netzwerkschnittstelle zugewiesen. Das Verfahren hierzu ist jedoch komplexer und effizienter als bei balance-xor. Das Programm ethtool wird benötigt. |
6 | balance-alb | Lastverteilung | Erweitertes balance-tlb, zusätzlich zur MAC-basierten Zuordnung der Schnittstellen für ausgehende Verbindungen werden eingehende Verbindungen auf die Schnittstellen verteilt. Das Programm ethtool wird benötigt. |
VLAN
Voraussetzungen erfüllen
sudo apt-get install vlan sudo modprobe 8021q
Temporär einrichten
Danach VLAN auf dem Interface konfigurieren
sudo vconfig add eth1 10 sudo ip addr add 10.0.0.1/24 dev eth1.10 sudo ip link set up eth1.10
Permanent einrichten
sudo su -c 'echo "8021q" >> /etc/modules'
nun in der /etc/network/interfaces
folgendes eintragen:
auto eth1.10 iface eth1.10 inet static ... vlan-raw-device eth1
Wake On LAN
Mit dem Wake on LAN (WOL) lässt sich ein PC über die Netzwerkkarte aufwecken.
Man konfiguriert einfach die WOL Einstellungen für das normale Wakeup mit Magic Paketen.
Netzwerkkarte vorbereiten
Mit dem Tool ethtool
kann man WOL auf der Netzwerkkarte einschalten.
Der folgende Befehl fragt die Netzwerkkarte ab.
sudo ethtool <NETZWERKARTEN_DEVICE>
Hier achtet man auf die Zeile welche mit Wake-on: …
beginnt.
Steht hier der Parameter d
ist WOL deaktiviert.
Mit dem Aktivieren der Funktion steht in der Zeile dann ein g
.
ethtool -s <NETZWERKARTEN_DEVICE> wol g
WOL dauerhaft einschalten
Leider übersteht die o.g. Einstellung den Neustart eines PCs nicht und schaltet sich immer wieder aus.
Per systemd
kann man das nach jedem Neustart aktivieren (Quelle: https://wiki.ubuntuusers.de/Wake_on_LAN/.
vi /etc/systemd/system/wol.service
Inhalt:
[Unit] Description=Configure Wake-up on LAN After=network-online.target [Service] Type=oneshot ExecStart=/sbin/ethtool -s <NETZWERKARTEN_DEVICE> wol g [Install] WantedBy=basic.target
Danach noch den Service einschalten und den Systemd-Daemon neustarten.
sudo systemctl enable wol.service sudo systemctl daemon-reload
WOL testen
Mit dem Befehl etherwake
kann man Geräte aus dem Tiefschlaf aufwecken.
Das Tool muss vorher installiert werden.
sudo apt instal etherwake
Danach kann man ein Gerät aufwecken
sudo etherwake <MAC-ADRESSE_DES_AUFZUWECKENDEN_GERÄTES> -i <LOKALE_NETZWERKSCHNITTSTELE>
Webserver installierten und einrichten
Mit der u.a. einfachen Webseite kann man das Wake On Lan steuern.
Hier ein Beispiel mit dem lighttpd
Webserver.
apt-get install lighttpd
Nach der installation, das Modul „CGI“ einschalten und Perl-Scripte aktivieren.
lighty-enable-mod cgi vi /etc/lighttpd/lighttpd.conf
Die Zeile mit
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
wie folgt anpassen
static-file.exclude-extensions = ( ".fcgi" )
Ausserdem noch unten folgendes einfügen:
cgi.assign = ( ".pl" => "/usr/bin/perl",".cgi" => "/usr/bin/perl" )
Danach den Webserver neustarten
service lighttpd restart
Website erstellen
mkdir -p /var/www/wol /var/www/wol/cgi vi /var/www/wol/index.php
Inhalt:
<form action="/wol/cgi/wakeup.pl" method="post" style="float:left"> <legend>PC1 einschalten</legend> <table> <tr><td>HWaddress:</td><td><input size="40" maxlength="40" name="HWaddress" value="00:11:22:33:44:55"></td></tr> <tr><td>IPaddress:</td><td><input size="40" maxlength="40" name="IPaddress" value="1.2.3.4"></td></tr> <tr><td>Port:</td><td><input size="40" maxlength="40" name="Port" value="9"></td></tr> <tr><td> </td><td><input type="submit" value="Absenden"></td></tr> </table> </form>
vi /var/www/wol/cgi/wakeup.pl
Inhalt:
#!/usr/bin/perl -w use Socket; use CGI; my $cgi = new CGI; use CGI::Carp qw(fatalsToBrowser); $cgi->default_dtd('-//W3C//DTD HTML 4.01 Transitional//EN'); print $cgi->header(-type =>'text/html'), $cgi->start_html('Wakeup'), $cgi->h1('Wakeup'), wake($cgi->param('HWaddress'),$cgi->param('IPaddress'),$cgi->param('Port')), $cgi->end_html(); sub wake { my $hwaddr = shift; my $ipaddr = shift || '255.255.255.255'; my $port = shift || getservbyname('discard', 'udp'); my ($raddr, $them, $proto); my ($hwaddr_re, $pkt); # Validate hardware address (ethernet address) $hwaddr_re = join(':', ('[0-9A-Fa-f]{1,2}') x 6); if ($hwaddr !~ m/^$hwaddr_re$/) { return $cgi->p({-style => 'color:red'}, "Invalid hardware address: $hwaddr" ); } # Generate magic sequence foreach (split /:/, $hwaddr) { $pkt .= chr(hex($_)); } $pkt = chr(0xFF) x 6 . $pkt x 16; # Allocate socket and send packet $raddr = gethostbyname($ipaddr); $them = pack_sockaddr_in($port, $raddr); $proto = getprotobyname('udp'); if(!socket(S, AF_INET, SOCK_DGRAM, $proto)) { return $cgi->p({-style => 'color:red'}, "socket : $!"); } if(!setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1)) { return $cgi->p({-style => 'color:red'}, "setsockopt : $!" ); } if(!send(S, $pkt, 0, $them)) { return $cgi->p({-style => 'color:red'}, "send : $!"); } close S; return $cgi->p("Sending magic packet to $ipaddr:$port with $hwaddr.<br> <a href='#1' onClick='javascript:history.back(); return false;'>< Zurück</a>"); }
Danach das Perl-Script ausführbar machen mit
chmod a+x /var/www/wol/cgi/wakeup.pl
Website testen
Nun kann man die Webseite öffnen http://<HOSTNAME / IP>/wol
Hier gibt man die benötigten Angaben ein und klickt auf absenden.
Man kann das „wakeup.pl“ Script auch direkt öffnen hier ein Beispiel:
http://<HOSTNAME / IP>/wol/cgi/wakeup.pl?HWaddress=00:11:22:33:44:55:66&IPaddress=1.2.3.4&Port=9