====== 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] dev * Netzwerkkarte ein-/ausschalten ip link set [up|down] * Netzwerkrouten anzeigen ip route show * Stadardgateway setzen ip route [add|dell] default via * Netzwerkroute setzen/löschen ip route [add|dell] via dev ===== 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 netmask broadcast gateway dns-nameservers dns-search # emergency fallback addresses # post-up ip addr add dev eth0 # pre-down ip addr del dev eth0 auto eth0 iface eth0 inet manual iface wlan0 inet static #Bridge auto br0 iface br0 inet static # gateway bridge_ports eth1 wlan0 bridge_fd 5 bridge_stp no # unter Umständen auf 'yes' setzen - s.u. address netmask auto wlan0_1_rename iface wlan0_1_rename inet static address netmask broadcast # Kommando vor Netzwerkarteneinstellungen ausführen pre-up # Kommando starten up # Kommando nach Netzwerkkarteneinstellungen ausführen post-up #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 .. A update add .. 86400 A 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 ""; 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 . 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 ACHTUNG: diese Programm schaut standardmäßig nach "eth#" Devices! ==== 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 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 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 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 -i ==== 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:
PC1 einschalten
HWaddress:
IPaddress:
Port:
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.
< Zurück"); }
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:///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:///wol/cgi/wakeup.pl?HWaddress=00:11:22:33:44:55:66&IPaddress=1.2.3.4&Port=9]]