Jack O'Sullivan
10769a4441
All checks were successful
CI / Check, build and cache Nix flake (push) Successful in 19m2s
198 lines
5.1 KiB
Nix
198 lines
5.1 KiB
Nix
{ lib, pkgs, config, assignments, ... }:
|
|
let
|
|
inherit (lib.my.c.britway) assignedV6;
|
|
|
|
securebitSpace = "2a0e:97c0:4d0::/44";
|
|
intnet6 = "2a0e:97c0:4df::/48";
|
|
amsnet6 = "2a0e:97c0:4d2::/48";
|
|
homenet6 = "2a0e:97c0:4d0::/48";
|
|
in
|
|
{
|
|
config = {
|
|
my = {
|
|
secrets.files."britway/bgp-password-vultr.conf" = {
|
|
owner = "bird2";
|
|
group = "bird2";
|
|
};
|
|
};
|
|
|
|
environment.etc."bird/vultr-password.conf".source = config.age.secrets."britway/bgp-password-vultr.conf".path;
|
|
|
|
systemd = {
|
|
services.bird2.after = [ "systemd-networkd-wait-online@veth0.service" ];
|
|
network = {
|
|
config.networkConfig.ManageForeignRoutes = false;
|
|
};
|
|
};
|
|
|
|
services = {
|
|
bird2 = {
|
|
enable = true;
|
|
preCheckConfig = ''
|
|
echo '"dummy"' > vultr-password.conf
|
|
'';
|
|
# TODO: Clean up and modularise
|
|
config = ''
|
|
define OWNAS = 211024;
|
|
|
|
define OWNIP4 = ${assignments.vultr.ipv4.address};
|
|
define OWNNETSET4 = [ ${assignments.vultr.ipv4.address}/32 ];
|
|
|
|
define INTNET6 = ${intnet6};
|
|
define AMSNET6 = ${amsnet6};
|
|
define HOMENET6 = ${homenet6};
|
|
|
|
define OWNIP6 = ${assignments.vultr.ipv6.address};
|
|
define OWNNETSET6 = [ ${intnet6}, ${amsnet6}, ${homenet6} ];
|
|
#define TRANSSET6 = [ ::1/128 ];
|
|
|
|
define DUB1IP6 = ${lib.my.c.home.vips.as211024.v6};
|
|
|
|
define PREFIXP = 110;
|
|
define PREFPEER = 120;
|
|
|
|
filter bgp_import {
|
|
if net !~ OWNNETSET4 && net !~ OWNNETSET6 then accept; else reject;
|
|
}
|
|
filter bgp_export {
|
|
if net ~ OWNNETSET4 || net ~ OWNNETSET6 then accept; else reject;
|
|
}
|
|
|
|
router id from "veth0";
|
|
|
|
protocol device {}
|
|
protocol direct {
|
|
interface "veth0";
|
|
ipv4;
|
|
ipv6;
|
|
}
|
|
protocol static static4 {
|
|
ipv4 {
|
|
import all;
|
|
export none;
|
|
};
|
|
}
|
|
protocol static static6 {
|
|
# Special case: We have to do the routing on behalf of this _internal_ next-hop
|
|
route INTNET6 via "as211024";
|
|
route HOMENET6 via DUB1IP6;
|
|
|
|
ipv6 {
|
|
import all;
|
|
export none;
|
|
};
|
|
}
|
|
|
|
protocol kernel kernel4 {
|
|
ipv4 {
|
|
import none;
|
|
export none;
|
|
};
|
|
}
|
|
protocol kernel kernel6 {
|
|
ipv6 {
|
|
import none;
|
|
export filter {
|
|
if net = HOMENET6 then accept;
|
|
reject;
|
|
};
|
|
};
|
|
}
|
|
|
|
protocol bgp bgptools {
|
|
local as OWNAS;
|
|
multihop;
|
|
description "bgp.tools monitoring";
|
|
neighbor 2a0c:2f07:9459::b11 as 212232;
|
|
source address OWNIP6;
|
|
ipv4 {
|
|
import none;
|
|
export all;
|
|
add paths tx;
|
|
};
|
|
ipv6 {
|
|
import none;
|
|
export all;
|
|
add paths tx;
|
|
};
|
|
}
|
|
|
|
template bgp base_bgp4 {
|
|
local as OWNAS;
|
|
direct;
|
|
allow local as;
|
|
ipv4 {
|
|
import keep filtered;
|
|
export none;
|
|
};
|
|
}
|
|
|
|
template bgp upstream_bgp4 from base_bgp4 {
|
|
ipv4 {
|
|
#import none;
|
|
import filter bgp_import;
|
|
};
|
|
}
|
|
template bgp peer_bgp4 from base_bgp4 {
|
|
ipv4 {
|
|
import filter bgp_import;
|
|
preference PREFPEER;
|
|
};
|
|
}
|
|
template bgp ixp_bgp4 from base_bgp4 {
|
|
ipv4 {
|
|
import filter bgp_import;
|
|
preference PREFIXP;
|
|
};
|
|
}
|
|
|
|
template bgp base_bgp6 {
|
|
local ${assignedV6} as OWNAS;
|
|
direct;
|
|
# So we can see routes we announce from other routers
|
|
allow local as;
|
|
ipv6 {
|
|
import keep filtered;
|
|
export filter bgp_export;
|
|
};
|
|
}
|
|
|
|
template bgp upstream_bgp6 from base_bgp6 {
|
|
ipv6 {
|
|
#import none;
|
|
import filter bgp_import;
|
|
};
|
|
}
|
|
template bgp peer_bgp6 from base_bgp6 {
|
|
ipv6 {
|
|
import filter bgp_import;
|
|
preference PREFPEER;
|
|
};
|
|
}
|
|
template bgp ixp_bgp6 from base_bgp6 {
|
|
ipv6 {
|
|
import filter bgp_import;
|
|
preference PREFIXP;
|
|
};
|
|
}
|
|
|
|
protocol bgp upstream4_vultr from upstream_bgp4 {
|
|
description "Vultr transit (IPv4)";
|
|
neighbor 169.254.169.254 as 64515;
|
|
multihop 2;
|
|
password
|
|
include "vultr-password.conf";;
|
|
}
|
|
protocol bgp upstream6_vultr from upstream_bgp6 {
|
|
description "Vultr transit (IPv6)";
|
|
neighbor 2001:19f0:ffff::1 as 64515;
|
|
multihop 2;
|
|
password
|
|
include "vultr-password.conf";;
|
|
}
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
}
|