Nächste: Unbeaufsichtigte Aktualisierungen, Vorige: Netzwerkeinrichtung, Nach oben: Dienste [Inhalt][Index]
Das im vorherigen Abschnitt besprochene Modul (gnu services
networking)
stellt auch Dienste für fortgeschrittene Netzwerkeinrichtungen
zur Verfügung, etwa um einen DHCP-Dienst für andere anzubieten, Pakete mit
iptables oder nftables zu filtern, einen WLAN-Zugangspunkt mit
hostapd
verfügbar zu machen, den „Superdaemon“ inetd
auszuführen und noch mehr. In diesem Abschnitt werden sie beschrieben.
Dieser Diensttyp definiert einen Dienst, der einen DHCP-Daemon ausführt. Um
einen Dienst zu diesem Typ anzugeben, müssen Sie eine
<dhcpd-configuration>
bereitstellen. Zum Beispiel so:
(service dhcpd-service-type
(dhcpd-configuration
(config-file (local-file "my-dhcpd.conf"))
(interfaces '("enp0s25"))))
package
(Vorgabe: isc-dhcp
)Das Paket, das den DHCP-Daemon zur Verfügung stellt. Von diesem Paket wird erwartet, dass es den Daemon unter dem Pfad sbin/dhcpd relativ zum Verzeichnis der Paketausgabe bereitstellt. Das vorgegebene Paket ist der DHCP-Server vom ISC.
config-file
(Vorgabe: #f
)Die Konfigurationsdatei, die benutzt werden soll. Sie muss angegeben
werden und wird an dhcpd
mittels seiner Befehlszeilenoption
-cf
übergeben. Ein beliebiges „dateiartiges“ Objekt kann dafür
angegeben werden (siehe dateiartige Objekte). Siehe
man dhcpd.conf
für Details, welcher Syntax die Konfigurationsdatei
genügen muss.
version
(Vorgabe: "4"
)Die DHCP-Version, die benutzt werden soll. Der ISC-DHCP-Server unterstützt
die Werte „4“, „6“ und „4o6“. Das Feld entspricht den Befehlszeilenoptionen
-4
, -6
und -4o6
von dhcpd
. Siehe man
dhcpd
für Details.
run-directory
(Vorgabe: "/run/dhcpd"
)Das zu benutzende Laufzeit-Verzeichnis („run“-Verzeichnis). Wenn der Dienst aktiviert wird, wird dieses Verzeichnis erzeugt, wenn es noch nicht existiert.
pid-file
(Vorgabe: "/run/dhcpd/dhcpd.pid"
)Die zu benutzende PID-Datei. Dieses Feld entspricht der Befehlszeilenoption
-pf
von dhcpd
. Siehe man dhcpd
für Details.
interfaces
(Vorgabe: '()
)Die Namen der Netzwerkschnittstelle, auf der dhcpd auf Broadcast-Nachrichten
lauscht. Wenn diese Liste nicht leer ist, werden ihre Elemente (diese müssen
Zeichenketten sein) an den dhcpd
-Aufruf beim Starten des Daemons
angehängt. Es ist unter Umständen nicht nötig, hier Schnittstellen
ausdrücklich anzugeben; siehe man dhcpd
für Details.
Dies ist der Diensttyp für den hostapd-Daemon, mit dem ein WLAN-Zugangspunkt (ein „Access Point“ gemäß
IEEE 802.11) und Authentifizierungsserver eingerichtet werden kann. Sein
zugewiesener Wert muss eine hostapd-configuration
sein wie im
folgenden Beispiel:
;; Mit wlan1 den Zugangspunkt für "Mein Netzwerk" betreiben. (service hostapd-service-type (hostapd-configuration (interface "wlan1") (ssid "Mein Netzwerk") (channel 12)))
Dieser Datentyp repräsentiert die Konfiguration des hostapd-Dienstes. Er hat folgende Felder:
package
(Vorgabe: hostapd
)Das zu benutzende hostapd-Paket.
interface
(Vorgabe: "wlan0"
)Die Netzwerkschnittstelle, auf der der WLAN-Zugangspunkt betrieben wird.
ssid
Die SSID (Service Set Identifier), eine das Netzwerk identifizierende Zeichenkette.
broadcast-ssid?
(Vorgabe: #t
)Ob diese SSID allgemein sichtbar sein soll.
channel
(Vorlage: 1
)Der zu verwendende WLAN-Kanal.
driver
(Vorgabe: "nl80211"
)Über welchen Schnittstellentyp der Treiber angesprochen
wird. "nl80211"
wird von allen Linux-mac80211-Treibern
benutzt. Schreiben Sie "none"
, wenn hostapd für einen eigenständigen
RADIUS-Server erstellt wird, der keine Draht- oder Drahtlosverbindung
steuert.
extra-settings
(Vorgabe: ""
)Weitere Einstellungen, die wie sie sind an die Konfigurationsdatei von hostapd angehängt werden. Siehe https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf für eine Referenz der Konfigurationsdatei.
Dies ist der Diensttyp für einen Dienst, um ein WLAN-Netzwerk zu
simulieren. Das kann auf virtuellen Maschinen zu Testzwecken eingesetzt
werden. Der Dienst lädt das
mac80211_hwsim
-Modul in den Linux-Kernel und startet hostapd, um ein
Pseudo-WLAN-Netzwerk vorzutäuschen, das nach Vorgabe als wlan0
sichtbar ist.
Der Wert des Dienstes ist ein hostapd-configuration
-Verbundsobjekt.
Mit diesem Diensttyp wird eine iptables-Konfiguration eingerichtet. iptables ist ein Rahmen für Netzwerkpaketfilter, der vom Linux-Kernel unterstützt wird. Der Dienst unterstützt die Konfiguration von iptables für sowohl IPv4 als auch IPv6. Eine einfache Beispielkonfiguration, die alle eingehenden Verbindungen verweigert, die nicht an den SSH-Port 22 gehen, können Sie hier sehen:
(service iptables-service-type
(iptables-configuration
(ipv4-rules (plain-file "iptables.rules" "*filter
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
COMMIT
"))
(ipv6-rules (plain-file "ip6tables.rules" "*filter
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp6-port-unreachable
COMMIT
"))))
Repräsentiert die iptables-Konfiguration.
iptables
(Vorgabe: iptables
)Das zu benutzende iptables-Paket, das iptables-restore
und
ip6tables-restore
zur Verfügung stellt.
ipv4-rules
(Vorgabe: %iptables-accept-all-rules
)Die zu benutzenden iptables-Regeln. Diese werden an iptables-restore
übergeben. Als Regeln kann jedes „dateiartige“ Objekt angegeben werden
(siehe dateiartige Objekte).
ipv6-rules
(Vorgabe: %iptables-accept-all-rules
)Die zu benutzenden ip6tables-Regeln. Diese werden an
ip6tables-restore
übergeben. Als Regeln kann jedes „dateiartige“
Objekt angegeben werden (siehe dateiartige Objekte).
Dieser Dienst richtet eine Konfiguration von nftables ein. nftables ist als
Projekt ein Teil von Netfilter mit dem Ziel, den bestehenden Aufbau aus
iptables, ip6tables, arptables und ebtables zu ersetzen. Es stellt einen
neuen Rahmen für Netzwerkpaketfilter bereit sowie ein neues Werkzeug
nft
auf Anwendungsebene und eine Kompatibilitätsschicht für
iptables. Dieser Dienst wird zusammen mit %default-nftables-ruleset
ausgeliefert, einem vorgegebenen Satz von Regeln, der alle eingehenden
Verbindungen außer auf dem SSH-Port 22 ablehnt. Um ihn zu benutzen,
schreiben Sie einfach:
Datentyp, der die nftables-Konfiguration repräsentiert.
package
(Vorgabe: nftables
)Das nftables-Paket, das nft
zur Verfügung stellt.
ruleset
(Vorgabe: %default-nftables-ruleset
)Die zu benutzenden nftables-Regeln. Als Regeln kann jedes „dateiartige“ Objekt angegeben werden (siehe dateiartige Objekte).
Dies ist der Typ des Dienstes, der den ntpd
-Daemon für das
Network Time Protocol, kurz NTP, ausführt. Mit
diesem Daemon wird die Systemuhr mit der Uhr auf den angegebenen NTP-Servern
synchronisiert.
Der Wert dieses Dienstes ist ein ntpd-configuration
-Objekt, wie im
Folgenden beschrieben.
Der Datentyp für die Dienstkonfiguration des NTP-Dienstes.
servers
(Vorgabe: %ntp-servers
)Dies ist die Liste der Server (<ntp-server>
-Verbundsobjekte), mit
denen ntpd
synchronisiert wird. Siehe die Definition des
ntp-server
-Datentyps weiter unten.
allow-large-adjustment?
(Vorgabe: #t
)Hiermit wird festgelegt, ob ntpd
die Uhr beim ersten Umstellen um
mehr als 1.000 Sekunden ändern darf.
ntp
(Vorgabe: ntp
)Das NTP-Paket, was benutzt werden soll.
Liste der Rechnernamen („Host“-Namen), die als vorgegebene NTP-Server benutzt werden. Dabei handelt es sich um die Server des NTP Pool Project.
Der Datentyp, der die Konfiguration eines NTP-Servers repräsentiert.
type
(Vorgabe: 'server
)Die Art des NTP-Servers als Symbol, entweder 'pool
, 'server
,
'peer
, 'broadcast
oder 'manycastclient
.
address
Die Adresse des Servers als Zeichenkette.
options
NTPD-Optionen, die für diesen bestimmten Server gelten sollen, angegeben als Liste von Optionsnamen und/oder Tupeln aus je Optionsname und -wert. Im folgenden Beispiel wird ein Server definiert, der die Optionen iburst und prefer sowie version 3 und eine maxpoll-Zeit von 16 Sekunden benutzen soll.
(ntp-server (type 'server) (address "ein.ntp.server.org") (options `(iburst (version 3) (maxpoll 16) prefer))))
Hiermit wird ntpd
, der Network-Time-Protocol-Daemon (NTP-Daemon),
ausgeführt, in seiner OpenNTPD-Implementierung. Der Daemon sorgt dafür, dass die Systemuhr mit
den Uhren der eingestellten Server synchron bleibt.
(service
openntpd-service-type
(openntpd-configuration
(listen-on '("127.0.0.1" "::1"))
(sensor '("udcf0 correction 70000"))
(constraint-from '("www.gnu.org"))
(constraints-from '("https://www.google.com/"))))
Diese Variable bezeichnet eine Liste von Serveradressen, die in
%ntp-servers
definiert sind.
openntpd
(Vorgabe: (file-append openntpd "/sbin/ntpd")
)Das openntpd-Programm, das benutzt werden soll.
listen-on
(Vorgabe: '("127.0.0.1" "::1")
)Eine Liste von lokalen IP-Adressen oder Rechnernamen („Host“-Namen), auf denen der ntpd-Daemon lauschen soll.
query-from
(Vorgabe: '()
)Eine Liste von lokalen IP-Adressen, die der ntpd-Daemon für ausgehende Anfragen benutzen soll.
sensor
(Vorgabe: '()
)Hiermit geben Sie eine Liste von Zeitdifferenz-Sensorgeräten an, die ntpd
benutzen soll. ntpd
wird auf jeden Sensor lauschen, der auch
tatsächlich existiert, und solche, die nicht existieren, ignorieren. Siehe
die Dokumentation beim Anbieter
für weitere Informationen.
server
(Vorgabe: '()
)Hiermit geben Sie eine Liste von IP-Adressen oder Rechnernamen von NTP-Servern an, mit denen synchronisiert werden soll.
servers
(Vorgabe: %openntp-servers
)Hiermit geben Sie eine Liste von IP-Adressen oder Rechnernamen von NTP-Pools an, mit denen synchronisiert werden soll.
constraint-from
(Vorgabe: '()
)ntpd
kann so eingestellt werden, dass es das Datum aus der
„Date“-Kopfzeile bei mit TLS übermittelten Anfragen an HTTPS-Server, denen
vertraut wird, ausliest. Diese Zeitinformation wird nicht für Genauigkeit
benutzt, sondern um mit authentifizierten Informationen die Auswirkungen
eines Man-in-the-Middle-Angriffs auf unauthentifizierte NTP-Kommunikation
einzuschränken. Geben Sie hierzu eine Liste von URLs, IP-Adressen oder
Rechnernamen („Host“-Namen) von HTTPS-Servern an, um eine solche
Beschränkung („Constraint“) einzurichten.
constraints-from
(Vorgabe: '()
)Wie bei constraint-from
geben Sie auch hier eine Liste von URLs,
IP-Adressen oder Rechnernamen von HTTPS-Servern an, um eine Beschränkung
einzurichten. Falls der Rechnername zu mehreren IP-Adressen aufgelöst wird,
berechnet ntpd
den Median von allen als Beschränkung.
Dieser Dienst führt den inetd
-Daemon aus (siehe inetd
invocation in GNU Inetutils). inetd
lauscht auf
Verbindungen mit Internet-Sockets und startet bei Bedarf das entsprechende
Server-Programm, sobald eine Verbindung mit einem dieser Sockets hergestellt
wird.
Der Wert dieses Dienstes ist ein inetd-configuration
-Objekt. Im
folgenden Beispiel wird der inetd
-Daemon konfiguriert, um den
eingebauten echo
-Dienst sowie einen SMTP-Dienst anzubieten, wobei
letzterer SMTP-Kommunikation über SSH an einen Server smtp-server
über einen vom rechnername
n bezeichneten Zugang („Gateway“)
weiterleitet:
(service
inetd-service-type
(inetd-configuration
(entries (list
(inetd-entry
(name "echo")
(socket-type 'stream)
(protocol "tcp")
(wait? #f)
(user "root"))
(inetd-entry
(node "127.0.0.1")
(name "smtp")
(socket-type 'stream)
(protocol "tcp")
(wait? #f)
(user "root")
(program (file-append openssh "/bin/ssh"))
(arguments
'("ssh" "-qT" "-i" "/pfad/zum/ssh_schlüssel"
"-W" "smtp-server:25" "benutzer@rechnername")))))))
Siehe unten für mehr Details über inetd-configuration
.
Datentyp, der die Konfiguration von inetd
repräsentiert.
program
(Vorgabe: (file-append inetutils "/libexec/inetd")
)Das inetd
-Programm, das benutzt werden soll.
entries
(Vorgabe: '()
)Eine Liste von inetd
-Diensteinträgen. Jeder Eintrag sollte von
einem inetd-entry
-Konstruktor erzeugt werden.
Datentyp, der einen Eintrag in der inetd
-Konfiguration
repräsentiert. Jeder Eintrag entspricht einem Socket, auf dem
inetd
auf Anfragen lauscht.
node
(Vorgabe: #f
)Optional sollte hier als Zeichenkette eine kommagetrennte Liste lokaler
Adressen angegeben werden, die inetd
benutzen soll, wenn er
stellvertretend für den angegebenen Dienst lauscht. Siehe Configuration
file in GNU Inetutils für eine vollständige Beschreibung aller
Optionen.
name
Eine Zeichenkette. Dieser Name muss einem Eintrag in /etc/services
entsprechen.
socket-type
Entweder 'stream
, 'dgram
, 'raw
, 'rdm
oder
'seqpacket
.
protocol
Eine Zeichenkette, die einem Eintrag in /etc/protocols
entsprechen
muss.
wait?
(Vorgabe: #t
)Ob inetd
warten soll, bis der Server beendet ist, bevor es wieder
auf neue Anfragen an den Dienst lauscht.
user
Eine Zeichenkette mit dem Benutzernamen (und optional dem Gruppennamen) des
Benutzers, als der dieser Server ausgeführt werden soll. Der Gruppenname
kann als Suffix angegeben werden, getrennt durch einen Doppelpunkt oder
Punkt, d.h. "benutzer"
, "benutzer:gruppe"
oder
"benutzer.gruppe"
.
program
(Vorgabe: "internal"
)Das Serverprogramm, das die Anfragen bedienen soll, oder "internal"
,
wenn inetd
einen eingebauten Dienst verwenden soll.
arguments
(Vorgabe: '()
)Eine Liste von Zeichenketten oder dateiartigen Objekten, die dem
Serverprogramm als Argumente übergeben werden, angefangen mit dem nullten
Argument, d.h. dem Namen selbigen Serverprogramms. Bei in inetd
eingebauten Diensten muss dieser Eintrag auf '()
oder
'("internal")
gesetzt sein.
Siehe Configuration file in GNU Inetutils für eine mehr ins Detail gehende Erörterung jedes Konfigurationsfeldes.
Dieser Diensttyp dient dazu, einen OpenDHT-Knoten, dhtnode
, zu betreiben. Mit dem Daemon kann ein
eigener Proxy-Dienst für die verteilte Hashtabelle (Distributed Hash Table,
DHT) angeboten werden, den man in Jami und anderen Anwendungen angeben kann,
damit sie sich darüber verbinden.
Wichtig: Wenn Sie den OpenDHT-Proxy-Server nutzen, sollten die für ihn „sichtbaren“ IP-Adressen der Clients auch anderen Netzwerkteilnehmern gegenüber erreichbar sein. In der Praxis ist es am besten, den Proxy-Server auf einem Rechner mit öffentlich zugänglicher IP-Adresse außerhalb Ihres privaten Netzwerks zu betreiben. Wenn Sie den Proxy-Server zum Beispiel im privaten lokalen Netzwerk mit IPv4 zugänglich machen würden und dann mittels Portweiterleitung für die Außenwelt zugänglich machten, funktioniert das vielleicht bei externen Netzwerkteilnehmern, aber für die Geräte im lokalen Netzwerk des Proxys würde anderen OpenDHT-Knoten nur deren private Adresse mitgeteilt, womit sie keine Verbindung aufbauen können.
Der Wert dieses Dienstes ist ein opendht-configuration
-Objekt, wie im
Folgenden beschrieben.
Verfügbare opendht-configuration
-Felder sind:
opendht
(Vorgabe: opendht
) (Typ: dateiartig)Zu benutzendes opendht
-Paket.
peer-discovery?
(Vorgabe: #f
) (Typ: Boolescher-Ausdruck)Ob sich der Knoten am Multicast-Mechanismus zum Finden lokaler Netzwerkteilnehmer beteiligen soll.
enable-logging?
(Vorgabe: #f
) (Typ: Boolescher-Ausdruck)Ob Protokollnachrichten über syslog geschrieben werden sollen. Weil es so ausführlich ist, ist es nach Vorgabe deaktiviert.
debug?
(Vorgabe: #f
) (Typ: Boolescher-Ausdruck)Ob Protokollnachrichten der Fehlersuch-Ausführlichkeitsstufe aktiviert werden sollen. Diese Option wirkt sich nicht aus, wenn Protokollierung ganz abgeschaltet ist.
bootstrap-host
(Vorgabe: "bootstrap.jami.net:4222"
) (Typ: Vielleicht-Zeichenkette)Der Rechnername des Knotens, über den eine erste Verbindung ins
OpenDHT-Netzwerk aufgebaut wird. Es kann eine bestimmte Portnummer angegeben
werden, indem als Suffix :PORT
angehängt wird. Vorgegeben ist, den
Bootstrap-Knoten von Jami zu benutzen, aber man kann jeden Rechnernamen
eines Knotens angeben. Es ist auch möglich, Bootstrapping zu deaktivieren,
indem man dies ausdrücklich auf den Wert %unset-value
festlegt.
port
(Vorgabe: 4222
) (Typ: Vielleicht-Zahl)An welchen UDP-Port sich der OpenDHT-Knoten binden soll. Wird er nicht angegeben, wird ein verfügbarer Port automatisch ausgewählt.
proxy-server-port
(Typ: Vielleicht-Zahl)Einen Proxy-Server auf dem angegebenen Port lauschen lassen.
proxy-server-port-tls
(Typ: Vielleicht-Zahl)Einen Proxy-Server auf dem angegebenen Port auf TLS-Verbindungen lauschen lassen.
Dies ist der Diensttyp für den Dienst, der den Tor-Daemon für anonyme Netzwerkrouten ausführt. Der Dienst benutzt für
seine Konfiguration ein
<tor-configuration>
-Verbundsobjekt. Vorgegeben ist, dass der
Tor-Daemon als „unprivilegierter“ Nutzer tor
ausgeführt wird, einem
Mitglied der tor
-Benutzergruppe ohne besondere Berechtigungen.
tor
(Vorgabe: tor
)Das Paket, das den Tor-Daemon zur Verfügung stellt. Von diesem Paket wird erwartet, dass es den Daemon unter dem Pfad bin/tor relativ zum Ausgabeverzeichnis verfügbar macht. Das vorgegebene Paket ist die Implementierung des Tor-Projekts.
config-file
(Vorgabe: (plain-file "empty" "")
)Die Konfigurationsdatei, die benutzt werden soll. Sie wird an eine
vorgegebene Konfigurationsdatei angehängt und die sich daraus ergebende
Konfigurationsdatei wird dann an tor
über dessen Befehlszeilenoption
-f
übergeben. Hier kann jedes „dateiartige“ Objekt (siehe
dateiartige Objekte) angegeben werden. Siehe man
tor
für Details zur Syntax der Konfigurationsdatei.
hidden-services
(Vorgabe: '()
)Die Liste der zu benutzenden „versteckten Dienste“ als
<hidden-service>
-Verbundsobjekte. Für jeden versteckten Dienst, den
Sie in dieser Liste eintragen, werden automatisch entsprechende
Einstellungen zur vorgefertigten Konfigurationsdatei hinzugefügt. Sie können
<hidden-service>
-Verbundsobjekte bequem mit der unten beschriebenen
Prozedur tor-hidden-service
erzeugen lassen.
socks-socket-type
(Vorgabe: 'tcp
)Welche Art von Socket Tor für seinen SOCKS-Socket in der Voreinstellung
benutzen soll. Dafür muss entweder 'tcp
oder 'unix
angegeben
werden. Für 'tcp
wird Tor nach Voreinstellung auf dem TCP-Port 9050
auf der loopback-Schnittstelle (d.h. localhost) lauschen. Für 'unix
wird Tor auf dem UNIX-Socket /var/run/tor/socks-sock lauschen, auf
den Mitglieder der tor
-Benutzergruppe Schreibberechtigung erhalten.
Wenn Sie detailliertere Anpassungen am SOCKS-Socket vornehmen wollen,
belassen Sie socks-socket-type
bei seinem vorgegebenen Wert
'tcp
und benutzen Sie config-file
, um diese Voreinstellung mit
Ihrer eigenen SocksPort
-Option zu überspielen.
control-socket?
(Vorgabe: #f
)Ob ein „Steuerungs-Socket“ bereitgestellt werden soll, über den Tor
angesteuert werden kann, um zum Beispiel Onion-Dienste zur Laufzeit zu
instanziieren. Wird hier #t
angegeben, nimmt Tor Steuerungsbefehle
auf dem Unix-Socket /var/run/tor/control-sock entgegen, auf den
Mitglieder der tor
-Benutzergruppe Schreibzugriff bekommen.
Hiermit wird ein neuer versteckter Dienst von Tor mit diesem Namen definiert, der die Zuordnung herstellt. Die Zuordnung ist eine Liste von Port-/Rechner-Tupeln wie hier:
'((22 "127.0.0.1:22") (80 "127.0.0.1:8080"))
In diesem Beispiel wird Port 22 des versteckten Dienstes an den ihm zugeordneten lokalen Port 22 weitergeleitet und Port 80 wird an den lokalen Port 8080 weitergeleitet.
Dadurch wird ein Verzeichnis /var/lib/tor/hidden-services/Name
erstellt, worin sich in der Datei hostname der
.onion
-Rechnername („Host“-Name) des versteckten Dienstes befindet.
Siehe die Dokumentation des Tor-Projekts für weitere Informationen.
Das Modul (gnu services rsync)
bietet die folgenden Dienste an:
Sie könnten einen rsync-Daemon einsetzen wollen, um Dateien verfügbar zu machen, damit jeder (oder nur Sie) bestehende Dateien herunterladen oder neue Dateien hochladen kann.
Dies ist der Diensttyp für den rsync-Daemon,
er benutzt ein rsync-configuration
-Verbundsobjekt wie in diesem
Beispiel:
;; Zwei Verzeichnisse über rsync exportieren. Wie vorgegeben ;; lauscht rsync auf allen Netzwerkschnittstellen. (service rsync-service-type (rsync-configuration (modules (list (rsync-module (name "musik") (file-name "/srv/zik") (read-only? #f)) (rsync-module (name "filme") (file-name "/home/charlie/filme"))))))
Siehe unten für Details zur rsync-configuration
.
Datentyp, der die Konfiguration für den rsync-service
repräsentiert.
package
(Vorgabe: rsync)Zu benutzendes rsync
-Paket.
address
(Vorgabe: #f
)Auf welcher IP-Adresse rsync
auf eingehende Verbindungen
lauscht. Wird nichts angegeben, wird auf allen verfügbaren Adressen
gelauscht.
port-number
(Vorgabe: 873
)Der TCP-Port, auf dem rsync
auf eingehende Verbindungen
lauscht. Wenn die Portnummer kleiner als 1024
ist, muss
rsync
als Administratornutzer root
und auch mit dieser
Benutzergruppe gestartet werden.
pid-file
(Vorgabe: "/var/run/rsyncd/rsyncd.pid"
)Der Name der Datei, in die rsync
seine PID schreibt.
lock-file
(Vorgabe: "/var/run/rsyncd/rsyncd.lock"
)Der Name der Datei, die rsync
als seine Sperrdatei verwendet.
log-file
(Vorgabe: "/var/log/rsyncd.log"
)Der Name der Datei, in die rsync
seine Protokolle schreibt.
user
(Vorgabe: "root"
)Das Benutzerkonto, dem der rsync
-Prozess gehören soll.
group
(Vorgabe: "root"
)Die Benutzergruppe des rsync
-Prozesses.
uid
(Vorgabe: "rsyncd"
)Der Benutzername oder der Benutzeridentifikator (d.h. die „User-ID“), mit
dem Dateiübertragungen zum und vom Modul stattfinden sollen, wenn der Daemon
als Administratornutzer root
läuft.
gid
(Vorgabe: "rsyncd"
)Benutzergruppenname oder Gruppenidentifikator („Group-ID“), mit dem auf das Modul zugegriffen wird.
modules
(Vorgabe: %default-modules
)Liste von „Modulen“ – d.h. Verzeichnissen, die mit rsync exportiert
werden. Jedes Element muss ein rsync-module
-Verbund sein, wie nun
beschrieben wird.
Dies ist der Datentyp für rsync-„Module“. Ein Modul ist ein Verzeichnis, das über das rsync-Protokoll exportiert wird. Die verfügbaren Felder sind wie folgt:
name
Der Modulname. Dieser ist der Name, der in URLs benutzt wird. Zum
Beispiel, wenn das Modul musik
heißt, wird die entsprechende URL
rsync://host.example.org/musik
sein.
file-name
Der Name des Verzeichnisses, das exportiert wird.
comment
(Vorgabe: ""
)Kommentar, der mit dem Modul verbunden ist. Clientbenutzerschnittstellen dürfen das anzeigen, wenn sie die Liste der verfügbaren Module bekommen.
read-only?
(Vorgabe: #t
)Ob der Client Dateien hochladen können soll. Wenn dies falsch ist, wird das Hochladen autorisiert werden, wenn die Berechtigungen dort, wo der Daemon läuft, es erlauben.
chroot?
(Vorgabe: #t
)Wenn es auf wahr steht, wechselt der rsync-Daemon das Wurzelverzeichnis in das Verzeichnis des Moduls, bevor er Dateiübertragungen mit dem Client unternimmt. Das ist besser für die Sicherheit, aber es geht nur, wenn rsync als Administratornutzer root läuft.
timeout
(Vorgabe: 300
)Wie viele Sekunden ein Prozess untätig bleiben darf, bis eine Verbindung zum Client getrennt wird.
Das Modul (gnu services syncthing)
bietet die folgenden Dienste an:
Sie könnten einen syncthing-Daemon benutzen wollen, wenn Sie Dateien auf zwei oder mehr Rechnern haben und diese in Echtzeit synchronisieren wollen, geschützt vor neugierigen Blicken.
Dies ist der Diensttyp für den syncthing-Daemon, er benutzt ein
syncthing-configuration
-Verbundsobjekt wie in diesem Beispiel:
(service syncthing-service-type
(syncthing-configuration (user "alice")))
Siehe unten für Details zur syncthing-configuration
.
Datentyp, der die Konfiguration für den syncthing-service-type
repräsentiert.
syncthing
(Vorgabe: syncthing)Zu benutzendes syncthing
-Paket.
arguments
(Vorgabe: ’())Liste der Befehlszeilenoptionen, die an das syncthing
-Programm
übergeben werden.
logflags
(Vorgabe: 0)Die Summe aus den Protokollierungsoptionen, siehe die Dokumentation von Syncthing zu logflags.
user
(Vorgabe: #f)Das Benutzerkonto, mit dem der Syncthing-Dienst ausgeführt wird. Es wird vorausgesetzt, dass der angegebene Benutzer existiert.
group
(Vorgabe: "users")Die Gruppe, mit der der Syncthing-Dienst ausgeführt wird. Es wird vorausgesetzt, dass die angegebene Gruppe existiert.
home
(Vorgabe: #f)Das gemeinsame Verzeichnis für sowohl Konfiguration als auch Daten. In der
Vorgabeeinstellung würde das in $HOME gespeicherte Verzeichnis das
Konfigurationsverzeichnis des mit user
festgelegten
Syncthing-Nutzers.
Des Weiteren bietet das Modul (gnu services ssh)
die folgenden
Dienste an.
[#:x11-forwarding? #t] [#:tcp/ip-forwarding? #t]
[#:password-authentication? #t] [#:public-key-authentication? #t]
[#:initialize? #t] Das lshd
-Programm auf dem lsh-Paket so
ausführen, dass es auf dem Port mit Portnummer port-number
lauscht. host-key muss eine Datei angeben, die den Rechnerschlüssel
enthält, die nur für den Administratornutzer lesbar sein darf.
Wenn daemonic? wahr ist, entkoppelt sich lshd
vom Terminal,
auf dem er läuft, und schickt seine Protokolle an syslogd, außer
syslog-output? ist auf falsch gesetzt. Selbstverständlich hängt der
lsh-service dann auch von der Existenz eines syslogd-Dienstes ab. Wenn
pid-file? wahr ist, schreibt lshd
seine PID in die Datei
namens pid-file.
Wenn initialize? wahr ist, wird der Startwert zur Verschlüsselung ebenso wie der Rechnerschlüssel bei der Dienstaktivierung erstellt, falls sie noch nicht existieren. Das kann lange dauern und Anwenderinteraktion kann dabei erforderlich sein.
Wenn initialize? falsch ist, bleibt es dem Nutzer überlassen, den Zufallsgenerator zu initialisieren (siehe lsh-make-seed in LSH Manual) und ein Schlüsselpaar zu erzeugen, dessen privater Schlüssel in der mit host-key angegebenen Datei steht (siehe lshd basics in LSH Manual).
Wenn interfaces leer ist, lauscht lshd an allen Netzwerkschnittstellen auf Verbindungen, andernfalls muss interfaces eine Liste von Rechnernamen („Host“-Namen) oder Adressen bezeichnen.
allow-empty-passwords? gibt an, ob Anmeldungen mit leeren Passwörtern akzeptiert werden sollen, und root-login? gibt an, ob Anmeldungen als Administratornutzer „root“ akzeptiert werden sollen.
Die anderen Felder sollten selbsterklärend sein.
Dies ist der Diensttyp für den OpenSSH-Secure-Shell-Daemon, sshd
. Sein Wert muss ein
openssh-configuration
-Verbundsobjekt wie in diesem Beispiel sein:
(service openssh-service-type
(openssh-configuration
(x11-forwarding? #t)
(permit-root-login 'prohibit-password)
(authorized-keys
`(("alice" ,(local-file "alice.pub"))
("bob" ,(local-file "bob.pub"))))))
Siehe unten für Details zur openssh-configuration
.
Dieser Dienst kann mit weiteren autorisierten Schlüsseln erweitert werden, wie in diesem Beispiel:
(service-extension openssh-service-type
(const `(("charlie"
,(local-file "charlie.pub")))))
Dies ist der Verbundstyp für die Konfiguration von OpenSSHs sshd
.
openssh
(Vorgabe: openssh)Das zu benutzende OpenSSH-Paket.
pid-file
(Vorgabe: "/var/run/sshd.pid"
)Der Name der Datei, in die sshd
seine PID schreibt.
port-number
(Vorgabe: 22
)Der TCP-Port, auf dem sshd
auf eingehende Verbindungen lauscht.
max-connections
(Vorgabe: 200
)Harte Grenze, wie viele Client-Verbindungen gleichzeitig möglich sind,
durchgesetzt durch den im inetd-Stil startenden Shepherd-Dienst (siehe
make-inetd-constructor
in The GNU Shepherd Manual).
permit-root-login
(Vorgabe: #f
)Dieses Feld bestimmt, ob und wann Anmeldungen als Administratornutzer „root“
erlaubt sind. Wenn es #f
ist, sind Anmeldungen als Administrator
gesperrt, bei #t
sind sie erlaubt. Wird hier das Symbol
'prohibit-password
angegeben, dann sind Anmeldungen als Administrator
erlaubt, aber nur, wenn keine passwortbasierte Authentifizierung verwendet
wird.
allow-empty-passwords?
(Vorgabe: #f
)Wenn dies auf wahr gesetzt ist, können sich Nutzer, deren Passwort leer ist, anmelden. Ist es falsch, können sie es nicht.
password-authentication?
(Vorgabe: #t
)Wenn dies wahr ist, können sich Benutzer mit ihrem Passwort anmelden. Wenn es falsch ist, müssen sie andere Authentisierungsmethoden benutzen.
public-key-authentication?
(Vorgabe: #t
)Wenn dies wahr ist, können Benutzer zur Anmeldung mit ihrem öffentlichen Schlüssel authentifiziert werden. Wenn es falsch ist, müssen sie andere Authentisierungsmethoden benutzen.
Autorisierte öffentliche Schlüssel werden in ~/.ssh/authorized_keys gespeichert. Dies wird nur für Protokollversion 2 benutzt.
x11-forwarding?
(Vorgabe: #f
)Wenn dies auf wahr gesetzt ist, ist das Weiterleiten von Verbindungen an
grafische X11-Clients erlaubt – mit anderen Worten funktionieren dann
die ssh
-Befehlszeilenoptionen -X und -Y.
allow-agent-forwarding?
(Vorgabe: #t
)Ob Weiterleitung an den SSH-Agenten zugelassen werden soll.
allow-tcp-forwarding?
(Vorgabe: #t
)Ob Weiterleitung von TCP-Kommunikation zugelassen werden soll.
gateway-ports?
(Vorgabe: #f
)Ob Ports als Zugang für eingehende Verbindungen („Gateway-Ports“) weitergeleitet werden dürfen.
challenge-response-authentication?
(Vorgabe: #f
)Gibt an, ob „Challenge-Response“-Authentifizierung zugelassen wird (z.B. über PAM).
use-pam?
(Vorgabe: #t
)Aktiviert die Pluggable-Authentication-Module-Schnittstelle. Wenn es auf
#t
gesetzt ist, wird dadurch PAM-Authentisierung über
challenge-response-authentication?
und
password-authentication?
aktiviert, zusätzlich zur Verarbeitung von
PAM-Konten und Sitzungsmodulen für alle Authentisierungsarten.
Weil PAM-Challenge-Response-Authentisierung oft für dieselben Zwecke wie
Passwortauthentisierung eingesetzt wird, sollten Sie entweder
challenge-response-authentication?
oder
password-authentication?
deaktivieren.
print-last-log?
(Vorgabe: #t
)Hiermit wird angegeben, ob sshd
Datum und Uhrzeit der letzten
Anmeldung anzeigen soll, wenn sich ein Benutzer interaktiv anmeldet.
subsystems
(Vorgabe: '(("sftp" "internal-sftp"))
)Hiermit werden externe Subsysteme konfiguriert (z.B. ein Dateiübertragungsdaemon).
Diese werden als Liste von zweielementigen Listen angegeben, von denen jede den Namen des Subsystems und einen Befehl (mit optionalen Befehlszeilenargumenten) benennt, der bei einer Anfrage an das Subsystem ausgeführt werden soll.
Der Befehl internal-sftp
implementiert einen SFTP-Server im selben
Prozess. Alternativ kann man den sftp-server
-Befehl angeben:
(service openssh-service-type
(openssh-configuration
(subsystems
`(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
accepted-environment
(Vorgabe: '()
)Eine Liste von Zeichenketten, die die Umgebungsvariablen benennen, die exportiert werden dürfen.
Jede Zeichenkette wird zu einer eigenen Zeile in der
Konfigurationsdatei. Siehe die Option AcceptEnv
in man
sshd_config
.
Mit diesem Beispiel können SSH-Clients die Umgebungsvariable COLORTERM
exportieren. Sie wird von Terminal-Emulatoren gesetzt, die Farben
unterstützen. Sie können Sie in der Ressourcendatei Ihrer Shell benutzen, um
Farben in der Eingabeaufforderung und in Befehlen zu aktivieren, wenn diese
Variable gesetzt ist.
(service openssh-service-type
(openssh-configuration
(accepted-environment '("COLORTERM"))))
authorized-keys
(Vorgabe: '()
) ¶Dies ist die Liste der autorisierten Schlüssel. Jedes Element der Liste ist ein Benutzername gefolgt von einem oder mehr dateiartigen Objekten, die öffentliche SSH-Schlüssel repräsentieren. Zum Beispiel werden mit
(openssh-configuration
(authorized-keys
`(("rekado" ,(local-file "rekado.pub"))
("chris" ,(local-file "chris.pub"))
("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
die angegebenen öffentlichen Schlüssel für die Benutzerkonten rekado
,
chris
und root
registriert.
Weitere autorisierte Schlüssel können als service-extension
hinzugefügt werden.
Beachten Sie, dass das hier neben ~/.ssh/authorized_keys ohne sich zu stören benutzt werden kann.
generate-host-keys?
(Vorgabe: #t
)Ob Schlüsselpaare für den Rechner mit ssh-keygen -A
unter
/etc/ssh erzeugt werden sollen, wenn es noch keine gibt.
Das Erzeugen von Schlüsselpaaren dauert nur ein paar Sekunden, wenn genug Entropie vorrätig ist, und findet nur einmal statt. Wenn Sie es z.B. auf einer virtuellen Maschine nicht brauchen, etwa weil Sie die Rechnerschlüssel schon von anderswo bekommen und die zusätzliche Zeit beim Systemstart ein Problem ist, schalten Sie es vielleicht lieber aus.
log-level
(Vorgabe: 'info
)Dieses Symbol gibt die Stufe der Protokollierung an: quiet
(schweigsam), fatal
, error
, info
, verbose
(ausführlich), debug
(Fehlersuche) etc. Siehe die Handbuchseite für
sshd_config für die vollständige Liste der Stufenbezeichnungen.
extra-content
(Vorgabe: ""
)Dieses Feld kann benutzt werden, um beliebigen Text an die Konfigurationsdatei anzuhängen. Es ist besonders bei ausgeklügelten Konfigurationen nützlich, die anders nicht ausgedrückt werden können. Zum Beispiel würden mit dieser Konfiguration Anmeldungen als Administratornutzer „root“ grundsätzlich untersagt, lediglich für eine bestimmte IP-Adresse wären sie zugelassen:
(openssh-configuration
(extra-content "\
Match Address 192.168.0.1
PermitRootLogin yes"))
Den
Dropbear-SSH-Daemon
mit der angegebenen Konfiguration ausführen, einem
<dropbear-configuration>
-Objekt.
Wenn Sie zum Beispiel einen Dropbear-Dienst angeben möchten, der auf Port
1234 lauscht, dann fügen Sie diesen Aufruf ins services
-Feld des
Betriebssystems ein:
(dropbear-service (dropbear-configuration
(port-number 1234)))
Dieser Datentyp repräsentiert die Konfiguration eines Dropbear-SSH-Daemons.
dropbear
(Vorgabe: dropbear)Das zu benutzende Dropbear-Paket.
port-number
(Vorgabe: 22)Die Portnummer des TCP-Ports, auf dem der Daemon auf eingehende Verbindungen wartet.
syslog-output?
(Vorgabe: #t
)Ob eine Ausgabe für Syslog aktiviert sein soll.
pid-file
(Vorgabe: "/var/run/dropbear.pid"
)Der Dateiname der PID-Datei des Daemons.
root-login?
(Vorgabe: #f
)Ob Anmeldungen als Administratornutzer root
möglich sein sollen.
allow-empty-passwords?
(Vorgabe: #f
)Ob leere Passwörter zugelassen sein sollen.
password-authentication?
(Vorgabe: #t
)Ob passwortbasierte Authentisierung zugelassen sein soll.
Dies ist der Diensttyp für das AutoSSH-Programm, das eine Kopie von ssh
ausführt und diese
überwacht. Bei Bedarf wird sie neugestartet, für den Fall, dass sie abstürzt
oder keine Kommunikation mehr verarbeitet. AutoSSH kann von Hand aus der
Befehlszeile heraus aufgerufen werden, indem man Argumente an die Binärdatei
autossh
aus dem Paket autossh
übergibt, aber es kann auch
als ein Guix-Dienst ausgeführt werden. Letzteres wird hier beschrieben.
AutoSSH kann benutzt werden, um an den lokalen Rechner gerichtete Kommunikation an eine entfernte Maschine über einen SSH-Tunnel weiterzuleiten. Dabei gilt die ~/.ssh/config-Datei des AutoSSH ausführenden Benutzers.
Um zum Beispiel einen Dienst anzugeben, der autossh mit dem Benutzerkonto
pino
ausführt und alle lokalen Verbindungen auf Port 8081
an
entfernt:8081
über einen SSH-Tunnel durchzureichen, fügen Sie
folgenden Aufruf in das services
-Feld des Betriebssystems ein:
(service autossh-service-type
(autossh-configuration
(user "pino")
(ssh-options (list "-T" "-N" "-L" "8081:localhost:8081" "entfernt.net"))))
Dieser Datentyp repräsentiert die Konfiguration des AutoSSH-Dienstes.
user
(Vorgabe: "autossh"
)Das Benutzerkonto, mit dem der AutoSSH-Dienst ausgeführt wird. Es wird vorausgesetzt, dass der angegebene Benutzer existiert.
poll
(Vorgabe: 600
)Gibt an, wie oft die Verbindung geprüft wird („Poll Time“), in Sekunden.
first-poll
(Vorgabe: #f
)Gibt an, wie viele Sekunden AutoSSH vor der ersten Verbindungsprüfung
abwartet. Nach dieser ersten Prüfung werden weitere Prüfungen mit der in
poll
angegebenen Regelmäßigkeit durchgeführt. Wenn dies auf #f
gesetzt ist, erfährt die erste Verbindungsprüfung keine Sonderbehandlung,
sondern benutzt die gleichen Zeitabstände, die auch mit poll
festgelegt wurden.
gate-time
(Vorgabe: 30
)Gibt an, wie viele Sekunden lang eine SSH-Verbindung aktiv sein muss, bis sie als erfolgreich angesehen wird.
log-level
(Vorgabe: 1
)Die Protokollierungsstufe. Sie entspricht den bei Syslog verwendeten Stufen,
d.h. 0
verschweigt die meisten Ausgaben, während 7
die
gesprächigste Stufe ist.
max-start
(Vorgabe: #f
)Wie oft SSH (neu) gestartet werden darf, bevor AutoSSH aufgibt und sich
beendet. Steht dies auf #f
, gibt es keine Begrenzung und AutoSSH kann
endlos neu starten.
message
(Vorgabe: ""
)Welche Nachricht beim Prüfen von Verbindungen an die zurückkommende Echo-Nachricht angehängt werden soll.
port
(Vorgabe: "0"
)Welche Ports zum Überprüfen der Verbindung benutzt werden. Steht dies auf
"0"
, werden keine Überprüfungen durchgeführt. Steht es auf
"n"
für eine positive ganze Zahl n, werden die Ports
n und n+1 zum Überwachen der Verbindung eingesetzt, wobei auf
Port n Daten dafür gesendet werden und Port n+1
deren Echo
empfangen soll. Steht es auf "n:m"
für positive ganze
Zahlen n und m, werden Ports n und m zur Überprüfung
eingesetzt, wozu Port n zum Senden der Prüfdaten eingesetzt wird und
Port m das Echo empfängt.
ssh-options
(Vorgabe: '()
)Die Liste der Befehlszeilenargumente, die an ssh
weitergegeben
werden sollen, wenn es ausgeführt wird. Die Befehlszeilenoptionen
-f und -M sind AutoSSH vorbehalten; sie anzugeben, führt
zu undefiniertem Verhalten.
Dies ist der Diensttyp für das Programm
WebSSH, das einen webbasierten
SSH-Client ausführt. WebSSH kann von Hand aus der Befehlszeile heraus
aufgerufen werden, indem man Argumente an die Binärdatei wssh
aus
dem Paket webssh
übergibt, aber es kann auch als ein Guix-Dienst
ausgeführt werden. Letzteres wird hier beschrieben.
Um zum Beispiel einen Dienst anzugeben, der WebSSH an der
Loopback-Schnittstelle auf Port 8888
ausführt, wobei die Richtlinie
ist, dass Verbindungen abgelehnt werden außer zu einer Liste von erlaubten
Rechnern, und eine auf HTTPS-Verbindungen lauschende NGINX als inversen
Proxy dafür fungieren zu lassen, fügen Sie folgende Aufrufe in das
services
-Feld des Betriebssystems ein:
(service webssh-service-type (webssh-configuration (address "127.0.0.1") (port 8888) (policy 'reject) (known-hosts '("localhost ecdsa-sha2-nistp256 AAAA…" "127.0.0.1 ecdsa-sha2-nistp256 AAAA…")))) (service nginx-service-type (nginx-configuration (server-blocks (list (nginx-server-configuration (inherit %webssh-configuration-nginx) (server-name '("webssh.example.com")) (listen '("443 ssl")) (ssl-certificate (letsencrypt-certificate "webssh.example.com")) (ssl-certificate-key (letsencrypt-key "webssh.example.com")) (locations (cons (nginx-location-configuration (uri "/.well-known") (body '("root /var/www;"))) (nginx-server-configuration-locations %webssh-configuration-nginx))))))))
Repräsentiert die Konfiguration für den Dienst webssh-service
.
package
(Vorgabe: webssh
)Zu benutzendes webssh
-Paket.
user-name
(Vorgabe: "webssh"
)Der Benutzername oder der Benutzeridentifikator (d.h. die „User-ID“), mit dem Dateiübertragungen zum und vom Modul stattfinden sollen.
group-name
(Vorgabe: "webssh"
)Benutzergruppenname oder Gruppenidentifikator („Group-ID“), mit dem auf das Modul zugegriffen wird.
address
(Vorgabe: #f
)Die IP-Adresse, auf der webssh
auf eingehende Verbindungen
lauscht.
port
(Vorgabe: 8888
)Der TCP-Port, auf dem webssh
auf eingehende Verbindungen lauscht.
policy
(Vorgabe: #f
)Die Verbindungsrichtlinie reject
setzt voraus, dass erlaubte Rechner
in known-hosts eingetragen werden.
known-hosts
(Vorgabe: '()
)Eine Liste der Rechner, die für eine SSH-Verbindung aus webssh
zugelassen sind.
log-file
(Vorgabe: "/var/log/webssh.log")Der Name der Datei, in die webssh
seine Protokolle schreibt.
log-level
(Vorgabe: #f
)Das Protokollierungsniveau.
Diese Variable enthält eine Zeichenkette, die Sie für /etc/hosts
benutzen können (siehe Host Names in Referenzhandbuch der
GNU-C-Bibliothek). Jede Zeile enthält einen Eintrag, der einen bekannten
Servernamen des Facebook-Online-Dienstes – z.B.
www.facebook.com
– an den lokalen Rechner umleitet – also
an 127.0.0.1
oder dessen IPv6-Gegenstück ::1
.
Normalerweise wird diese Variable im Feld hosts-file
einer
operating-system
-Betriebssystemdeklaration benutzt (siehe
/etc/hosts):
(use-modules (gnu) (guix)) (operating-system (host-name "mymachine") ;; … (hosts-file ;; Eine /etc/hosts-Datei, mit der "localhost" und ;; "mymachine" als Alias-Namen eingerichtet werden ;; und für die Facebook-Servernamen stattdessen ;; Alias-Namen benutzt werden. (plain-file "hosts" (string-append (local-host-aliases host-name) %facebook-host-aliases))))
Dieser Mechanismus kann verhindern, dass lokal laufende Programme, wie z.B. Web-Browser, auf Facebook zugreifen.
Das Modul (gnu services avahi)
stellt die folgende Definition zur
Verfügung.
Dieser Dienst führt den avahi-daemon
aus, einen systemweiten
mDNS-/DNS-SD-Anbieter, mit dem im lokalen Netzwerk befindliche Geräte
erkannt werden können („Service Discovery“) und Rechnernamen selbstständig
aufgelöst werden können („Zero-Configuration“) (siehe
https://avahi.org/). Sein Wert muss ein
avahi-configuration
-Verbundsobjekt sein – siehe unten.
Dieser Dienst erweitert den Name Service Cache Daemon (nscd), damit er
.local
-Rechnernamen mit
nss-mdns auflösen
kann. Siehe Name Service Switch für Informationen zur Auflösung von
Rechnernamen.
Des Weiteren wird das avahi-Paket zum Systemprofil hinzugefügt, damit
Befehle wie avahi-browse
einfach benutzt werden können.
Dieser Datentyp repräsentiert die Konfiguration von Avahi.
host-name
(Vorgabe: #f
)Wenn dies auf etwas anderes als #f
gesetzt ist, wird es anderen als
Rechnername für diese Maschine mitgeteilt, andernfalls wird der tatsächliche
Rechnername anderen mitgeteilt.
publish?
(Vorgabe: #t
)Wenn es auf wahr gesetzt ist, dürfen Rechnernamen und Avahi-Dienste über das Netzwerk mitgeteilt werden (als Broadcast).
publish-workstation?
(Vorgabe: #t
)Wenn es auf wahr gesetzt ist, teilt avahi-daemon
den Rechnernamen
dieser Maschine und die IP-Adresse über mDNS auf dem lokalen Netzwerk
öffentlich mit. Um die auf Ihrem lokalen Netzwerk mitgeteilten Rechnernamen
zu sehen, können Sie das hier ausführen:
avahi-browse _workstation._tcp
wide-area?
(Vorgabe: #f
)Wenn dies auf wahr gesetzt ist, ist DNS-SD über „Unicast DNS“ aktiviert.
ipv4?
(Vorgabe: #t
)ipv6?
(Vorgabe: #t
)Mit diesen Feldern wird festgelegt, ob IPv4-/IPv6-Sockets verwendet werden.
domains-to-browse
(Vorgabe: '()
)Dies ist eine Liste von Domänen, die durchsucht werden.
Dies ist der Diensttyp des Open-vSwitch-Dienstes, der als Wert ein
openvswitch-configuration
-Objekt hat.
Der Datentyp, der die Konfiguration von Open vSwitch repräsentiert, einem auf mehreren Schichten arbeitenden („multilayer“) virtuellen Switch, der für massenhafte Netzwerkautomatisierung durch programmatische Erweiterungen eingesetzt werden kann.
package
(Vorgabe: openvswitch)Das Paketobjekt vom Open vSwitch.
Dies ist der Diensttyp für den PageKite-Dienst, einem Angebot zur getunnelten Netzwerkumleitung, womit
bloß auf localhost lauschende Server öffentlich erreichbar gemacht werden
können. Mit PageKite werden die Server für andere erreichbar, selbst wenn
Ihre Maschine nur über eine restriktive Firewall oder eine
Netzwerkadressübersetzung („Network Address Translation“, NAT) ohne
Portweiterleitung mit dem Internet verbunden ist. Der Wert dieses Dienstes
ist ein pagekite-configuration
-Verbundsobjekt.
Hier ist ein Beispiel, wodurch die lokal laufenden HTTP- und SSH-Daemons zugänglich gemacht werden:
(service pagekite-service-type
(pagekite-configuration
(kites '("http:@kitename:localhost:80:@kitesecret"
"raw/22:@kitename:localhost:22:@kitesecret"))
(extra-file "/etc/pagekite.rc")))
Der Datentyp, der die Konfiguration von PageKite repräsentiert.
package
(Vorgabe: pagekite)Paketobjekt von PageKite.
kitename
(Vorgabe: #f
)PageKite-Name, um sich gegenüber dem Vordergrundserver zu authentisieren.
kitesecret
(Vorgabe: #f
)Das gemeinsame Geheimnis, das eine Authentisierung gegenüber dem
Vordergrundserver ermöglicht. Wahrscheinlich sollten Sie es besser als Teil
von extra-file
angeben.
frontend
(Vorgabe: #f
)Eine Verbindung zum angegebenen PageKite-Vordergrundserver herstellen statt zu dem Dienst von pagekite.net.
kites
(Vorgabe: '("http:@kitename:localhost:80:@kitesecret")
)Die Liste der zu benutzenden „Kites“ für Dienste. Nach Vorgabe wird der
HTTP-Server auf Port 80 nach außen hin zugänglich gemacht. Dienste sind im
Format protokoll:kitename:rechnername:port:geheimnis
anzugeben.
extra-file
(Vorgabe: #f
)Eine Konfigurationsdatei, die zusätzlich eingelesen werden soll. Es wird erwartet, dass Sie diese manuell erstellen. Benutzen Sie sie, wenn Sie zusätzliche Optionen angeben möchten und um gemeinsame Geheimnisse abseits von Guix’ Zuständigkeitsbereich zu verwalten.
Der Diensttyp, um eine Verbindung mit dem Yggdrasil-Netzwerk herzustellen, einer frühen Implementierungsstufe eines völlig Ende-zu-Ende-verschlüsselten IPv6-Netzwerks.
Die Wegfindung im Yggdrasil-Netzwerk verläuft unabhängig vom Namen der Netzwerkknoten („Name-independent Routing“) und verwendet kryptografisch erzeugte Adressen. Durch die statische Adressierung können Sie dieselbe Adresse so lange weiterbenutzen, wie Sie möchten, selbst wenn Sie sich an einem anderen Ort befinden als vorher, und Sie können auch, wann immer Sie möchten, eine neue Adresse erzeugen (durch Erzeugung neuer Schlüssel). Siehe https://yggdrasil-network.github.io/2018/07/28/addressing.html
Übergeben Sie einen Wert vom Typ yggdrasil-configuration
, um ihn eine
Verbindung zu öffentlichen und/oder lokalen Netzwerkteilnehmern („Peers“)
herstellen zu lassen.
Hier ist ein Beispiel für die Nutzung mit öffentlichen Peers und einer
statischen Adresse. Die statischen Schlüssel zum Signieren und Verschlüsseln
werden in /etc/yggdrasil-private.conf definiert (dies ist die Vorgabe
für config-file
).
;; Teil des operating-system in der Betriebssystemdeklaration (service yggdrasil-service-type (yggdrasil-configuration (autoconf? #f) ;nur öffentliche Peers benutzen (json-config ;; nehmen Sie eine von ;; https://github.com/yggdrasil-network/public-peers '((peers . #("tcp://1.2.3.4:1337")))) ;; /etc/yggdrasil-private.conf ist der Vorgabewert von config-file ))
# Beispielinhalt für /etc/yggdrasil-private.conf { # Ihr öffentlicher Schlüssel. Ihre Peers können Sie um # den Schlüssel bitten, um ihn in deren Konfiguration der # AllowedPublicKeys einzutragen. PublicKey: 64277… # Ihr privater Signierschlüssel. Geben Sie ihn NICHT weiter! PrivateKey: 5c750… }
Repräsentiert die Konfiguration von Yggdrasil.
package
(Vorgabe: yggdrasil
)Paketobjekt von Yggdrasil.
json-config
(Vorgabe: '()
)Der Inhalt von /etc/yggdrasil.conf. Er wird mit
/etc/yggdrasil-private.conf zusammengelegt. Beachten Sie, dass diese
Einstellungen im Guix-Store gespeichert werden, auf den alle Nutzer Zugriff
haben. Speichern Sie dort nicht Ihre privaten Schlüssel. Siehe die
Ausgabe von yggdrasil -genconf
für eine kurze Übersicht über gültige
Schlüssel und ihre Vorgabewerte.
autoconf?
(Vorgabe: #f
)Ob der automatische Modus benutzt werden soll. Ihn zu aktivieren, bedeutet, dass Yggdrasil eine dynamische IP-Adresse benutzt und sich mit IPv6-Nachbarn verbindet.
log-level
(Vorgabe: 'info
)Wie detailliert die Protokolle sein sollen. Schreiben Sie 'debug
für
einen höheren Detailgrad.
log-to
(Vorgabe: 'stdout
)Wohin Protokolle geschickt werden. Die Vorgabe ist, dass der Dienst ein
Protokoll seiner Standardausgabe in /var/log/yggdrasil.log
schreibt. Die Alternative ist 'syslog
, wodurch die Ausgabe an den
laufenden syslog-Dienst geschickt wird.
config-file
(Vorgabe: "/etc/yggdrasil-private.conf"
)Wo die HJSON-Datei liegt, aus der sensible Daten geladen werden. Hier
sollten private Schlüssel gespeichert werden, wodurch nicht nach jedem
Neustart eine zufällige Adresse benutzt wird. Verwenden Sie #f
zum
Deaktivieren. In dieser Datei festgelegte Optionen haben Vorrang vor
json-config
. Tragen Sie anfangs die Ausgabe von yggdrasil
-genconf
ein. Um eine statische Adresse zu benutzen, löschen Sie alles
außer den folgenden Optionen:
EncryptionPublicKey
EncryptionPrivateKey
SigningPublicKey
SigningPrivateKey
Der Diensttyp, um sich mit dem IPFS-Netzwerk zu
verbinden, einem weltweiten, versionierten, von einem Netzwerkteilnehmer zum
anderen („peer-to-peer“) verteilten Dateisystem. Geben Sie ein
ipfs-configuration
-Verbundsobjekt an, um die für den Netzwerkzugang
(Gateway) und die Anwendungsschnittstelle (API) verwendeten Ports zu ändern.
Hier ist eine Beispielkonfiguration, um nicht standardmäßige Ports einzusetzen:
(service ipfs-service-type
(ipfs-configuration
(gateway "/ip4/127.0.0.1/tcp/8880")
(api "/ip4/127.0.0.1/tcp/8881")))
Repräsentiert die Konfiguration des IPFS.
package
(Vorgabe: go-ipfs
)Paketobjekt von IPFS.
gateway
(Vorgabe: "/ip4/127.0.0.1/tcp/8082"
)Die Adresse des Netzwerkzugangs im Format einer Multiadresse („multiaddress“).
api
(Vorgabe: "/ip4/127.0.0.1/tcp/5001"
)Die Adresse des API-Endpunkts im Format einer Multiadresse („multiaddress“).
Dies ist der Diensttyp für die Software Keepalived für virtuelle Router, keepalived
. Sein Wert muss ein
keepalived-configuration
-Verbundsobjekt sein, wie in diesem Beispiel
für die Maschine erster Wahl (Master):
(service keepalived-service-type
(keepalived-configuration
(config-file (local-file "keepalived-master.conf"))))
Dabei enthält keepalived-master.conf:
vrrp_instance meine-gruppe { state MASTER interface enp9s0 virtual_router_id 100 priority 100 unicast_peer { 10.0.0.2 } virtual_ipaddress { 10.0.0.4/24 } }
Für die Ersatzmaschine (Backup):
(service keepalived-service-type
(keepalived-configuration
(config-file (local-file "keepalived-backup.conf"))))
Dort enthält keepalived-backup.conf:
vrrp_instance meine-gruppe { state BACKUP interface enp9s0 virtual_router_id 100 priority 99 unicast_peer { 10.0.0.3 } virtual_ipaddress { 10.0.0.4/24 } }
Nächste: Unbeaufsichtigte Aktualisierungen, Vorige: Netzwerkeinrichtung, Nach oben: Dienste [Inhalt][Index]