Konfigurationsbeispiele
Fertige Bausteine für die Anbindung an die frankonIX-Routeserver,
einschließlich RPKI-Validierung. Alles, was Sie selbst eintragen müssen,
steht als <PLATZHALTER>.
Die Beispiele sind bewusst knapp gehalten: drei Routeserver, beide
Adressfamilien, RPKI, ein Prefix-Limit und ein Ausgangsfilter auf Ihre eigenen
Prefixe. Sie ersetzen keine Prüfung gegen Ihre Softwareversion – gerade
bei RPKI und enforce-first-as unterscheiden sich die Kommandos
zwischen Releases derselben Plattform. Wo uns das bekannt ist, steht ein
Hinweis dabei.
Alle Adressen, Filterregeln und Communities stehen auf der Seite Routeserver.
Was Sie eintragen müssen
| Platzhalter | Bedeutung |
|---|---|
<IHRE-ASN> | Ihre AS-Nummer |
<IHRE-IPV4> | Ihre Adresse aus 193.34.203.192/26 |
<IHRE-IPV6> | Ihre Adresse aus 2001:7f8:15b:1::/64 |
<IHRE-ROUTER-ID> | Ihre BGP-Router-ID |
<MAXPFX-V4> / <MAXPFX-V6> | Ihr Prefix-Limit je Adressfamilie |
<IHR-PREFIX-V4> / <IHR-PREFIX-V6> | Ihre anzukündigenden Prefixe |
Kündigen Sie mehr als einen Prefix an, erweitern Sie die jeweilige Prefix-Liste entsprechend – in den Beispielen steht bewusst nur ein Eintrag. Zu den Prefix-Limits: Die Routeserver setzen ihrerseits ein Limit auf das, was sie von Ihnen annehmen; es stammt aus Ihren PeeringDB-Angaben. Ohne Eintrag greifen 250 (IPv4) und 50 (IPv6). Die Werte in Ihrer eigenen Konfiguration wählen Sie unabhängig davon – sie schützen Ihren Router.
Plattform wählen
Juniper Junos Arista EOS Cisco IOS-XR Cisco IOS / IOS-XE BIRD 2 FRRouting VyOS OpenBGPD
Juniper Junos
Junos erzwingt enforce-first-as nicht per Vorgabe – hier ist nichts abzuschalten. Achten Sie darauf, die Option nicht versehentlich zu setzen.
routing-options {
autonomous-system <IHRE-ASN>;
validation {
group frankonIX-rpki {
session 193.34.203.196 {
port 3323;
local-address <IHRE-IPV4>;
}
session 193.34.203.197 {
port 3323;
local-address <IHRE-IPV4>;
}
}
}
}
policy-options {
prefix-list meine-prefixe-v4 {
<IHR-PREFIX-V4>;
}
prefix-list meine-prefixe-v6 {
<IHR-PREFIX-V6>;
}
policy-statement frankonIX-import {
term rpki-invalid {
from validation-database invalid;
then reject;
}
term rest {
then accept;
}
}
policy-statement frankonIX-export-v4 {
term meine {
from {
prefix-list meine-prefixe-v4;
}
then accept;
}
then reject;
}
policy-statement frankonIX-export-v6 {
term meine {
from {
prefix-list meine-prefixe-v6;
}
then accept;
}
then reject;
}
}
protocols {
bgp {
group frankonIX-rs-v4 {
type external;
peer-as 214591;
local-address <IHRE-IPV4>;
family inet {
unicast {
prefix-limit {
maximum <MAXPFX-V4>;
teardown 90 idle-timeout 30;
}
}
}
import frankonIX-import;
export frankonIX-export-v4;
neighbor 193.34.203.193;
neighbor 193.34.203.194;
neighbor 193.34.203.195;
}
group frankonIX-rs-v6 {
type external;
peer-as 214591;
local-address <IHRE-IPV6>;
family inet6 {
unicast {
prefix-limit {
maximum <MAXPFX-V6>;
teardown 90 idle-timeout 30;
}
}
}
import frankonIX-import;
export frankonIX-export-v6;
neighbor 2001:7f8:15b:1::c122:cbc1;
neighbor 2001:7f8:15b:1::c122:cbc2;
neighbor 2001:7f8:15b:1::c122:cbc3;
}
}
}
Arista EOS
EOS erzwingt enforce-first-as per Vorgabe – muss abgeschaltet werden. Die RPKI-Syntax hat sich über die EOS-Versionen mehrfach geändert; rpki cache gibt es erst ab 4.24.
router bgp <IHRE-ASN>
router-id <IHRE-ROUTER-ID>
no bgp default ipv4-unicast
rpki cache rpki01
host 193.34.203.196 port 3323
preference 1
!
rpki cache rpki02
host 193.34.203.197 port 3323
preference 2
!
rpki origin-validation
ebgp local
!
neighbor frankonIX-v4 peer group
neighbor frankonIX-v4 remote-as 214591
no neighbor frankonIX-v4 enforce-first-as
neighbor frankonIX-v4 maximum-routes <MAXPFX-V4>
neighbor frankonIX-v4 route-map frankonIX-in in
neighbor frankonIX-v4 route-map frankonIX-out-v4 out
neighbor frankonIX-v6 peer group
neighbor frankonIX-v6 remote-as 214591
no neighbor frankonIX-v6 enforce-first-as
neighbor frankonIX-v6 maximum-routes <MAXPFX-V6>
neighbor frankonIX-v6 route-map frankonIX-in in
neighbor frankonIX-v6 route-map frankonIX-out-v6 out
neighbor 193.34.203.193 peer group frankonIX-v4
neighbor 193.34.203.194 peer group frankonIX-v4
neighbor 193.34.203.195 peer group frankonIX-v4
neighbor 2001:7f8:15b:1::c122:cbc1 peer group frankonIX-v6
neighbor 2001:7f8:15b:1::c122:cbc2 peer group frankonIX-v6
neighbor 2001:7f8:15b:1::c122:cbc3 peer group frankonIX-v6
address-family ipv4
neighbor frankonIX-v4 activate
!
address-family ipv6
neighbor frankonIX-v6 activate
!
ip prefix-list MEINE-V4 seq 10 permit <IHR-PREFIX-V4>
ipv6 prefix-list MEINE-V6 seq 10 permit <IHR-PREFIX-V6>
!
route-map frankonIX-in deny 10
match origin-as validity invalid
!
route-map frankonIX-in permit 20
!
route-map frankonIX-out-v4 permit 10
match ip address prefix-list MEINE-V4
!
route-map frankonIX-out-v6 permit 10
match ipv6 address prefix-list MEINE-V6
!
Cisco IOS-XR
IOS-XR kann enforce-first-as pro Nachbar abschalten – hier über die Neighbor-Group.
router bgp <IHRE-ASN>
bgp router-id <IHRE-ROUTER-ID>
rpki server 193.34.203.196
transport tcp port 3323
refresh-time 600
!
rpki server 193.34.203.197
transport tcp port 3323
refresh-time 600
!
address-family ipv4 unicast
bgp origin-as validation enable
!
address-family ipv6 unicast
bgp origin-as validation enable
!
neighbor-group frankonIX-v4
remote-as 214591
enforce-first-as disable
address-family ipv4 unicast
maximum-prefix <MAXPFX-V4> 90
route-policy frankonIX-in in
route-policy frankonIX-out-v4 out
!
!
neighbor-group frankonIX-v6
remote-as 214591
enforce-first-as disable
address-family ipv6 unicast
maximum-prefix <MAXPFX-V6> 90
route-policy frankonIX-in in
route-policy frankonIX-out-v6 out
!
!
neighbor 193.34.203.193
use neighbor-group frankonIX-v4
!
neighbor 193.34.203.194
use neighbor-group frankonIX-v4
!
neighbor 193.34.203.195
use neighbor-group frankonIX-v4
!
neighbor 2001:7f8:15b:1::c122:cbc1
use neighbor-group frankonIX-v6
!
neighbor 2001:7f8:15b:1::c122:cbc2
use neighbor-group frankonIX-v6
!
neighbor 2001:7f8:15b:1::c122:cbc3
use neighbor-group frankonIX-v6
!
!
prefix-set meine-v4
<IHR-PREFIX-V4>
end-set
!
prefix-set meine-v6
<IHR-PREFIX-V6>
end-set
!
route-policy frankonIX-in
if validation-state is invalid then
drop
endif
pass
end-policy
!
route-policy frankonIX-out-v4
if destination in meine-v4 then
pass
else
drop
endif
end-policy
!
route-policy frankonIX-out-v6
if destination in meine-v6 then
pass
else
drop
endif
end-policy
!
Cisco IOS / IOS-XE
no bgp enforce-first-as ist zwingend. Achtung: Der Befehl wirkt auf dieser Plattform global, nicht pro Nachbar – andere eBGP-Sessions verlieren die Prüfung mit.
router bgp <IHRE-ASN>
bgp router-id <IHRE-ROUTER-ID>
no bgp enforce-first-as
bgp log-neighbor-changes
no bgp default ipv4-unicast
bgp rpki server tcp 193.34.203.196 port 3323 refresh 600
bgp rpki server tcp 193.34.203.197 port 3323 refresh 600
neighbor FRANKONIX-V4 peer-group
neighbor FRANKONIX-V4 remote-as 214591
neighbor FRANKONIX-V6 peer-group
neighbor FRANKONIX-V6 remote-as 214591
neighbor 193.34.203.193 peer-group FRANKONIX-V4
neighbor 193.34.203.194 peer-group FRANKONIX-V4
neighbor 193.34.203.195 peer-group FRANKONIX-V4
neighbor 2001:7F8:15B:1::C122:CBC1 peer-group FRANKONIX-V6
neighbor 2001:7F8:15B:1::C122:CBC2 peer-group FRANKONIX-V6
neighbor 2001:7F8:15B:1::C122:CBC3 peer-group FRANKONIX-V6
address-family ipv4
neighbor FRANKONIX-V4 activate
neighbor FRANKONIX-V4 maximum-prefix <MAXPFX-V4> 90
neighbor FRANKONIX-V4 route-map FRANKONIX-IN in
neighbor FRANKONIX-V4 route-map FRANKONIX-OUT-V4 out
exit-address-family
address-family ipv6
neighbor FRANKONIX-V6 activate
neighbor FRANKONIX-V6 maximum-prefix <MAXPFX-V6> 90
neighbor FRANKONIX-V6 route-map FRANKONIX-IN in
neighbor FRANKONIX-V6 route-map FRANKONIX-OUT-V6 out
exit-address-family
!
ip prefix-list MEINE-V4 seq 10 permit <IHR-PREFIX-V4>
ipv6 prefix-list MEINE-V6 seq 10 permit <IHR-PREFIX-V6>
!
route-map FRANKONIX-IN deny 10
match rpki invalid
!
route-map FRANKONIX-IN permit 20
!
route-map FRANKONIX-OUT-V4 permit 10
match ip address prefix-list MEINE-V4
!
route-map FRANKONIX-OUT-V6 permit 10
match ipv6 address prefix-list MEINE-V6
!
BIRD 2
enforce first as ist in BIRD per Vorgabe aus – nichts zu tun.
log syslog all;
router id <IHRE-ROUTER-ID>;
define MYAS = <IHRE-ASN>;
roa4 table r4;
roa6 table r6;
protocol rpki rpki01 {
roa4 { table r4; };
roa6 { table r6; };
remote "193.34.203.196" port 3323;
retry keep 90;
refresh keep 600;
expire keep 7200;
}
protocol rpki rpki02 {
roa4 { table r4; };
roa6 { table r6; };
remote "193.34.203.197" port 3323;
retry keep 90;
refresh keep 600;
expire keep 7200;
}
# RPKI-invalide Routen verwerfen.
# Hinweis: "-> bool" setzt BIRD >= 2.14 voraus.
# Auf aelteren Versionen die Angabe weglassen.
function rpki_ok() -> bool
{
if ( net.type = NET_IP4 && roa_check(r4, net, bgp_path.last) = ROA_INVALID ) then
return false;
if ( net.type = NET_IP6 && roa_check(r6, net, bgp_path.last) = ROA_INVALID ) then
return false;
return true;
}
filter frankonIX_in
{
if !rpki_ok() then reject;
accept;
}
filter frankonIX_out_v4
{
if ( net = <IHR-PREFIX-V4> ) then accept;
reject;
}
filter frankonIX_out_v6
{
if ( net = <IHR-PREFIX-V6> ) then accept;
reject;
}
template bgp frankonIX_v4 {
local <IHRE-IPV4> as MYAS;
ipv4 {
import filter frankonIX_in;
export filter frankonIX_out_v4;
import limit <MAXPFX-V4> action restart;
};
}
template bgp frankonIX_v6 {
local <IHRE-IPV6> as MYAS;
ipv6 {
import filter frankonIX_in;
export filter frankonIX_out_v6;
import limit <MAXPFX-V6> action restart;
};
}
protocol bgp rs01_v4 from frankonIX_v4 { neighbor 193.34.203.193 as 214591; }
protocol bgp rs02_v4 from frankonIX_v4 { neighbor 193.34.203.194 as 214591; }
protocol bgp rs03_v4 from frankonIX_v4 { neighbor 193.34.203.195 as 214591; }
protocol bgp rs01_v6 from frankonIX_v6 { neighbor 2001:7f8:15b:1::c122:cbc1 as 214591; }
protocol bgp rs02_v6 from frankonIX_v6 { neighbor 2001:7f8:15b:1::c122:cbc2 as 214591; }
protocol bgp rs03_v6 from frankonIX_v6 { neighbor 2001:7f8:15b:1::c122:cbc3 as 214591; }
FRRouting
Ab FRR 10.0 ist enforce-first-as per Vorgabe aktiv und muss für die Routeserver abgeschaltet werden.
rpki
rpki cache 193.34.203.196 3323 preference 1
rpki cache 193.34.203.197 3323 preference 2
exit
router bgp <IHRE-ASN>
bgp router-id <IHRE-ROUTER-ID>
no bgp ebgp-requires-policy
no bgp default ipv4-unicast
neighbor frankonIX-v4 peer-group
neighbor frankonIX-v4 remote-as 214591
no neighbor frankonIX-v4 enforce-first-as
neighbor frankonIX-v6 peer-group
neighbor frankonIX-v6 remote-as 214591
no neighbor frankonIX-v6 enforce-first-as
neighbor 193.34.203.193 peer-group frankonIX-v4
neighbor 193.34.203.194 peer-group frankonIX-v4
neighbor 193.34.203.195 peer-group frankonIX-v4
neighbor 2001:7f8:15b:1::c122:cbc1 peer-group frankonIX-v6
neighbor 2001:7f8:15b:1::c122:cbc2 peer-group frankonIX-v6
neighbor 2001:7f8:15b:1::c122:cbc3 peer-group frankonIX-v6
address-family ipv4 unicast
neighbor frankonIX-v4 activate
neighbor frankonIX-v4 maximum-prefix <MAXPFX-V4>
neighbor frankonIX-v4 route-map frankonIX-in in
neighbor frankonIX-v4 route-map frankonIX-out-v4 out
exit-address-family
address-family ipv6 unicast
neighbor frankonIX-v6 activate
neighbor frankonIX-v6 maximum-prefix <MAXPFX-V6>
neighbor frankonIX-v6 route-map frankonIX-in in
neighbor frankonIX-v6 route-map frankonIX-out-v6 out
exit-address-family
exit
ip prefix-list MEINE-V4 seq 10 permit <IHR-PREFIX-V4>
ipv6 prefix-list MEINE-V6 seq 10 permit <IHR-PREFIX-V6>
route-map frankonIX-in deny 10
match rpki invalid
exit
route-map frankonIX-in permit 20
exit
route-map frankonIX-out-v4 permit 10
match ip address prefix-list MEINE-V4
exit
route-map frankonIX-out-v6 permit 10
match ipv6 address prefix-list MEINE-V6
exit
VyOS
VyOS setzt intern FRR ein, und FRR ≥ 10 aktiviert die Prüfung per Vorgabe; neuere VyOS-Stände schalten sie für Nachbarn ohne ausdrückliche Angabe wieder ab. Bitte nach dem Commit gegenprüfen: vtysh -c "show run" | grep enforce-first-as. Steht dort eine aktive Zeile und die Session kommt nicht hoch, melden Sie sich bei uns.
set protocols rpki cache 193.34.203.196 port '3323'
set protocols rpki cache 193.34.203.196 preference '1'
set protocols rpki cache 193.34.203.197 port '3323'
set protocols rpki cache 193.34.203.197 preference '2'
set protocols bgp system-as '<IHRE-ASN>'
set protocols bgp parameters router-id '<IHRE-ROUTER-ID>'
set protocols bgp peer-group frankonIX-v4 remote-as '214591'
set protocols bgp peer-group frankonIX-v4 address-family ipv4-unicast maximum-prefix '<MAXPFX-V4>'
set protocols bgp peer-group frankonIX-v4 address-family ipv4-unicast route-map import 'frankonIX-in'
set protocols bgp peer-group frankonIX-v4 address-family ipv4-unicast route-map export 'frankonIX-out-v4'
set protocols bgp peer-group frankonIX-v6 remote-as '214591'
set protocols bgp peer-group frankonIX-v6 address-family ipv6-unicast maximum-prefix '<MAXPFX-V6>'
set protocols bgp peer-group frankonIX-v6 address-family ipv6-unicast route-map import 'frankonIX-in'
set protocols bgp peer-group frankonIX-v6 address-family ipv6-unicast route-map export 'frankonIX-out-v6'
set protocols bgp neighbor 193.34.203.193 peer-group 'frankonIX-v4'
set protocols bgp neighbor 193.34.203.194 peer-group 'frankonIX-v4'
set protocols bgp neighbor 193.34.203.195 peer-group 'frankonIX-v4'
set protocols bgp neighbor 2001:7f8:15b:1::c122:cbc1 peer-group 'frankonIX-v6'
set protocols bgp neighbor 2001:7f8:15b:1::c122:cbc2 peer-group 'frankonIX-v6'
set protocols bgp neighbor 2001:7f8:15b:1::c122:cbc3 peer-group 'frankonIX-v6'
set policy prefix-list MEINE-V4 rule 10 action 'permit'
set policy prefix-list MEINE-V4 rule 10 prefix '<IHR-PREFIX-V4>'
set policy prefix-list6 MEINE-V6 rule 10 action 'permit'
set policy prefix-list6 MEINE-V6 rule 10 prefix '<IHR-PREFIX-V6>'
set policy route-map frankonIX-in rule 10 action 'deny'
set policy route-map frankonIX-in rule 10 match rpki 'invalid'
set policy route-map frankonIX-in rule 20 action 'permit'
set policy route-map frankonIX-out-v4 rule 10 action 'permit'
set policy route-map frankonIX-out-v4 rule 10 match ip address prefix-list 'MEINE-V4'
set policy route-map frankonIX-out-v6 rule 10 action 'permit'
set policy route-map frankonIX-out-v6 rule 10 match ipv6 address prefix-list 'MEINE-V6'
OpenBGPD
OpenBGPD kennt kein enforce first-as. Die entsprechende Option heißt enforce neighbor-as und steht bei EBGP per Vorgabe auf yes – sie muss auf no.
AS <IHRE-ASN>
router-id <IHRE-ROUTER-ID>
rtr 193.34.203.196 {
descr "frankonIX rpki01"
port 3323
}
rtr 193.34.203.197 {
descr "frankonIX rpki02"
port 3323
}
prefix-set meine-v4 {
<IHR-PREFIX-V4>
}
prefix-set meine-v6 {
<IHR-PREFIX-V6>
}
group "frankonIX-v4" {
remote-as 214591
enforce neighbor-as no
max-prefix <MAXPFX-V4> restart 15
local-address <IHRE-IPV4>
neighbor 193.34.203.193 { descr "RS01 IPv4" }
neighbor 193.34.203.194 { descr "RS02 IPv4" }
neighbor 193.34.203.195 { descr "RS03 IPv4" }
}
group "frankonIX-v6" {
remote-as 214591
enforce neighbor-as no
max-prefix <MAXPFX-V6> restart 15
local-address <IHRE-IPV6>
neighbor 2001:7f8:15b:1::c122:cbc1 { descr "RS01 IPv6" }
neighbor 2001:7f8:15b:1::c122:cbc2 { descr "RS02 IPv6" }
neighbor 2001:7f8:15b:1::c122:cbc3 { descr "RS03 IPv6" }
}
# OpenBGPD wertet von oben nach unten aus; es gewinnt die LETZTE
# zutreffende Regel - ausser bei "quick", das sofort abbricht.
allow from any
deny quick from ebgp ovs invalid
deny to group "frankonIX-v4"
allow to group "frankonIX-v4" prefix-set meine-v4
deny to group "frankonIX-v6"
allow to group "frankonIX-v6" prefix-set meine-v6
Nach dem Einschalten prüfen
- Sechs Sessions established – drei IPv4, drei IPv6. Weniger ist ein Konfigurationsfehler, keine Absicht unsererseits.
- RTR-Sessions established zu beiden Validatoren, und die ROA-Tabelle ist gefüllt. Eine leere Tabelle bei established Session heißt, dass der erste Sync noch läuft – das dauert nach dem Start einige Minuten.
-
Ihre Prefixe kommen an. Im Looking Glass nachsehen, ob sie
auf allen drei Routeservern stehen und ob eine
214591:1101:*-Community dranhängt.
Häufige Fehler
| Symptom | Ursache |
|---|---|
Session bleibt Active / Connect |
Falsche Peering-IP, oder das VLAN ist nicht auf Ihrem Port getaggt |
| Session kommt hoch, aber keine Routen von uns | enforce-first-as aktiv – siehe Ihre Plattform oben |
| Ihre Routen kommen bei niemandem an | Im Looking Glass die 1101:*-Community prüfen. Meist :9 oder :10 – dann fehlt der Prefix in Ihrem AS-SET |
| Nur ein Teil Ihrer Prefixe kommt durch | Prefix-Limit erreicht, oder Prefixe länger als /24 bzw. /48 |
| RTR-Session kommt nicht hoch | Port 3323 statt 323 eingetragen? |
| Routen erscheinen erst Stunden nach einer IRR-Änderung | Die IRRDB-Aktualisierung läuft alle sechs Stunden |
Fragen? Support & Kontakt