mirror of
https://git.burble.com/burble.dn42/dn42regsrv.git
synced 2024-02-26 20:28:04 +01:00
Add OpenBGPd format ROA output
This commit is contained in:
parent
bd750fccb3
commit
22234d8918
65
API.md
65
API.md
@ -313,7 +313,7 @@ The token is set using the `--AuthToken` command line parameter.
|
|||||||
## Route Origin Authorisation (ROA) API
|
## Route Origin Authorisation (ROA) API
|
||||||
|
|
||||||
Route Origin Authorisation (ROA) data can be obtained from the server in
|
Route Origin Authorisation (ROA) data can be obtained from the server in
|
||||||
JSON and bird formats.
|
JSON, bird and OpenBGPd formats.
|
||||||
|
|
||||||
### JSON format output
|
### JSON format output
|
||||||
|
|
||||||
@ -414,6 +414,69 @@ route fd42:7879:7879::/48 max 64 as 4242421787;
|
|||||||
... and so on
|
... and so on
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### OpenBGPd format output
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /api/roa/obgpd/{IP family}
|
||||||
|
```
|
||||||
|
|
||||||
|
Provides ROA data suitable for including in to OpenBGPd.
|
||||||
|
|
||||||
|
{IP family} can be 4, 6 or 46 to provide both IPv4 and IPv6 results
|
||||||
|
|
||||||
|
|
||||||
|
Example Output:
|
||||||
|
```
|
||||||
|
wget -O - -q http://localhost:8042/api/roa/obgpd/4
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
#
|
||||||
|
# dn42regsrv ROA Generator
|
||||||
|
# Last Updated: 2021-05-19 12:54:44.441996393 +0100 BST m=+5.976816481
|
||||||
|
# Commit: 8b96b02aa4c2f02b3a3e64c8458bc76596b6345c
|
||||||
|
#
|
||||||
|
roa-set {
|
||||||
|
172.20.34.0/26 maxlen 29 source-as 4242423966
|
||||||
|
172.20.58.0/27 maxlen 29 source-as 4242420237
|
||||||
|
10.132.0.0/16 maxlen 24 source-as 65132
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
172.23.222.160/28 maxlen 29 source-as 4242423626
|
||||||
|
172.20.54.32/28 maxlen 29 source-as 4242422274
|
||||||
|
172.20.172.0/28 maxlen 29 source-as 4242423160
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
wget -O - -q http://localhost:8042/api/roa/obgpd/46
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
#
|
||||||
|
# dn42regsrv ROA Generator
|
||||||
|
# Last Updated: 2021-05-19 12:54:44.441996393 +0100 BST m=+5.976816481
|
||||||
|
# Commit: 8b96b02aa4c2f02b3a3e64c8458bc76596b6345c
|
||||||
|
#
|
||||||
|
roa-set {
|
||||||
|
172.20.34.0/26 maxlen 29 source-as 4242423966
|
||||||
|
172.20.58.0/27 maxlen 29 source-as 4242420237
|
||||||
|
|
||||||
|
... IPv4 ROA
|
||||||
|
|
||||||
|
172.20.54.32/28 maxlen 29 source-as 4242422274
|
||||||
|
172.20.172.0/28 maxlen 29 source-as 4242423160
|
||||||
|
fd35:eeee:eeee::/48 maxlen 64 source-as 4242422006
|
||||||
|
fd88:ee35:b221::/48 maxlen 48 source-as 4242423679
|
||||||
|
|
||||||
|
... IPv6 ROA
|
||||||
|
|
||||||
|
fda3:ea2d:b60a::/48 maxlen 48 source-as 4242420228
|
||||||
|
fdfd:dead:c0de::/64 maxlen 64 source-as 4242421230
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### filter{,6}.txt
|
### filter{,6}.txt
|
||||||
|
|
||||||
```
|
```
|
||||||
|
38
roaapi.go
38
roaapi.go
@ -94,6 +94,7 @@ func InitROAAPI(params ...interface{}) {
|
|||||||
s.HandleFunc("/filter/{ipv}", roaFilterHandler)
|
s.HandleFunc("/filter/{ipv}", roaFilterHandler)
|
||||||
s.HandleFunc("/json", roaJSONHandler)
|
s.HandleFunc("/json", roaJSONHandler)
|
||||||
s.HandleFunc("/bird/{birdv}/{ipv}", roaBirdHandler)
|
s.HandleFunc("/bird/{birdv}/{ipv}", roaBirdHandler)
|
||||||
|
s.HandleFunc("/obgpd/{ipv}", roaOBGPdHandler)
|
||||||
|
|
||||||
log.Info("ROA API installed")
|
log.Info("ROA API installed")
|
||||||
}
|
}
|
||||||
@ -195,6 +196,43 @@ func roaBirdHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// return the roa in OpenBGPd format
|
||||||
|
func roaOBGPdHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
|
vars := mux.Vars(r)
|
||||||
|
ipv := vars["ipv"]
|
||||||
|
|
||||||
|
// select ROA to emit
|
||||||
|
var roa []*PrefixROA
|
||||||
|
if strings.ContainsRune(ipv, '4') {
|
||||||
|
roa = append(roa, ROAData.IPv4...)
|
||||||
|
}
|
||||||
|
if strings.ContainsRune(ipv, '6') {
|
||||||
|
roa = append(roa, ROAData.IPv6...)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "text/plain")
|
||||||
|
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||||
|
|
||||||
|
// cache for up to a week, but set etag to commit to catch changes
|
||||||
|
w.Header().Set("Cache-Control", "public, max-age=7200, stale-if-error=604800")
|
||||||
|
w.Header().Set("ETag", ROAData.Commit)
|
||||||
|
|
||||||
|
// add header
|
||||||
|
fmt.Fprintf(w, "#\n# dn42regsrv ROA Generator\n# Last Updated: %s\n"+
|
||||||
|
"# Commit: %s\n#\nroa-set {\n", ROAData.CTime.String(), ROAData.Commit)
|
||||||
|
|
||||||
|
// output the ROA
|
||||||
|
format := " %s maxlen %d source-as %s\n"
|
||||||
|
for _, r := range roa {
|
||||||
|
fmt.Fprintf(w, format, r.Prefix, r.MaxLen, r.ASN[2:])
|
||||||
|
}
|
||||||
|
|
||||||
|
// add tail
|
||||||
|
fmt.Fprintf(w, "}\n")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// called whenever the registry is updated
|
// called whenever the registry is updated
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user