212 lines
6.0 KiB
Nix
212 lines
6.0 KiB
Nix
{ lib, pkgs, config, assignments, allAssignments, ... }:
|
|
let
|
|
securebitSpace = "2a0e:97c0:4d0::/44";
|
|
intnet6 = "2a0e:97c0:4df::/48";
|
|
amsnet6 = "2a0e:97c0:4d2::/48";
|
|
homenet6 = "2a0e:97c0:4d0::/48";
|
|
in
|
|
{
|
|
config = {
|
|
services = {
|
|
bird2 = {
|
|
enable = true;
|
|
# TODO: Clean up and modularise
|
|
config = ''
|
|
define OWNAS = 211024;
|
|
define OWNIP4 = ${assignments.internal.ipv4.address};
|
|
define OWNNETSET4 = [ ${assignments.internal.ipv4.address}/32 ];
|
|
|
|
define INTNET6 = ${intnet6};
|
|
define AMSNET6 = ${amsnet6};
|
|
define HOMENET6 = ${homenet6};
|
|
|
|
define OWNIP6 = ${assignments.internal.ipv6.address};
|
|
define OWNNETSET6 = [ ${intnet6}, ${amsnet6}, ${homenet6} ];
|
|
#define TRANSSET6 = [ ::1/128 ];
|
|
|
|
define DUB1IP6 = 2a0e:97c0:4df:0:2::1;
|
|
|
|
define PREFIXP = 110;
|
|
define PREFPEER = 120;
|
|
|
|
#function should_export6() {
|
|
# return net ~ OWNNETSET6 || (transit && net ~ TRANSSET6);
|
|
#}
|
|
|
|
filter bgp_import {
|
|
if net !~ OWNNETSET6 then accept; else reject;
|
|
}
|
|
filter bgp_export {
|
|
if net ~ OWNNETSET6 then accept; else reject;
|
|
}
|
|
|
|
router id from "wan";
|
|
|
|
protocol device {}
|
|
protocol direct {
|
|
interface "wan";
|
|
ipv4;
|
|
ipv6;
|
|
}
|
|
protocol static {
|
|
# Special case: We have to do the routing on behalf of this _internal_ next-hop
|
|
route INTNET6 via "as211024";
|
|
route AMSNET6 via "base";
|
|
route HOMENET6 via DUB1IP6;
|
|
ipv6 {
|
|
import all;
|
|
export none;
|
|
};
|
|
}
|
|
|
|
protocol kernel kernel4 {
|
|
ipv4 {
|
|
import none;
|
|
export filter {
|
|
if net ~ OWNNETSET4 then reject;
|
|
krt_prefsrc = OWNIP4;
|
|
accept;
|
|
};
|
|
};
|
|
}
|
|
protocol kernel kernel6 {
|
|
ipv6 {
|
|
import none;
|
|
export filter {
|
|
if net = HOMENET6 then accept;
|
|
if net ~ OWNNETSET6 then reject;
|
|
krt_prefsrc = OWNIP6;
|
|
accept;
|
|
};
|
|
};
|
|
}
|
|
|
|
protocol bgp bgptools {
|
|
local as OWNAS;
|
|
multihop;
|
|
description "bgp.tools monitoring";
|
|
neighbor 2a0c:2f07:9459::b8 as 212232;
|
|
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 {
|
|
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 as OWNAS;
|
|
direct;
|
|
# So we can see routes we announce from other routers
|
|
allow local as;
|
|
ipv6 {
|
|
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_coloclue_eun2 from upstream_bgp4 {
|
|
description "ColoClue euNetworks 2 (IPv4)";
|
|
neighbor 94.142.240.253 as 8283;
|
|
}
|
|
protocol bgp upstream4_coloclue_eun3 from upstream_bgp4 {
|
|
description "ColoClue euNetworks 3 (IPv4)";
|
|
neighbor 94.142.240.252 as 8283;
|
|
}
|
|
|
|
protocol bgp upstream6_coloclue_eun2 from upstream_bgp6 {
|
|
description "ColoClue euNetworks 2 (IPv6)";
|
|
neighbor 2a02:898:0:20::e2 as 8283;
|
|
}
|
|
protocol bgp upstream6_coloclue_eun3 from upstream_bgp6 {
|
|
description "ColoClue euNetworks 3 (IPv6)";
|
|
neighbor 2a02:898:0:20::e1 as 8283;
|
|
}
|
|
|
|
protocol bgp ixp4_frysix_rs1 from ixp_bgp4 {
|
|
description "Frys-IX route server 1 (IPv4)";
|
|
neighbor 185.1.203.253 as 56393;
|
|
}
|
|
protocol bgp ixp6_frysix_rs1 from ixp_bgp6 {
|
|
description "Frys-IX route server 1 (IPv6)";
|
|
neighbor 2001:7f8:10f::dc49:253 as 56393;
|
|
}
|
|
|
|
protocol bgp ixp4_frysix_rs2 from ixp_bgp4 {
|
|
description "Frys-IX route server 2 (IPv4)";
|
|
neighbor 185.1.203.254 as 56393;
|
|
}
|
|
protocol bgp ixp6_frysix_rs2 from ixp_bgp6 {
|
|
description "Frys-IX route server 2 (IPv6)";
|
|
neighbor 2001:7f8:10f::dc49:254 as 56393;
|
|
}
|
|
|
|
protocol bgp peer4_luje from peer_bgp4 {
|
|
description "LUJE.net (IPv4)";
|
|
neighbor 94.142.240.20 as 212855;
|
|
}
|
|
protocol bgp peer6_luje from peer_bgp6 {
|
|
description "LUJE.net (IPv6)";
|
|
neighbor 2a02:898:0:20::166:1 as 212855;
|
|
}
|
|
protocol bgp peer6_luje_labs from peer_bgp6 {
|
|
description "LUJE.net labs (IPv6)";
|
|
multihop 3;
|
|
neighbor 2a07:cd40:1::9 as 202413;
|
|
}
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
}
|