Inhaltsverzeichnis

Netzwerkkonfiguration

Netplan

Quelle https://netplan.io/examples

  1. Netzwerkkonfiguration schreiben (siehe unten)
  2. Konfiguration aktivieren
    netplan apply

/etc/netplan/50-cloud-init.yaml

per Befehl "ip"

Nützeliche Befehle:

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).

Danach kann man sich die Statistiken anzeigen lassen und sehen, dass alles genullt wurde.

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

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