Voraussetzungen
Bevor Sie beginnen, benötigen Sie:
- Ein VPS Linux (Debian 12 oder Ubuntu 22.04/24.04 empfohlen) mit Root-Zugriff
- Ihre eigene ASN (Autonome Systemnummer): privat (64512–65534) oder öffentlich (RIPE NCC)
- Ihr eigenes IP-Block (/24 IPv4 mindestens oder /48 IPv6)
- Die BGP-Sitzungsinformationen, die von OuiHeberg bereitgestellt werden: IP des Nachbarn, entfernte ASN, MD5-Passwort (optional)
- Auf einem VPS OuiHeberg werden die IP und der geroutete Block automatisch von cloud-init beim Provisioning zugewiesen (keine manuelle Netzwerkkonfiguration erforderlich)
Hinweis: Um eine öffentliche ASN und einen portablen IP-Block zu erhalten, müssen Sie dem RIPE NCC beitreten oder über einen LIR (Local Internet Registry) gehen. Für private oder Laboranwendungen reicht eine private ASN (64512–65534) aus.
1. FRRouting (FRR) installieren
Verwenden Sie nicht die Distro-Pakete: Die Version in den Debian/Ubuntu-Repositories ist oft veraltet (FRR 8.x vs. aktuelles 10.x).
Verwenden Sie das offizielle FRRouting-Repository:
# Fügen Sie den offiziellen FRR GPG-Schlüssel hinzu
curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null
# Legen Sie die Zielversion fest (frr-stable = letzte stabile)
FRRVER="frr-stable"
# Fügen Sie das APT-Repository hinzu
echo "deb [signed-by=/usr/share/keyrings/frrouting.gpg] https://deb.frrouting.org/frr $(lsb_release -s -c) $FRRVER" | \
sudo tee /etc/apt/sources.list.d/frr.list
# Installieren Sie FRR und die Python-Tools
sudo apt install -y curl lsb-release ca-certificates gnupg
sudo apt update && sudo apt install -y frr frr-pythontools
Überprüfen Sie die Installation:
vtysh --version
# Erwartet: frr version 10.x.x
2. BGP-Daemon aktivieren
Standardmäßig sind alle FRR-Daemons deaktiviert. Aktivieren Sie nur bgpd:
sudo nano /etc/frr/daemons
Ändern Sie die Zeile:
bgpd=yes
Aktivieren und starten Sie FRR:
sudo systemctl enable frr
sudo systemctl restart frr
sudo systemctl status frr # Überprüfen: aktiv (läuft)
3. BGP-Sitzung in vtysh konfigurieren
vtysh ist die einheitliche Konfigurationsshell von FRRouting. Sie funktioniert wie eine CLI von Cisco/Juniper.
Betreten Sie vtysh:
sudo vtysh
Vollständige Konfiguration
! In den Konfigurationsmodus wechseln
configure terminal
! Deklarieren Sie Ihre ASN
router bgp 65001
! Router-ID = Haupt-IP Ihres VPS (von cloud-init zugewiesen)
bgp router-id 203.0.113.1
! Deaktivieren Sie den Standard-Routen-Austausch (Sicherheit)
no bgp default ipv4-unicast
! Deklarieren Sie den Nachbarn OuiHeberg (AS208226)
neighbor 192.0.2.1 remote-as 208226
neighbor 192.0.2.1 description OuiHeberg-upstream
! GTSM: TTL-Sicherheit, schützt vor Off-Segment-Angriffen
neighbor 192.0.2.1 ttl-security hops 1
! MD5-Authentifizierung (falls von OuiHeberg bereitgestellt)
neighbor 192.0.2.1 password IhrMD5Passwort
! Address-family IPv4
address-family ipv4 unicast
! Aktivieren Sie den Nachbarn in IPv4
neighbor 192.0.2.1 activate
! Ankündigen Sie Ihren Block
network 203.0.113.0/24
! Wenden Sie die Filter an (unten definiert)
neighbor 192.0.2.1 prefix-list ALLOW-OUT out
neighbor 192.0.2.1 prefix-list BOGON-IN in
! Begrenzen Sie die empfangenen Routen (Schutz vor Route Leaks)
neighbor 192.0.2.1 maximum-prefix 100
exit-address-family
exit
! Ausgehende Prefix-Liste: nur Ihren eigenen Block ankündigen
ip prefix-list ALLOW-OUT seq 10 permit 203.0.113.0/24
! Eingehende Prefix-Liste: Bogons und RFC1918 ablehnen
ip prefix-list BOGON-IN seq 5 deny 0.0.0.0/0
ip prefix-list BOGON-IN seq 10 deny 10.0.0.0/8 le 32
ip prefix-list BOGON-IN seq 20 deny 172.16.0.0/12 le 32
ip prefix-list BOGON-IN seq 30 deny 192.168.0.0/16 le 32
ip prefix-list BOGON-IN seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGON-IN seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGON-IN seq 100 permit 0.0.0.0/0 le 32
! Speichern
write memory
end
Ersetzen Sie:
65001→ Ihre ASN192.0.2.1→ IP des Nachbarn OuiHeberg208226→ ASN OuiHeberg (AS208226), bereits angegeben203.0.113.0/24→ Ihr tatsächlicher IP-Block
4. IPv6-Konfiguration (optional)
Wenn Sie über einen IPv6-Block (/48 oder /56) verfügen:
configure terminal
router bgp 65001
neighbor 2001:db8::1 remote-as 208226
neighbor 2001:db8::1 description OuiHeberg-upstream-v6
neighbor 2001:db8::1 ttl-security hops 1
address-family ipv6 unicast
neighbor 2001:db8::1 activate
network 2001:db8:1::/48
neighbor 2001:db8::1 prefix-list ALLOW-OUT-V6 out
neighbor 2001:db8::1 maximum-prefix 50
exit-address-family
exit
ipv6 prefix-list ALLOW-OUT-V6 seq 10 permit 2001:db8:1::/48
write memory
end
Ersetzen Sie:
65001→ Ihre ASN2001:db8::1→ IPv6-IP des Nachbarn OuiHeberg208226→ ASN OuiHeberg (AS208226), bereits angegeben2001:db8:1::/48→ Ihr tatsächlicher IPv6-Block
5. BGP-Sitzung überprüfen
Wichtige vtysh-Befehle
! Übersicht über alle Sitzungen
show bgp summary
! Details eines bestimmten Peers
show bgp neighbors 192.0.2.1
! Angekündigte Routen
show ip bgp
! Routen, die vom Peer empfangen wurden
show ip bgp neighbors 192.0.2.1 received-routes
Erwarteter Status in show bgp summary:
| Spalte | Erwarteter Wert |
|---|---|
| State/PfxRcd | Established / Anzahl der empfangenen Routen |
| Up/Down | Dauer der Sitzung (z.B. 00:05:32) |
| MsgRcvd/Sent | steigende Zähler |
Wenn der Status Active oder Connect anzeigt → siehe Abschnitt Fehlerbehebung.
Externe Überprüfung
Verwenden Sie ein Looking Glass, um zu bestätigen, dass Ihr Präfix im öffentlichen Internet sichtbar ist:
- bgp.tools: Suchen Sie nach Ihrem Präfix oder ASN, Echtzeitansicht der BGP-Ankündigungen
6. BGP-Sitzung sichern
Firewall iptables: BGP-Port einschränken
Erlauben Sie den Port 179 (BGP) nur von der IP des Nachbarn OuiHeberg:
# Loopback erlauben
sudo iptables -A INPUT -i lo -j ACCEPT
# Erlauben Sie etablierte Sitzungen
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# BGP: nur von Nachbarn OuiHeberg
sudo iptables -A INPUT -p tcp -s 192.0.2.1 --dport 179 -j ACCEPT
# SSH (Port bei Bedarf anpassen)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Standardrichtlinie: alles andere blockieren (zuletzt anwenden)
sudo iptables -P INPUT DROP
Regeln persistent machen:
sudo apt install iptables-persistent
sudo netfilter-persistent save
Zusammenfassung der Sicherheitsmaßnahmen
| Maßnahme | FRR-Befehl | Wirkung |
|---|---|---|
| MD5-Authentifizierung | neighbor X password <secret> | Authentifiziert BGP TCP-Pakete |
| GTSM (TTL-Sicherheit) | neighbor X ttl-security hops 1 | Blockiert Pakete außerhalb des Netzwerksegments |
| Maximum-Prefix | neighbor X maximum-prefix 100 | Schützt vor massiven Route Leaks |
| Ausgehende Prefix-Liste | neighbor X prefix-list ALLOW-OUT out | Verhindert die Ankündigung nicht autorisierter Präfixe |
| Firewall-Port 179 | iptables | Blockiert illegitime BGP-Verbindungen |
7. RPKI / ROA: Ursprungsvalidierung von Routen
RPKI (Resource Public Key Infrastructure) ermöglicht die Validierung, dass die empfangenen BGP-Präfixe tatsächlich von ihrem rechtmäßigen Eigentümer angekündigt werden. Ohne RPKI akzeptiert Ihr VPS potenziell gehijackte Routen.
Im Jahr 2026 bedeutet das Nichtaktivieren von RPKI auf einer öffentlichen BGP-Sitzung, eine Tür für Routen-Hijacks offen zu lassen. Die Ausrede "es ist kompliziert" zählt nicht mehr mit einem kostenlosen öffentlichen RTR-Server.
Cloudflare RTR-Server konfigurieren
configure terminal
! Fügen Sie den Cloudflare RTR-Cache hinzu (kostenlos, öffentlich)
rpki
rpki add cache rpki.cloudflare.com 8282
rpki start
exit
! Aktivieren Sie die Validierung in BGP
router bgp 65001
address-family ipv4 unicast
bgp bestpath prefix-validate allow-invalid
exit-address-family
exit
write memory
end
Überprüfen Sie die RTR-Verbindung:
show rpki cache-connection
show rpki prefix-table
Alternative öffentliche RTR-Server:
| Anbieter | Host | Port |
|---|---|---|
| Cloudflare | rpki.cloudflare.com | 8282 |
| RIPE NCC | rtr.rpki.cloudflare.com | 8282 |
| NTT | rtr.rpki.ntt.net | 8282 |
8. Vollständige Konfiguration: frr.conf kommentiert
Nach write memory wird Ihre Konfiguration in /etc/frr/frr.conf gespeichert. Vollständiges Beispiel:
frr version 10.1.1
frr defaults traditional
hostname mein-vps-ouiheberg
log syslog informational
no ipv6 forwarding
!
ip prefix-list ALLOW-OUT seq 10 permit 203.0.113.0/24
ip prefix-list BOGON-IN seq 5 deny 0.0.0.0/0
ip prefix-list BOGON-IN seq 10 deny 10.0.0.0/8 le 32
ip prefix-list BOGON-IN seq 20 deny 172.16.0.0/12 le 32
ip prefix-list BOGON-IN seq 30 deny 192.168.0.0/16 le 32
ip prefix-list BOGON-IN seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGON-IN seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGON-IN seq 100 permit 0.0.0.0/0 le 32
!
router bgp 65001
bgp router-id 203.0.113.1
no bgp default ipv4-unicast
neighbor 192.0.2.1 remote-as 208226
neighbor 192.0.2.1 description OuiHeberg-upstream
neighbor 192.0.2.1 ttl-security hops 1
neighbor 192.0.2.1 password IhrMD5Passwort
!
address-family ipv4 unicast
neighbor 192.0.2.1 activate
neighbor 192.0.2.1 prefix-list ALLOW-OUT out
neighbor 192.0.2.1 prefix-list BOGON-IN in
neighbor 192.0.2.1 maximum-prefix 100
network 203.0.113.0/24
exit-address-family
!
9. Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Diagnose | Lösung |
|---|---|---|---|
Sitzung in Active | Nachbar nicht erreichbar oder Port 179 blockiert | telnet 192.0.2.1 179 | Firewall, Routing, IP des Nachbarn überprüfen |
Sitzung in Connect | TCP SYN gesendet, aber keine Antwort | tcpdump -i eth0 port 179 | Entfernte ASN, Quell-IP, MD5 überprüfen |
Sitzung Established, aber 0 Präfixe empfangen | Prefix-Liste zu restriktiv auf der Peer-Seite | show bgp neighbors X received-routes | BOGON-IN anpassen oder OuiHeberg kontaktieren |
| Präfix nicht auf bgp.tools sichtbar | network fehlt oder Kernelroute fehlt | show ip bgp 203.0.113.0/24 | Überprüfen, ob die IP auf der Schnittstelle existiert (ip route) |
| FRR startet nicht | bgpd=yes nicht in daemons aktiviert | journalctl -u frr | Bearbeiten Sie /etc/frr/daemons, neu starten |
| Sitzung flapping | BGP-Timer zu kurz oder instabile Verbindung | show bgp neighbors X → Hold-Zeit | Erhöhen Sie timers bgp 30 90 in vtysh |
FAQ
Was ist der Unterschied zwischen FRRouting und BIRD2 für BGP?
FRR verwendet eine CLI im Cisco/Juniper-Stil (vtysh), die für Netzwerkadministratoren vertraut ist. BIRD2 verwendet eine leistungsfähigere deklarative Konfigurationssprache für komplexe Setups (Route Reflectors, Multi-Table). Für eine einfache BGP-Sitzung auf einem VPS ist FRR schneller zu erlernen.
Kann ich FRR ohne meine eigene ASN verwenden?
Nein, für eine öffentliche BGP-Sitzung. Für ein privates Labor reicht eine private ASN (64512–65534) aus. Um Ihre eigenen Präfixe im Internet anzukündigen, ist eine öffentliche RIPE ASN erforderlich.
Verbraucht FRR viele Ressourcen auf einem VPS?
Für eine BGP-Sitzung, die nur eine Standardroute (default) empfängt: etwa 30–80 MB RAM und weniger als 1 % CPU im stabilen Betrieb. Für eine Full Table BGP (ca. 900.000 Routen): mindestens 2–4 GB RAM einplanen. Ein VPS mit 2 GB RAM reicht für die meisten Anwendungsfälle (Ankündigung von Präfixen, Empfang einer Standardroute, Failover).
Kann ich BGP auf einem VPS ohne dedizierte öffentliche IP-Adresse konfigurieren?
Nein. BGP erfordert eine direkte TCP-Konnektivität (Port 179) zwischen den beiden Peers. Ihr VPS muss eine routbare öffentliche IP und direkten Netzwerkzugang zum Nachbarn OuiHeberg haben.
Wie aktualisiere ich FRRouting, ohne die BGP-Sitzungen zu unterbrechen?
FRR unterstützt den Graceful Restart (RFC 4724). Aktivieren Sie dies mit bgp graceful-restart in der BGP-Konfiguration. Bei einem apt upgrade frr bleiben die Sitzungen während des Daemon-Neustarts (ca. 30–60 Sekunden Konvergenz) bestehen.
