BIRD2 BGP-Konfiguration auf einem Linux VPS
Installieren Sie BIRD2 auf Debian 12 oder Ubuntu 24.04 und richten Sie eine BGP-Session ein, um Ihre eigenen IP-Prefixe zu annoncieren. Dual-Stack, Export-Filter, persistente Dummy-Interfaces, nftables-Regeln und birdc-Verifizierung.
BIRD ist der Routing-Daemon, der von CZ.NIC gepflegt wird. Version 2 vereinte IPv4 und IPv6 in einem einzigen Daemon, ersetzte die getrennte BIRD/BIRD6-Architektur aus 1.x und brachte eine leistungsstarke Filtersprache mit. Diese Anleitung behandelt die Installation von BIRD2 auf einem Linux VPS, die Konfiguration einer BGP-Session mit Ihrem Upstream-Provider, das Annoncieren Ihrer IP-Prefixe und die Verifizierung des gesamten Setups.
Alle Beispiele sind Dual-Stack (IPv4 + IPv6). Ersetzen Sie die Platzhalter-ASNs, IPs und Prefixe durchgehend mit Ihren eigenen Werten.
Was brauchen Sie vor der BIRD2-BGP-Konfiguration?
Bevor Sie bird.conf bearbeiten, brauchen Sie eine ASN, zugewiesenen IP-Adressraum und einen Provider, der BGP-Sessions auf Ihrem VPS anbietet. Ohne alle drei hat BIRD2 nichts zu annoncieren und niemanden zum Peering.
Sammeln Sie diese Informationen von Ihrem Provider oder aus Ihrer RIR-Allokation:
| Element | Beispielwert | Woher |
|---|---|---|
| Ihre ASN | AS65400 | RIPE NCC, ARIN oder Ihr LIR |
| Ihr IPv4-Prefix | 203.0.113.0/24 | RIR-Allokation oder PA-Assignment vom Provider |
| Ihr IPv6-Prefix | 2001:db8:1000::/48 | RIR-Allokation oder PA-Assignment vom Provider |
| Upstream-ASN | AS64496 | BGP-Session-Details des Providers |
| Upstream-Peer IPv4 | 198.51.100.1 | BGP-Session-Details des Providers |
| Upstream-Peer IPv6 | 2001:db8::1 | BGP-Session-Details des Providers |
| Ihre Peering-IPv4 | 198.51.100.2 | BGP-Session-Details des Providers |
| Ihre Peering-IPv6 | 2001:db8::2 | BGP-Session-Details des Providers |
| MD5-Passwort | (Shared Secret) | Mit dem Provider vereinbart |
Sie brauchen ausserdem ROA-Records (Route Origin Authorization), die fuer Ihre Prefixe publiziert sind, bevor Ihre Routen die RPKI-Validierung bei Downstream-Netzwerken bestehen. Siehe fuer dieses Setup.
Stellen Sie sicher, dass Ihr Provider Ihre Prefixe in seine IRR-Filter aufgenommen hat. Ohne das werden Ihre Announcements gefiltert, selbst wenn die BGP-Session aufgebaut wird.
Ein VPS mit mindestens 1 GB RAM reicht fuer BIRD2 mit einer Full Table (ueber 1 Million IPv4-Routen). Wenn Sie nur eine Default-Route von Ihrem Upstream akzeptieren, bleibt der Speicherverbrauch unter 100 MB.
Wie installieren Sie BIRD2 auf Debian 12 und Ubuntu 24.04?
BIRD2 ist in den Standard-Repositories beider Distributionen verfuegbar. Debian 12 liefert Version 2.0.12, Ubuntu 24.04 liefert 2.14. Beide funktionieren fuer einfaches BGP, aber das offizielle CZ.NIC-Repository stellt BIRD 2.18 (veroeffentlicht Januar 2026) bereit, mit BGP Dynamic Unnumbered Support, Performance-Verbesserungen und aktuellen Bugfixes. Verwenden Sie das CZ.NIC-Repo fuer Produktionsumgebungen.
Hinweis: CZ.NIC veroeffentlicht BIRD2-Pakete unter dem Projektnamen bird2. Verwechseln Sie es nicht mit dem Projekt bird (das nur Debian abdeckt) oder bird3 (BIRD 3.x).
Installation aus dem CZ.NIC-Repository (empfohlen)
Fuegen Sie das offizielle Repository hinzu und installieren Sie:
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates wget
Importieren Sie den CZ.NIC-GPG-Schluessel:
sudo wget -O /usr/share/keyrings/cznic-labs-pkg.gpg https://pkg.labs.nic.cz/gpg
Fuegen Sie das Repository hinzu. Auf Debian 12:
echo "deb [signed-by=/usr/share/keyrings/cznic-labs-pkg.gpg] https://pkg.labs.nic.cz/bird2 bookworm main" | sudo tee /etc/apt/sources.list.d/cznic-labs-bird.list
Auf Ubuntu 24.04:
echo "deb [signed-by=/usr/share/keyrings/cznic-labs-pkg.gpg] https://pkg.labs.nic.cz/bird2 noble main" | sudo tee /etc/apt/sources.list.d/cznic-labs-bird.list
Installieren Sie BIRD2:
sudo apt-get update
sudo apt-get -y install bird2
Installation aus den Standard-Repositories
Wenn Sie das Distributionspaket bevorzugen:
sudo apt-get update
sudo apt-get -y install bird2
Installation verifizieren
bird --version
Erwartete Ausgabe (CZ.NIC-Repo):
BIRD version 2.18
Pruefen Sie, ob der Dienst laeuft:
sudo systemctl status bird
BIRD startet nach der Installation automatisch. Die Standardkonfiguration unter /etc/bird/bird.conf ist ein Geruest. Sie werden sie im naechsten Abschnitt vollstaendig ersetzen.
Wie ist bird.conf fuer BGP aufgebaut?
Eine BGP-taugliche bird.conf besteht aus fuenf Bloecken: globale Einstellungen und vier Protokollabschnitte (device, direct, kernel, bgp). Jedes Protokoll laeuft unabhaengig und kommuniziert ueber Routing-Tabellen.
Hier ist die vollstaendige bird.conf fuer ein Dual-Stack-BGP-Setup. Lesen Sie sie zuerst durch; die folgenden Abschnitte erklaeren jeden Block.
sudo cp /etc/bird/bird.conf /etc/bird/bird.conf.bak
sudo tee /etc/bird/bird.conf > /dev/null << 'BIRDCONF'
# /etc/bird/bird.conf - BIRD2 BGP configuration
# Replace all placeholder values with your own
log syslog all;
router id 198.51.100.2;
# Watch interface state changes
protocol device {
scan time 10;
}
# Import connected routes (needed for next-hop resolution)
protocol direct {
ipv4;
ipv6;
interface "dummy0";
interface "eth0";
}
# Sync BIRD routes to kernel routing table
protocol kernel {
ipv4 {
export all;
import all;
};
learn;
scan time 15;
merge paths on;
}
protocol kernel {
ipv6 {
export all;
import all;
};
learn;
scan time 15;
merge paths on;
}
# Define your prefixes
define OWN_V4_PREFIX = 203.0.113.0/24;
define OWN_V6_PREFIX = 2001:db8:1000::/48;
# Export filter: only announce your own prefixes
filter export_bgp_v4 {
if net = OWN_V4_PREFIX then accept;
reject;
}
filter export_bgp_v6 {
if net = OWN_V6_PREFIX then accept;
reject;
}
# Static routes for prefix origination (point to dummy0)
protocol static static_v4 {
ipv4;
route 203.0.113.0/24 via "dummy0";
}
protocol static static_v6 {
ipv6;
route 2001:db8:1000::/48 via "dummy0";
}
# BGP session with upstream provider
protocol bgp upstream1 {
description "Upstream Provider";
local 198.51.100.2 as 65400;
neighbor 198.51.100.1 as 64496;
source address 198.51.100.2;
hold time 90;
keepalive time 30;
password "your-md5-secret";
ipv4 {
import all;
export filter export_bgp_v4;
next hop self;
};
ipv6 {
import all;
export filter export_bgp_v6;
next hop self;
};
}
BIRDCONF
Setzen Sie die Berechtigungen der Konfigurationsdatei. Nur root und der Benutzer bird brauchen Zugriff:
sudo chown root:bird /etc/bird/bird.conf
sudo chmod 640 /etc/bird/bird.conf
Berechtigungen ueberpruefen:
ls -la /etc/bird/bird.conf
Erwartete Ausgabe:
-rw-r----- 1 root bird 1247 Mar 19 12:00 /etc/bird/bird.conf
Globale Einstellungen
log syslog all;
router id 198.51.100.2;
router id muss eine global eindeutige IPv4-Adresse sein. Verwenden Sie eine Ihrer zugewiesenen IPs. BIRD kann sie automatisch von Interfaces erkennen, aber eine explizite Angabe ist besser.
log syslog all sendet alle Log-Nachrichten an das Systemjournal. Lesen Sie sie mit journalctl -u bird -f. Wenn Sie bei der Fehlersuche fuer ein bestimmtes Protokoll ausfuehrlichere Ausgaben brauchen, fuegen Sie temporaer debug protocols all; hinzu. Entfernen Sie es, sobald die Session funktioniert. Debug-Level-Logging erzeugt hohes Volumen und kann Ihren Journal-Speicher fuellen.
Protocol device
protocol device {
scan time 10;
}
Ueberwacht Interface-Zustandsaenderungen alle 10 Sekunden. Erforderlich. Ohne diesen Block weiss BIRD nicht, wann Interfaces hoch- oder herunterfahren.
Protocol direct
protocol direct {
ipv4;
ipv6;
interface "dummy0";
interface "eth0";
}
Importiert Connected Routes von den aufgelisteten Interfaces. BIRD braucht diese fuer die Next-Hop-Aufloesung. Listen Sie nur die Interfaces auf, die an Ihrem BGP-Setup beteiligt sind.
Protocol kernel
Zwei Kernel-Protokollbloecke werden benoetigt: einer fuer IPv4, einer fuer IPv6. Jeder synchronisiert seine Adressfamilie zwischen BIRDs Routing-Tabelle und der Linux-Kernel-Tabelle.
merge paths on aktiviert ECMP, wenn Sie mehrere Upstreams haben. learn importiert bestehende Kernel-Routen in BIRD.
Was macht der Protocol-BGP-Block?
Der protocol bgp-Block definiert eine Peering-Session mit einem Neighbor. Er legt fest, wer Sie sind (local ... as), mit wem Sie peeren (neighbor ... as), die Authentifizierung (password) und welche Routen ausgetauscht werden (Channel-Bloecke).
Wichtige Direktiven:
| Direktive | Zweck |
|---|---|
local <ip> as <ASN> |
Ihre Peering-IP und ASN |
neighbor <ip> as <ASN> |
Peering-IP und ASN des Upstreams |
source address <ip> |
Quell-IP fuer die TCP-Verbindung |
hold time 90 |
Sekunden bis zur Peer-Toterklaerung (3x Keepalive) |
keepalive time 30 |
Intervall zwischen Keepalive-Nachrichten |
password "..." |
MD5-Authentifizierung (RFC 2385) |
MD5-Authentifizierung schuetzt die BGP-Session gegen gefaelschte TCP-Resets und Injection-Angriffe. Beide Seiten muessen dasselbe Passwort konfigurieren. Fragen Sie Ihren Provider nach dem Shared Secret.
Wie konfigurieren Sie Dual-Stack-IPv4- und IPv6-Channels?
BIRD2 behandelt IPv4 und IPv6 als separate Channels innerhalb desselben Protokollblocks. Jeder Channel hat seine eigene Import/Export-Policy:
ipv4 {
import all;
export filter export_bgp_v4;
next hop self;
};
ipv6 {
import all;
export filter export_bgp_v6;
next hop self;
};
import all akzeptiert alle Routen vom Upstream. In Produktionsumgebungen sollten Sie auch Imports filtern. Siehe fuer Import-Filter-Beispiele.
next hop self schreibt das Next-Hop-Attribut auf Ihre Peering-IP um. Erforderlich, wenn der Upstream erwartet, dass Traffic ueber Ihre Adresse laeuft -- das ist das Standardsetup auf einem VPS.
Wenn Ihr Provider separate BGP-Sessions fuer IPv4 und IPv6 betreibt (unterschiedliche Neighbor-IPs pro Adressfamilie), teilen Sie sie stattdessen in zwei protocol bgp-Bloecke auf.
Wie schreiben Sie Export-Filter, die nur Ihre Prefixe annoncieren?
Export-Filter steuern, welche Routen BIRD an den Upstream sendet. Ein falsch konfigurierter Export-Filter kann Routen leaken, die Ihnen nicht gehoeren. Das fuehrt dazu, dass Ihre Session beendet wird, und moeglicherweise erhalten Sie einen Anruf vom NOC Ihres Upstreams.
Der Filter in der obigen Konfiguration verwendet einen einfachen Prefix-Match:
define OWN_V4_PREFIX = 203.0.113.0/24;
filter export_bgp_v4 {
if net = OWN_V4_PREFIX then accept;
reject;
}
Dieser akzeptiert nur das exakte /24. Alles andere wird abgelehnt. Das reject am Ende ist das Default Deny.
Fuer mehrere Prefixe verwenden Sie ein Set:
define OWN_V4_PREFIXES = [ 203.0.113.0/24, 198.51.100.0/24 ];
filter export_bgp_v4 {
if net ~ OWN_V4_PREFIXES then accept;
reject;
}
Der Operator ~ gleicht gegen ein Prefix-Set ab. Er unterstuetzt auch Range-Notation:
define OWN_V4_PREFIXES = [ 203.0.113.0/24{24,24} ];
{24,24} beschraenkt den Match auf exakt /24. Verwenden Sie {24,28}, um auch Deaggregation bis /28 zuzulassen, falls Sie fuer Traffic Engineering More-Specifics annoncieren muessen.
Fuer IPv6 gilt dasselbe Muster:
define OWN_V6_PREFIXES = [ 2001:db8:1000::/48{48,48} ];
filter export_bgp_v6 {
if net ~ OWN_V6_PREFIXES then accept;
reject;
}
Halten Sie Export-Filter immer so eng wie moeglich. Annoncieren Sie nur, was Ihnen gehoert, mit den exakten Prefixlaengen, die Sie beabsichtigen. Ein fehlendes reject am Ende Ihres Filters fuehrt dazu, dass BIRD die Standardaktion des Channels verwendet, die accept sein kann. Beenden Sie Filter immer mit einem expliziten reject.
Sie koennen Ihren Filter testen, ohne ihn anzuwenden:
sudo birdc eval '203.0.113.0/24 ~ [ 203.0.113.0/24 ]'
Dies gibt TRUE oder FALSE zurueck und hilft bei der Fehlersuche in der Filterlogik vor einem Config-Reload.
Wie erstellen Sie ein persistentes Dummy-Interface fuer Prefix Origination?
BGP annonciert Prefixe, die in der Routing-Tabelle existieren. Sie brauchen ein Interface mit Ihrem Prefix, damit BIRD die Route originieren kann. Ein Dummy-Interface erfuellt diesen Zweck: Es ist immer up, hat keinen physischen Link und ueberlebt Neustarts, wenn es ueber systemd-networkd konfiguriert wird.
Fluechtige ip link add-Befehle gehen beim Neustart verloren. Verwenden Sie stattdessen systemd-networkd.
.netdev-Datei erstellen
sudo tee /etc/systemd/network/10-dummy0.netdev > /dev/null << 'EOF'
[NetDev]
Name=dummy0
Kind=dummy
EOF
.network-Datei erstellen
sudo tee /etc/systemd/network/10-dummy0.network > /dev/null << 'EOF'
[Match]
Name=dummy0
[Network]
Address=203.0.113.1/32
Address=2001:db8:1000::1/128
EOF
Weisen Sie dem Dummy-Interface eine einzelne /32 (oder /128 fuer IPv6) aus Ihrem zugewiesenen Prefix zu. Diese Adresse muss nicht von aussen erreichbar sein. Sie existiert nur, damit BIRD eine Connected Route fuer das Prefix hat.
Anwenden und verifizieren
sudo systemctl restart systemd-networkd
Warten Sie einige Sekunden und pruefen Sie dann:
ip addr show dummy0
Erwartete Ausgabe:
3: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
inet 203.0.113.1/32 scope global dummy0
valid_lft forever preferred_lft forever
inet6 2001:db8:1000::1/128 scope global
valid_lft forever preferred_lft forever
Der Zustand state UNKNOWN bei einem Dummy-Interface ist normal. Er bedeutet, dass die Link-Schicht keinen physischen Carrier zu ueberwachen hat, aber das Interface ist UP und leitet weiter. Die MAC-Adresse wird von systemd-networkd zufaellig generiert und wird auf Ihrem System anders sein.
Wenn Sie ifupdown statt systemd-networkd verwenden (pruefen Sie mit networkctl status), muessen Sie systemd-networkd moeglicherweise zuerst aktivieren:
sudo systemctl enable --now systemd-networkd
Verifizieren Sie, dass die Dateien fuer den naechsten Neustart vorhanden sind:
ls -la /etc/systemd/network/10-dummy0.*
-rw-r--r-- 1 root root 42 Mar 19 12:00 /etc/systemd/network/10-dummy0.netdev
-rw-r--r-- 1 root root 89 Mar 19 12:00 /etc/systemd/network/10-dummy0.network
Wie sichern Sie BGP mit nftables-Firewall-Regeln ab?
BGP laeuft auf TCP-Port 179. Ohne Firewall-Regeln kann jeder Host im Internet versuchen, eine BGP-Session mit Ihrem Router aufzubauen. Automatisierte Scanner finden einen offenen Port 179 innerhalb von Stunden, nachdem ein VPS online geht. Beschraenken Sie Port 179 auf Ihre Peer-IPs.
nftables ist unter Ubuntu 24.04 moeglicherweise nicht standardmaessig installiert. Installieren Sie es zuerst:
sudo apt-get -y install nftables
nftables-Regelsatz erstellen
sudo tee /etc/nftables.d/bgp.conf > /dev/null << 'EOF'
table inet bgp_filter {
set bgp_peers_v4 {
type ipv4_addr
elements = { 198.51.100.1 }
}
set bgp_peers_v6 {
type ipv6_addr
elements = { 2001:db8::1 }
}
chain input {
type filter hook input priority 0; policy accept;
# Allow BGP from known peers only
tcp dport 179 ip saddr @bgp_peers_v4 accept
tcp dport 179 ip6 saddr @bgp_peers_v6 accept
# Drop BGP from everyone else
tcp dport 179 drop
}
}
EOF
Fuegen Sie weitere Peer-IPs zu den Sets hinzu, wenn Sie Upstreams ergaenzen. Benannte Sets ermoeglichen es Ihnen, Peer-Listen zu aktualisieren, ohne Regeln umzuschreiben.
Integration mit Ihrer bestehenden nftables-Konfiguration
Wenn Sie bereits /etc/nftables.conf haben, binden Sie die BGP-Regeln ein:
echo 'include "/etc/nftables.d/bgp.conf"' | sudo tee -a /etc/nftables.conf
Wenn Sie nftables noch nicht eingerichtet haben, erstellen Sie das Verzeichnis und laden Sie die Konfiguration:
sudo mkdir -p /etc/nftables.d
sudo systemctl enable --now nftables
enable --now startet nftables sofort und stellt sicher, dass es bei jedem Boot geladen wird.
Wenden Sie die Regeln an:
sudo nft -f /etc/nftables.d/bgp.conf
Regeln verifizieren
sudo nft list table inet bgp_filter
Erwartete Ausgabe:
table inet bgp_filter {
set bgp_peers_v4 {
type ipv4_addr
elements = { 198.51.100.1 }
}
set bgp_peers_v6 {
type ipv6_addr
elements = { 2001:db8::1 }
}
chain input {
type filter hook input priority filter; policy accept;
tcp dport 179 ip saddr @bgp_peers_v4 accept
tcp dport 179 ip6 saddr @bgp_peers_v6 accept
tcp dport 179 drop
}
}
nft list normalisiert priority 0 zu priority filter und entfernt Kommentare. Das ist erwartetes Verhalten.
Testen Sie, ob die Regel funktioniert, indem Sie den Verbindungsstatus pruefen. Vom VPS aus:
sudo nft list ruleset | grep -c "179"
Dies sollte eine Zahl zurueckgeben, die der Anzahl Ihrer Port-179-Regeln entspricht.
Stellen Sie ausserdem sicher, dass BGP-Traffic zwischen Ihnen und Ihrem Peer nicht blockiert wird. Die obigen Regeln betreffen nur eingehende Verbindungen. BIRD initiiert ausgehende Verbindungen zum Peer, die vom established/related Conntrack-Eintrag behandelt werden. Wenn Sie eine restriktive Outbound-Policy haben, fuegen Sie hinzu:
sudo nft add rule inet bgp_filter input ct state established,related accept
Das sollte bereits in Ihrem Basis-Firewall-Regelsatz enthalten sein. Wenn nicht, fuegen Sie es vor den BGP-Regeln hinzu.
Wie wenden Sie die BIRD2-Konfiguration an?
Bevor Sie eine neue Konfiguration laden, validieren Sie sie:
sudo birdc configure check
Erwartete Ausgabe:
BIRD 2.18 ready.
Reading configuration from /etc/bird/bird.conf
Configuration OK
Wenn Syntaxfehler vorhanden sind, meldet BIRD die Zeilennummer und das Problem. Beheben Sie den Fehler und pruefen Sie erneut.
Wenden Sie die Konfiguration an:
sudo birdc configure
BIRD 2.18 ready.
Reading configuration from /etc/bird/bird.conf
Reconfigured
Moeglicherweise sehen Sie Reconfiguration in progress statt Reconfigured, wenn BIRD noch Protokollaenderungen verarbeitet (z.B. den Aufbau einer neuen BGP-Session). Beides ist normal.
BIRD wendet die neue Konfiguration ohne Neustart an. Bestehende Sessions fuehren nach Moeglichkeit eine Soft Reconfiguration durch. Wenn Sie die Neighbor-IP oder die lokale AS geaendert haben, startet BIRD das betroffene Protokoll automatisch neu.
Fuer Konfigurationsaenderungen, die laufende Sessions nicht unterbrechen sollen (Filteraenderungen, statische Routenergaenzungen), verwenden Sie:
sudo birdc reload upstream1
Dies wendet Import/Export-Filter erneut auf bestehende Routen an, ohne die TCP-Session abzubauen.
Wie verifizieren Sie Ihre BGP-Session und Route-Announcements?
Nach dem Anwenden der Konfiguration verwenden Sie birdc, um zu pruefen, ob die Session aufgebaut ist und Routen annonciert werden. Diese Befehle sind Ihre wichtigsten Debugging-Werkzeuge.
| Befehl | Was er zeigt | Wann verwenden |
|---|---|---|
show protocols |
Protokollstatus-Uebersicht (Established, Active, etc.) | Erste Pruefung nach Konfigurationsaenderung |
show protocols all upstream1 |
Vollstaendige Session-Details, Zaehler, Timer | Debugging einer bestimmten Session |
show route |
Alle Routen in BIRDs Tabelle | Empfangene und statische Routen verifizieren |
show route export upstream1 |
Routen, die an den Upstream gesendet werden | Bestaetigen, dass Ihre Prefixe annonciert werden |
show route for 203.0.113.0/24 |
Beste Route fuer ein bestimmtes Prefix | Pfadauswahl nachverfolgen |
show route protocol static_v4 |
Routen aus einem bestimmten Protokoll | Statische Routen verifizieren |
Session-Status pruefen
sudo birdc show protocols
Erwartete Ausgabe im funktionierenden Zustand:
BIRD 2.18 ready.
Name Proto Table State Since Info
device1 Device --- up 12:00:00.000
direct1 Direct --- up 12:00:00.000
kernel1 Kernel master4 up 12:00:00.000
kernel2 Kernel master6 up 12:00:00.000
static_v4 Static master4 up 12:00:00.000
static_v6 Static master6 up 12:00:00.000
upstream1 BGP --- up 12:00:05.000 Established
Der Status Established bedeutet, dass die BGP-Session aktiv ist und Routen ausgetauscht werden koennen. Alles andere deutet auf ein Problem hin.
Exportierte Routen pruefen
sudo birdc show route export upstream1
BIRD 2.18 ready.
Table master4:
203.0.113.0/24 unicast [static_v4 12:00:00.000] * (200)
dev dummy0
Table master6:
2001:db8:1000::/48 unicast [static_v6 12:00:00.000] * (200)
dev dummy0
Ihre IPv4- und IPv6-Prefixe sollten hier beide erscheinen. Wenn ein Prefix fehlt, lehnt der Export-Filter es ab.
Vollstaendige Session-Details pruefen
sudo birdc show protocols all upstream1
Achten Sie auf die Zeile Routes::
Routes: 2 imported, 0 filtered, 2 exported, 0 preferred
Der Wert exported sollte der Anzahl der Prefixe entsprechen, die Sie annoncieren moechten.
Von aussen verifizieren
Verwenden Sie ein oeffentliches Looking Glass, um zu bestaetigen, dass Ihr Prefix im Internet sichtbar ist. NLNOG Looking Glass oder PeeringDB koennen helfen. Suchen Sie nach Ihrem Prefix und verifizieren Sie:
- Die Origin-AS stimmt mit Ihrer ueberein
- Der AS-Path fuehrt ueber Ihren Upstream
- Kein RPKI-Invalid-Status erscheint
Pruefen Sie auch die Kernel-Routing-Tabelle:
ip route show | grep 203.0.113
ip -6 route show | grep 2001:db8:1000
Sie sollten Routen sehen, die auf das dummy0-Interface zeigen.
Wie beheben Sie haeufige BIRD2-BGP-Probleme?
Die meisten BGP-Probleme fallen in wenige Kategorien. Pruefen Sie diese der Reihe nach.
BGP-Session-Statusreferenz
| Status | Bedeutung | Was pruefen |
|---|---|---|
| Idle | BIRD versucht keine Verbindung | Konfigurationsfehler, Protokoll deaktiviert |
| Connect | TCP-Verbindung wird aufgebaut | Firewall blockiert Port 179, falsche Neighbor-IP |
| Active | TCP-Verbindung fehlgeschlagen, neuer Versuch | Peer nicht erreichbar, Firewall, falsche Source-Adresse |
| OpenSent | TCP verbunden, wartet auf OPEN-Antwort | MD5-Mismatch, falsche ASN auf Gegenseite |
| OpenConfirm | OPEN empfangen, wartet auf KEEPALIVE | Selten sichtbar, geht normalerweise schnell weiter |
| Established | Session aktiv, Routenaustausch laeuft | Funktioniert |
Session haengt in Connect oder Active
Das bedeutet, TCP kann Port 179 auf dem Peer nicht erreichen. Pruefen Sie:
# Can you reach the peer at all?
ping -c 3 198.51.100.1
# Is port 179 open on the peer?
nc -zv 198.51.100.1 179
# Are your nftables rules blocking outbound?
sudo nft list ruleset | grep 179
# Check BIRD logs
journalctl -u bird --since "5 minutes ago" --no-pager
Haeufige Ursachen: falsche source address im BGP-Block, der Peer hat seine Seite noch nicht konfiguriert, oder Ihre Firewall blockiert ausgehende Verbindungen.
Session haengt in OpenSent
Die TCP-Verbindung funktioniert, aber die BGP-OPEN-Nachricht wird abgelehnt. Das ist fast immer ein MD5-Passwort-Mismatch. Pruefen Sie:
- Ihr
passwordin bird.conf stimmt exakt mit dem ueberein, was der Provider Ihnen gegeben hat (Gross-/Kleinschreibung beachten, auf Leerzeichen am Ende achten) - Beide Seiten stimmen bei der ASN ueberein
Pruefen Sie die Logs fuer Details:
journalctl -u bird | grep -i "error\|md5\|password"
Prefix erscheint nicht in show route export
Ihr Prefix existiert in BIRDs Tabelle, aber der Export-Filter akzeptiert es nicht. Debuggen Sie den Filter:
sudo birdc show route 203.0.113.0/24 all
Pruefen Sie die Route Source. Wenn dort [device1] oder [direct1] statt [static_v4] steht, ist die statische Route nicht korrekt konfiguriert. Der Export-Filter matched auf die Route, daher muss sie vom richtigen Protokoll stammen.
sudo birdc show route noexport upstream1
Dies zeigt Routen, die der Filter explizit abgelehnt hat. Wenn Ihr Prefix hier erscheint, hat die Filterlogik einen Fehler.
Prefix annonciert, aber nicht auf Looking Glass sichtbar
Ihr Export funktioniert, aber die Route propagiert nicht. Moegliche Ursachen:
- Kein ROA-Record: Ihr Upstream oder dessen Peers filtern RPKI-invalide Routen. Publizieren Sie zuerst ROA-Records
- IRR-Filtering: Ihr Upstream filtert anhand von IRR-Objekten (RIPE DB, RADB). Erstellen oder aktualisieren Sie Ihre route/route6-Objekte
- Max-Prefix-Limit: Ihr Upstream hat moeglicherweise ein Prefix-Limit konfiguriert. Kontaktieren Sie ihn, wenn Sie daran stossen
- Propagation Delay: BGP-Konvergenz dauert Minuten. Warten Sie 5-10 Minuten und pruefen Sie erneut
Logs lesen
BIRD loggt in das Systemjournal. Fuer Echtzeit-Fehlersuche:
journalctl -u bird -f
Fuer Ereignisse der letzten Stunde:
journalctl -u bird --since "1 hour ago" --no-pager
Suchen Sie nach Zeilen mit Error, BGP, session oder Received. Sie sagen Ihnen genau, was BIRD tut und was schiefgelaufen ist.
BIRD2 vs. BIRD 1.x: Migrationshinweise
Wenn Sie von BIRD 1.x migrieren, sind die wesentlichen Unterschiede:
- Einzelner Daemon: BIRD2 ersetzt sowohl
birdals auchbird6durch einen einzigen Prozess - Channel-Syntax: IPv4 und IPv6 werden als Channels innerhalb von Protokollbloecken konfiguriert, nicht als separate Protokolle
- Filter-Syntax: Weitgehend kompatibel, aber einige Funktionen haben neue Namen. Pruefen Sie die BIRD2-Dokumentation fuer die vollstaendige Filterreferenz
- Konfigurationsdatei: Standardpfad geaendert von
/etc/bird/bird.confund/etc/bird/bird6.confzu einer einzigen/etc/bird/bird.conf - birdc-Socket: Ein einzelner Socket unter
/run/bird/bird.ctlstatt separater IPv4/IPv6-Sockets
Naechste Schritte
Mit Ihrer aufgebauten BGP-Session und annoncierten Prefixen gibt es einige Dinge, die Sie als Naechstes konfigurieren sollten:
- RPKI-Validierung: Richten Sie RTR ein, um eingehende Routen gegen ROA-Daten zu validieren
- Import-Filter: Filtern Sie eingehende Routen, um Route Leaks und Hijacks zu verhindern
- Mehrere Upstreams: Fuegen Sie einen zweiten
protocol bgp-Block fuer Redundanz hinzu. Verwenden Siepreference, um Primary/Backup festzulegen - BFD: Aktivieren Sie Bidirectional Forwarding Detection fuer Sub-Sekunden-Failover zwischen Upstreams
- Monitoring: Exportieren Sie BIRD-Metriken nach Prometheus mit bird_exporter
Fuer den alternativen Routing-Daemon siehe . Fuer die vollstaendige BYOIP-Reise beginnen Sie beim BYOIP-Leitfaden.
Copyright 2026 Virtua.Cloud. Alle Rechte vorbehalten. Dieser Inhalt ist ein Originalwerk des Virtua.Cloud-Teams. Vervielfaeltigung, Wiederveroeffentlichung oder Weiterverbreitung ohne schriftliche Genehmigung ist untersagt.
Bereit, es selbst auszuprobieren?
Stellen Sie Ihren eigenen Server in Sekunden bereit. Linux, Windows oder FreeBSD.
VPS-Angebote ansehen