Einführung in VyOS Router
Übersicht über VyOS
VyOs ist eine Open Source Routing-Platform, die auf Intel, AMD und ARM Prozessoren läuft und sich somit für virtualisierte Umgebungen bzw. Cloud Computing eignet. VyOS basiert intern auf Debian GNU/Linux. VyOS stellt unter anderem die folgenden Netzdienste bereit:
- Dynamic Host Configuration Protocol (DHCP) Server
- Statisches und dynamisches IP Routing, z.B. mit den Protokollen RIP, OSPF oder BGP
- Firewall und Network Address Translation (NAT)
- Virtual Private Networks (VPN), z.B. mit Generic Routing Encapsulation (GRE) Tunneln, OpenVPN, WireGuard oder IPsec
Hinzu kommen zahlreiche weitere Router-Funktionen wie z.B. Quality-of-Service (QoS), High Availability (HA), NetFlow/sFlow Unterstützung, usw.
Eine umfangreiche VyOS Dokumentation ist auf https://docs.vyos.io/en/equuleus/ zu finden.
Nützliche Hintergrundinformationen finden sich z.B. auf den folgenden englisch-sprachigen Seiten:
- Kommandozeile (Command-Line Interface): https://docs.vyos.io/en/equuleus/cli.html
- Netzschnittstellen (Interfaces): https://docs.vyos.io/en/equuleus/configuration/interfaces/index.html
- Ethernet Netzadapter: https://docs.vyos.io/en/equuleus/configuration/interfaces/ethernet.html (inklusive Port Mirror bzw. SPAN)
- Statisches Routing: https://docs.vyos.io/en/equuleus/configuration/protocols/static.html
- Firewall: https://docs.vyos.io/en/equuleus/configuration/firewall/index.html
- Tunnel bzw. VPN mit GRE: https://docs.vyos.io/en/equuleus/configuration/interfaces/tunnel.html
- NAT: https://docs.vyos.io/en/equuleus/configuration/nat/index.html
- Problemsuche: https://docs.vyos.io/en/equuleus/troubleshooting/index.html
VyOS Kommandozeile
VyOS wird über Texteingaben in einer Kommandozeile (Command Line Interface bzw. CLI) bedient. Die VyOS Kommandozeile ähnelt der CLI von Juniper Routern und ist fast identisch zur CLI bestimmter Ubiquiti Geräte („EdgeRouter“). Die CLI von Cisco als größtem Hersteller von Switches und Routern verhält sich teilweise etwas anders – trotzdem sind viele Grundkonzepte auch auf Cisco übertragbar.
Die VyOS Kommanozeile nimmt Eingaben vom Benutzer als Zeichenkette entgegen. Befehle werden ggf. mit einer durch Leerzeichen getrennten Liste an Parametern eingegeben und mit der Return-Taste beendet und anschließend ausgewertet.
Die VyOS Kommandozeile unterscheidet zwei verschiedene Betriebsmodi: Den Operational Mode und den Configuration Mode. Diese werden zu verschiedenen Zwecken verwendet und unterscheiden sich sowohl in der Eingabeaufforderung (Prompt) wie auch in den möglichen Befehlen.
Der Operational Mode ist erkennbar an dem Dollarzeichen ($
) in der Eingabeaufforderung, in der auch der
Benutzername und der Hostname des Routers angegeben wird. Im Operational Mode kann der Status des
Geräts abgefragt und überwacht werden. Ein typisches Beispiel ist die Anzeige von Statusinformationen mit
show. Es gibt auch Befehle, die das Gesamtsystem betreffen, wie z.B. ein geordnetes Herunterfahren
(poweroff). Nach dem Einloggen auf dem Router befindet man sich zunächst im Operational Mode.
Änderungen an der Gerätekonfiguration sind in VyOS nur im Configuration Mode der Kommandozeile
möglich, der durch eine Raute (#
) in der Eingabeaufforderung gekennzeichnet ist. Um aus dem Operational
Mode in den Configuration Mode zu wechseln wird der Befehl configure
eingegeben. Dies
veranschaulicht die folgende Abfolge von Befehlen:
vyos@router:~$ configure
[edit]
vyos@router# set service ssh port 22
[edit]
vyos@router# commit
[edit]
vyos@router# exit
Das Kommando exit
kehrt aus dem Configuration Mode zurück in den Operational Mode.
Die VyOS Kommandozeile hat ein eingebautes Hilfesystem. In einer leeren Befehlszeile können sowohl
durch die Taste ? als auch durch die Taste TAB alle verfügbaren Befehle als Hilfe angezeigt werden:
vyos@router:~$ ?
Possible completions:
add Add an object to a service
clear Clear system information
clone Clone an object
configure Enter configure mode
connect Establish a connection
copy Copy an object
delete Delete an object
disconnect Take down a connection
force Force an operation
format Format a device
generate Generate an object
install Install a new system
monitor Monitor system information
ping Send IPv4 or IPv6 ICMP (Internet Control Message Protocol)
echo requests
poweroff Poweroff the system
reboot Reboot the system
release Release specified variable
rename Rename an object
renew Renew specified variable
reset Reset a service
restart Restart a service
:_
Wenn eine Bildschirmausgabe nicht vollständig dargestellt werden kann, wie im hier abgedruckten Beispiel, dann kann u.a. mit den Pfeiltasten zeilenweise in der Ausgabe navigiert werden und mit Taste q wieder zur Eingabeaufforderung zurückgekehrt werden. Bei einer teilweise eingegebenen Zeile können weitere notwendige Parameter ebenfalls durch die Tasten ? bzw. TAB als kontext-abhängige Hilfe dargestellt werden. Beispiel:
vyos@router:~$ show ?
Possible completions:
arp Show Address Resolution Protocol (ARP) information
bridge Show bridging information
cluster Show clustering information
configuration Show running configuration
conntrack Show conntrack entries in the conntrack table
conntrack-sync
Show connection syncing information
date Show system date and time
dhcp Show Dynamic Host Configuration Protocol (DHCP) information
dhcpv6 Show status related to DHCPv6
disk Show status of disk device
dns Show Domain Name Server (DNS) information
file Show files for a particular image
firewall Show firewall information
flow-accounting
Show flow accounting statistics
hardware Show system hardware details
history show command history
host Show host information
incoming Show ethernet input-policy information
interfaces Show network interface information
:_
Teilweise eingegebene Befehle oder Parameter können durch Taste TAB vervollständigt werden, so dass oft nur die ersten Buchstaben eingegeben werden müssen, was viel Tipparbeit ersparen kann. Diese nützliche Auto-Completion funktioniert nur, wenn die bislang eingegebenen Buchstaben bereits eindeutig sind.
Beispielsweise kann die aktuelle Routing-Tabelle im Operational Mode durch show ip route
ausgeben
werden. Diese Befehlszeile muss jedoch nicht komplett eingegeben werden. Es reicht aus, die folgenden
Tasten zu drücken, wobei → für die TAB-Taste steht:
sh→ ip ro→
Dies wird automatisch vervollständigt zu dem kompletten Befehl zur Anzeige der Routing-Tabelle:
vyos@router:~$ show ip route
Hilfefunktionen sind auch im Configuration Mode verfügbar. Beispielsweise zeigt ? (oder alternativ TAB) alle Befehle im Configuration Mode an:
vyos@router:~$ configure
vyos@router# ?
Possible completions:
confirm Confirm prior commit-confirm
comment Add comment to this configuration element
commit Commit the current set of changes
commit-confirm Commit the current set of changes with 'confirm' required
compare Compare configuration revisions
copy Copy a configuration element
delete Delete a configuration element
discard Discard uncommitted changes
edit Edit a sub-element
exit Exit from this configuration level
load Load configuration from a file and replace running configuration
loadkey Load user SSH key from a file
merge Load configuration from a file and merge running configuration
rename Rename a configuration element
rollback Rollback to a prior config revision (requires reboot)
run Run an operational-mode command
save Save configuration to a file
set Set the value of a parameter or create a new element
show Show the configuration (default values may be suppressed)
Man kann aus dem Configuration Mode heraus auch direkt Befehle des Operational Mode auszuführen, indem man run als Präfix nutzt:
vyos@router# run ping 192.168.0.1
Änderung der VyOS Konfiguration
VyOS unterscheidet drei verschiedene Konfigurationstypen für die Parameter des Routers:
- Active/Running Configuration: Dies ist die momentan auf dem Router aktive Konfiguration, die von VyOS tatsächlich verwendet wird.
- Working Configuration: Das bezeichnet im Configuration Mode gegenwärtig durchgeführte
Änderungen der Konfiguration, die noch nicht mit
commit
in die Active /Running Configuration überführt wurden und daher derzeit noch nicht tatsächlich verwendet werden. - Saved Configuration: Das bezieht such auf im Dateisystem des Routers dauerhaft mit dem Befehl save gespeicherte Konfigurationsdateien; beim Starten des Systems wird die gespeicherte Boot Konfiguration aus der Datei „config.boot“ geladen.
Daraus folgen zwei für die Konfiguration von VyOS praktisch sehr wichtige Konsequenzen:
-
Änderungen der Konfiguration werden nicht sofort nach Eingabe aktiv, sondern erst, nachdem die Änderung mit dem commit Befehl in die Active/Running Configuration eingepflegt wird.
-
Nicht-gespeicherte Änderungen gehen nach Neustart verloren, wenn die Änderungen nicht durch das Kommando save dauerhaft im Dateisystem z.B. als Boot-Konfiguration abgespeichert werden.
Die Unterscheidung zwischen Active/Running Configuration und Working Configuration bedeutet, dass jede
Konfigurationsänderung in VyOS erst nach dem Befehl commit
wirklich wirksam wird. Änderungen
mehrerer Parameter werden nur in die Active/Running Configuration übernommen, wenn alle Änderungen
möglich sind (Transaktionslogik). Es ist alternativ auch möglich, Änderungen in der Working Configuration
mit discard
wieder komplett zu verwerfen.
Sofern eine Konfigurationsänderung auch nach dem Neustart eines VyOS Routers beibehalten werden soll, muss
vor dem Neustart der Befehl save
ausgeführt werden, um die Änderung in die Saved Configuration zu
übernehmen.
Die Unterscheidung zwischen Active/Running Configuration und Working Configuration bedeutet, dass jede
Konfigurationsänderung in VyOS erst nach dem Befehl commit
wirklich wirksam wird. Änderungen
mehrerer Parameter werden nur in die Active/Running Configuration übernommen, wenn alle Änderungen
möglich sind (Transaktionslogik). Es ist alternativ auch möglich, Änderungen in der Working Configuration
mit discard
wieder komplett zu verwerfen.
Die beiden wichtigsten Befehle für Änderungen im Configuration Mode sind set
und delete
:
- Mit
set
werden Parameter gesetzt. - Mit
delete
werden Parameter gelöscht.
Parameter werden dabei in einem Pfad in einer Konfigurationshierarchie angegeben, deren Ebenen in Textausgaben durch geschweifte Klammern dargestellt werden.
Zum Beispiel setzt der folgende Befehl die Default-Route des Routers zum Next-Hop 192.168.0.254:
vyos@router# set protocols static route 0.0.0.0/0 next-hop 192.168.0.254
Der Konfigurationspfad in dieser Konfigurationshierarchie beginnt in dem Beispiel mit den Elementen
„protocols“, „static“ und „route“. Dieser Befehl führt zu folgender Konfigurationsänderung, die z.B. mit
compare
angezeigt werden kann und genau die Ebenen der eigegebenen Parameter enthält:
vyos@router# compare
+protocols {
+ static {
+ route 0.0.0.0/0 {
+ next-hop 203.0.113.1 {
+ }
+ }
+ }
+}
Mit dem Zeichen + werden hierbei Konfigurationsänderungen angegeben, die in der Working Configuration vorgenommen wurden, aber noch nicht in die Active/Running Configuration übernommen wurden.
Um diese statische Route tatsächlich in die Routing-Tabelle einzutragen, ist ein commit
notwendig:
vyos@router# commit
[edit]
Danach sind alle Änderungen übernommen:
vyos@router# compare
No changes between working and active configurations
[edit]
Nicht mehr benötigte Parameter können mit delete
gelöscht werden. Zum Beispiel führt der Befehl
vyos@router# delete protocols static route 0.0.0.0/0
zum Löschen der Default-Route aus der Working Configuration. Dabei ist es ggf. ausreichend, einen
eindeutigen Teilpfad zu dem zu löschenden Element anzugeben. Das tatsächliche Löschen aus der Routing-
Tabelle erfolgt aber erst, wenn die Änderung mit commit
auf die Active/Running Configuration
angewendet wird.
Natürlich ist es möglich, auch mehrere Änderungen in der Working Configuration vorzunehmen, bevor
diese mit commit
wirksam werden. Dies soll beispielhaft für eine Änderung der Netzschnittstelle eth0
illustriert werden, der die IPv4 Adresse 192.168.0.1 im Sub-Netz 192.168.0.0/24 (Netzmaske 255.255.255.0)
sowie eine Textbeschreibung zugewiesen werden soll:
vyos@router# set interfaces ethernet eth0 address 192.168.0.1/24
vyos@router# set interfaces ethernet eth0 description "Example interface"
Im Configuration Mode kann die gesamte Working Configuration durch das Kommando show
ausgegeben
werden. Es ist aber auch möglich, nur Teile der Konfiguration auszuwählen, z.B. durch show interfaces. Die
Textausgabe des letzteren Befehls würde nach der obigen Änderung mit den folgenden Zeilen beginnen:
vyos@router# show interfaces
ethernet eth0 {
+ address 192.168.0.1/24
+ description "Example interface"
Auch diese Änderungen würden sich erst auf das Routing auswirken, nachdem commit
ausgeführt wurde.
VyOS bietet über die genannten Befehle hinaus noch weitere Möglichkeiten, die Konfiguration zu ändern. Details dazu finden sich in der Dokumentation im Web oder in der Online-Hilfe des Routers selbst.
Nachfolgend werden zur Illustration noch weitere einfache Beispiele für die Konfiguration eines VyOS Routers bereitgestellt. Die auf Routern laufenden Dienste sind jedoch üblicherweise über sehr viele Parameter konfigurierbar, die ein detailliertes Verständnis der entsprechenden Mechanismen und Protokolle voraussetzen. Daher beschränkt sich die Einführung auf relativ einfache Konfigurationsbeispiele für Basisdienste eines Routers. Die VyOS Dokumentation enthält zahlreiche weitere komplexere Beispiele.
Konfigurationsbeispiele für VyOS
Firewall
VyOS erlaubt es, relativ komplexe Firewall-Konfigurationen zu erstellen. In dem Laborversuch sollen einfache zustandslose Firewalls mit Paketfiltern betrachtet werden, die über Access Control List (ACL) Regeln konfiguriert werden
Jeder Eintrag definiert dabei eine Regel (Rule) mit Kriterien, die auf Headerfelder in Pakete zutreffen
können, sowie einer zugehörigen Aktion, die auf das Paket angewendet wird, falls alle definierten Kriterien
zutreffen. Eine Regel wird nur angewendet, wenn alle in der Regel definierten Kriterien erfüllt sind. Dazu
gehören auch Überprüfungen, ob sich IP Adressen in angegebenen Sub-Netzen befinden. Beispiele für
Aktionen sind accept
, drop
bzw. reject
. In VyoS werden die Regeln nummeriert und mit dem
Schlüsselwort rule
definiert.
Mehrere Regeln können in einem Regelsatz zusammengefasst werden und mit einem (frei wählbaren)
Namen versehen werden. Innerhalb des Regelsatzes werden die Regeln entsprechend der (zwischen 1 und
9999 wählbaren) Nummern in aufsteigender Reihenfolge abgearbeitet. Falls keine Regel zutrifft, kann für
einen Regelsatz eine Default-Aktion (Parameter default-action
) ausgelöst werden.
Regelsätze können über den Namen einer oder mehreren Netzschnittstelle(n) zugewiesen werden. Der
Regelsatz wird dann auf dieser Netzschnittstelle entsprechend einer gewählten Richtung für allen
ausgehenden (out
) bzw. eingehenden (in
) Datenverkehr angewendet und realisiert dort die Firewall.
Im folgenden Beispiel wird eine Firewall mit einem Regelsatz EXAMPLE
definiert, der über zwei Regeln mit
den willkürlich gewählten Nummern 1000 und 2000 die Anwendungsprotokolle DNS für alle Ziel-Adressen
und SSH zum Sub-Netz 10.0.0.0/8 im ausgehenden Verkehr auf dem Netzadapters eth0
zulässt (accept
).
Aller übrige ausgehende Datenverkehr wird auf dieser Schnittstelle verworfen (drop
):
vyos@router# set firewall name EXAMPLE default-action drop
vyos@router# set firewall name EXAMPLE rule 1000 action accept
vyos@router# set firewall name EXAMPLE rule 1000 destination port 53
vyos@router# set firewall name EXAMPLE rule 1000 protocol udp
vyos@router# set firewall name EXAMPLE rule 2000 action accept
vyos@router# set firewall name EXAMPLE rule 2000 destination address 10.0.0/8
vyos@router# set firewall name EXAMPLE rule 2000 destination port 22
vyos@router# set firewall name EXAMPLE rule 2000 protocol tcp
vyos@router# set interfaces ethernet eth1 firewall out name EXAMPLE
Dies würde zu der folgenden Firewall-Konfiguration führen:
firewall {
name EXAMPLE {
default-action drop
rule 1000 {
action accept
destination {
port 53
}
protocol udp
}
rule 2000 {
action accept
destination {
address 10.0.0.0/8
port 22
}
protocol tcp
}
}
}
GRE Tunnel
VyOS unterstützt eine ganze Reihe von Tunnel-Techniken und Lösungen für Virtual Private Networks (VPN). Beispielsweise ist es möglich, Generic Routing Encapsulation (GRE) Tunnel aufzubauen. GRE Tunnel sind nicht verschlüsselt und daher mit wenig Aufwand konfigurierbar. Bei Verwendung von IPv4 Adressen als Tunnel-Endpunkte werden getunnelte (d.h. innere) IP Pakete mit einem GRE Header in ein (äußeres) IPv4 Paket eingekapselt. Der GRE Header ist mindestens 4 byte lang.
Auf einem VyOS Router mit der IP Adresse 192.0.2.2 kann mit den folgenden Befehlen ein GRE Tunnel zu einer Gegenstelle mit IP Adresse 203.0.113.1 aufgebaut werden:
vyos@router# set interfaces tunnel tun0 encapsulation gre
vyos@router# set interfaces tunnel tun0 source-address 192.0.2.2
vyos@router# set interfaces tunnel tun0 remote 203.0.113.1
vyos@router# set interfaces tunnel tun0 address 192.168.4.2/30
Der Tunnel hätte innerhalb von VyOS die (frei wählbare) Bezeichnung tun0
. Innerhalb des Tunnels würde in diesem Fall das IP Sub-Netz 192.168.4.0/30 verwendet werden, wobei der Router die IP Adresse 192.168.4.2 verwenden würde. Die Gegenstelle würde dementsprechend die IP Adresse 192.168.4.1 in diesem Sub-Netz verwenden. Eine Anzeige der Konfiguration des Tunnels würde liefern:
tunnel tun0 {
address 192.168.4.2/30
encapsulation gre
source-address 192.0.2.2
remote 203.0.113.1
}
Network Address Translation (NAT)
Mit NAT werden IP Adressen und/oder Portnummern umgesetzt. Es gibt sowohl Source NAT, das häufig zur Anbindung privater IP Netze an das Internet verwendet wird, als auch Destination NAT, das häufig für Port-Forwarding zum Einsatz kommt. VyOS unterstützt beide Mechanismen.
Die Verwendung von Destination NAT sei an einem Beispiel veranschaulicht: In einem Router soll der gesamte HTTP Datenverkehr (d.h. TCP auf Port 80), der auf allen Netzadaptern ankommt, zu einem bestimmten Web-Server weitergeleitet werden, der die IP Adresse 192.168.0.1 verwendet. Die Weiterleitung soll für alle Ziel-IP-Adressen im Sub-Netz 192.168.2.0/24 gelten. Diese würde durch die folgenden Befehle erreicht werden, die eine Regel Nummer 100 (willkührlich gewählte Zahl) definieren:
vyos@router# set nat destination rule 100 destination address 192.168.2.0/24
vyos@router# set nat destination rule 100 destination port 80
vyos@router# set nat destination rule 100 inbound-interface any
vyos@router# set nat destination rule 100 protocol tcp
vyos@router# set nat destination rule 100 translation address 192.168.0.1
Daraus würde die folgende Konfiguration resultieren:
nat {
destination {
rule 100 {
destination {
address 192.168.2.0/24
port 80
}
inbound-interface any
protocol tcp
translation {
address 192.168.0.1
}
}
}
}
System-Konfiguration
Nachfolgend ist die Ausgangskonfiguration eines VyOS Routers abgedruckt, die sich
zum Beispiel im Configuration Mode mit show configuration
anzeigen lässt. Die VM hat vier
Ethernet-Netzadapter (eth0
, eth1
, eth2
, eth3
) mit entsprechenden MAC Adressen sowie eine lokale
Loopback-Schnittstelle (lo
). Die MAC Adressen sind dabei in der Boot-Konfiguration gespeichert:
interfaces {
ethernet eth0 {
hw-id 08:00:27:ab:c0:3e
}
ethernet eth1 {
hw-id 08:00:27:ab:c0:4e
}
ethernet eth2 {
hw-id 08:00:27:ab:c0:5e
}
ethernet eth3 {
hw-id 08:00:27:ab:c0:6e
}
loopback lo {
}
}
system {
config-management {
commit-revisions 100
}
conntrack {
modules {
ftp
h323
nfs
pptp
sip
sqlnet
tftp
}
}
console {
device ttyS0 {
speed 115200
}
}
host-name vyos
login {
user vyos {
authentication {
encrypted-password ****************
plaintext-password ""
}
}
}
ntp {
server time1.vyos.net {
}
server time2.vyos.net {
}
server time3.vyos.net {
}
}
option {
keyboard-layout de
}
syslog {
global {
facility all {
level info
}
facility protocols {
level debug
}
}
}
}