Linux8. Juni 2026 10 Aufrufe

Eine BGP-Session mit FRRouting auf einem Linux-VPS einrichten

Eine BGP-Session mit FRRouting auf einem Linux-VPS einrichten

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 ASN
  • 192.0.2.1 → IP des Nachbarn OuiHeberg
  • 208226 → ASN OuiHeberg (AS208226), bereits angegeben
  • 203.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 ASN
  • 2001:db8::1 → IPv6-IP des Nachbarn OuiHeberg
  • 208226 → ASN OuiHeberg (AS208226), bereits angegeben
  • 2001: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:

SpalteErwarteter Wert
State/PfxRcdEstablished / Anzahl der empfangenen Routen
Up/DownDauer der Sitzung (z.B. 00:05:32)
MsgRcvd/Sentsteigende 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ßnahmeFRR-BefehlWirkung
MD5-Authentifizierungneighbor X password <secret>Authentifiziert BGP TCP-Pakete
GTSM (TTL-Sicherheit)neighbor X ttl-security hops 1Blockiert Pakete außerhalb des Netzwerksegments
Maximum-Prefixneighbor X maximum-prefix 100Schützt vor massiven Route Leaks
Ausgehende Prefix-Listeneighbor X prefix-list ALLOW-OUT outVerhindert die Ankündigung nicht autorisierter Präfixe
Firewall-Port 179iptablesBlockiert 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:

AnbieterHostPort
Cloudflarerpki.cloudflare.com8282
RIPE NCCrtr.rpki.cloudflare.com8282
NTTrtr.rpki.ntt.net8282

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

SymptomWahrscheinliche UrsacheDiagnoseLösung
Sitzung in ActiveNachbar nicht erreichbar oder Port 179 blockierttelnet 192.0.2.1 179Firewall, Routing, IP des Nachbarn überprüfen
Sitzung in ConnectTCP SYN gesendet, aber keine Antworttcpdump -i eth0 port 179Entfernte ASN, Quell-IP, MD5 überprüfen
Sitzung Established, aber 0 Präfixe empfangenPrefix-Liste zu restriktiv auf der Peer-Seiteshow bgp neighbors X received-routesBOGON-IN anpassen oder OuiHeberg kontaktieren
Präfix nicht auf bgp.tools sichtbarnetwork fehlt oder Kernelroute fehltshow ip bgp 203.0.113.0/24Überprüfen, ob die IP auf der Schnittstelle existiert (ip route)
FRR startet nichtbgpd=yes nicht in daemons aktiviertjournalctl -u frrBearbeiten Sie /etc/frr/daemons, neu starten
Sitzung flappingBGP-Timer zu kurz oder instabile Verbindungshow bgp neighbors X → Hold-ZeitErhö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.


Nützliche Quellen