not runnable yet!
This commit is contained in:
parent
8cbb75ffe6
commit
ab2efe5df3
3 changed files with 312 additions and 0 deletions
6
roles/ffmwu-bird/read.me
Normal file
6
roles/ffmwu-bird/read.me
Normal file
|
@ -0,0 +1,6 @@
|
|||
The ffmwu-bird role sets up the bird config for gates or other meshing
|
||||
servers (distinction made by group membership). It will ensure empty
|
||||
include files for ICVPN integration; integration itself to be configured
|
||||
by different role. bird package should be installed elsewhere.
|
||||
|
||||
Relies on host_var "ffrl_exit_conf" and ... .
|
48
roles/ffmwu-bird/tasks/main.yml
Normal file
48
roles/ffmwu-bird/tasks/main.yml
Normal file
|
@ -0,0 +1,48 @@
|
|||
---
|
||||
|
||||
- name: standardise dir ownership
|
||||
file:
|
||||
path: /etc/bird
|
||||
state: directory
|
||||
owner: admin
|
||||
group: bird
|
||||
mode: 0750
|
||||
become: yes
|
||||
|
||||
- name: standardise file ownerships
|
||||
file:
|
||||
path: "{{b_item}}"
|
||||
state: touch
|
||||
owner: admin
|
||||
group: bird
|
||||
mode: 0750
|
||||
become: yes
|
||||
with_items:
|
||||
- /etc/bird/bird.conf
|
||||
- /etc/bird/mwu_peers_v4.inc
|
||||
- /etc/bird/ffrl_peers_v4.inc
|
||||
- /etc/bird/icvpn_peers_v4.inc
|
||||
- /etc/bird/icvpn_roa_v4.inc
|
||||
- /etc/bird/bird6.conf
|
||||
- /etc/bird/icvpn_peers_v6.inc
|
||||
- /etc/bird/icvpn_roa_v6.inc
|
||||
- /etc/bird/mwu_peers_v6.inc
|
||||
- /etc/bird/ffrl_peers_v6.inc
|
||||
loop_control:
|
||||
loop_var: b_item
|
||||
|
||||
- name: template out bird.confs
|
||||
template:
|
||||
backup: yes
|
||||
dest: /etc/bird/{{b_item}}
|
||||
src: "{{b_item}}"
|
||||
#validate !!!
|
||||
with_items:
|
||||
- bird.conf
|
||||
- bird6.conf
|
||||
loop_control:
|
||||
loop_var: b_item
|
||||
|
||||
# FIXME: construct mwu includes
|
||||
|
||||
# FIXME: construct ffrl includes
|
258
roles/ffmwu-bird/templates/bird.conf
Normal file
258
roles/ffmwu-bird/templates/bird.conf
Normal file
|
@ -0,0 +1,258 @@
|
|||
timeformat protocol iso long;
|
||||
|
||||
# local addresses
|
||||
{% if 'gates' in group_names %}
|
||||
define local_addr_ffrl = {{hostvar}}185.66.195.38;
|
||||
define local_addr_icvpn = {{hostvar}}10.207.37.161; # ingwer = mwu161
|
||||
define local_addr_mwu = 10.37.0.{{mwu server id}};
|
||||
{% else %}
|
||||
define local_addr_mwu = 10.37.1.{{mwu server id}};
|
||||
{% endif %}
|
||||
|
||||
# AS
|
||||
define mwu_as = 65037; # private AS of mwu
|
||||
{% if 'gates' in group_names %}
|
||||
define ffrl_as = 201701; # public AS of rheinland
|
||||
{% endif %}
|
||||
|
||||
{% if 'gates' in group_names %}
|
||||
router id local_addr_ffrl;
|
||||
|
||||
table ffrl; # BGP Peerings FFRL
|
||||
|
||||
# ROA
|
||||
roa table roa_icvpn {
|
||||
include "ebgp_roa_v4.inc";
|
||||
}
|
||||
{% else %}
|
||||
router id local_addr_mwu;
|
||||
{% endif %}
|
||||
|
||||
# functions
|
||||
function is_default() {
|
||||
return net ~ [
|
||||
0.0.0.0/0
|
||||
];
|
||||
}
|
||||
|
||||
function is_freifunk() {
|
||||
return net ~ [
|
||||
10.0.0.0/8{16,24}
|
||||
];
|
||||
}
|
||||
|
||||
function is_dn42() {
|
||||
return net ~ [
|
||||
172.20.0.0/14{20,28}
|
||||
];
|
||||
}
|
||||
|
||||
function is_chaosvpn() {
|
||||
return net ~ [
|
||||
172.31.0.0/16+
|
||||
];
|
||||
}
|
||||
|
||||
function is_mwu_self_nets() {
|
||||
return net ~ [
|
||||
10.56.0.0/16+,
|
||||
10.37.0.0/16+
|
||||
];
|
||||
}
|
||||
|
||||
function is_wi_self_net() {
|
||||
return net ~ [
|
||||
10.56.0.0/16+
|
||||
];
|
||||
}
|
||||
|
||||
function is_mz_self_net() {
|
||||
return net ~ [
|
||||
10.37.0.0/16+
|
||||
];
|
||||
}
|
||||
|
||||
{% if 'gates' in group_names %}
|
||||
function is_local_addr_ffrl() {
|
||||
return net ~ [
|
||||
{{hostvar}}185.66.195.38/32
|
||||
];
|
||||
}
|
||||
|
||||
function is_ffrl_tunnel_nets() {
|
||||
return net ~ [
|
||||
{{hostvar}}100.64.2.234/31,
|
||||
{{hostvar}}100.64.2.236/31,
|
||||
{{hostvar}}100.64.2.238/31,
|
||||
{{hostvar}}100.64.2.240/31,
|
||||
{{hostvar}}100.64.1.112/31,
|
||||
{{hostvar}}100.64.1.114/31
|
||||
];
|
||||
}
|
||||
{% endif %}
|
||||
|
||||
# filters
|
||||
{% if 'gates' in group_names %}
|
||||
filter ebgp_icvpn_import_filter {
|
||||
if is_mwu_self_nets() then reject;
|
||||
if is_chaosvpn() then accept;
|
||||
if roa_check(roa_icvpn) = ROA_VALID then {
|
||||
if is_freifunk() then accept;
|
||||
if is_dn42() then accept;
|
||||
} else {
|
||||
if roa_check(roa_icvpn) = ROA_UNKNOWN then {
|
||||
if is_dn42() then {
|
||||
# print "ROA UNKNOWN for dn42 net, accepting: ", net, " ASN: ", bgp_path.last;
|
||||
accept;
|
||||
}
|
||||
if is_freifunk() then {
|
||||
# print "ROA UNKNOWN for freifunk net, accepting: ", net, " ASN: ", bgp_path.last;
|
||||
accept;
|
||||
}
|
||||
}
|
||||
if roa_check(roa_icvpn) = ROA_INVALID then {
|
||||
if is_freifunk() then {
|
||||
# print "ROA INVALID for freifunk net, accept: ", net, " ASN: ", bgp_path.last;
|
||||
accept;
|
||||
}
|
||||
}
|
||||
reject;
|
||||
}
|
||||
reject;
|
||||
}
|
||||
|
||||
filter ebgp_ffrl_import_filter {
|
||||
if is_default() then accept;
|
||||
reject;
|
||||
}
|
||||
|
||||
filter ebgp_ffrl_export_filter {
|
||||
if is_local_addr_ffrl() then accept;
|
||||
reject;
|
||||
}
|
||||
{% else %}
|
||||
# sanity check: don't allow critical overrides
|
||||
filter ebgp_icvpn_import_filter {
|
||||
if is_mwu_self_nets() then reject;
|
||||
if is_default() then reject;
|
||||
if is_freifunk() then accept;
|
||||
if is_dn42() then accept;
|
||||
if is_chaosvpn() then accept;
|
||||
reject;
|
||||
}
|
||||
{% endif %}
|
||||
|
||||
# protocols
|
||||
# necessary to inform bird about devices
|
||||
protocol device {
|
||||
scan time 30;
|
||||
};
|
||||
|
||||
protocol kernel kernel_mwu {
|
||||
scan time 30;
|
||||
import none;
|
||||
export filter {
|
||||
if is_mwu_self_nets() then
|
||||
reject;
|
||||
krt_prefsrc = local_addr_icvpn;
|
||||
accept;
|
||||
};
|
||||
kernel table ipt_icvpn;
|
||||
};
|
||||
|
||||
{% if 'gates' in group_names %}
|
||||
# learn about directly connected community subnets
|
||||
protocol direct mwu_subnets {
|
||||
interface "mzBR";
|
||||
interface "wiBR";
|
||||
import where is_mwu_self_nets();
|
||||
};
|
||||
|
||||
protocol static ffrl_uplink_hostroute {
|
||||
table ffrl;
|
||||
route 185.66.195.38/32 reject;
|
||||
}
|
||||
|
||||
protocol direct ffrl_tunnels {
|
||||
table ffrl;
|
||||
interface "ffrl-*";
|
||||
import where is_ffrl_tunnel_nets();
|
||||
}
|
||||
|
||||
protocol kernel kernel_ffrl {
|
||||
scan time 30;
|
||||
import none;
|
||||
export filter {
|
||||
krt_prefsrc = local_addr_ffrl;
|
||||
accept;
|
||||
};
|
||||
table ffrl;
|
||||
kernel table ipt_ffinetexit;
|
||||
};
|
||||
{% endif %}
|
||||
|
||||
# Templates
|
||||
# templates for iBGP
|
||||
{% if 'gates' in group_names %}
|
||||
template bgp bgp_ibgp_mwu {
|
||||
local local_addr_mwu as mwu_as;
|
||||
import keep filtered on;
|
||||
import all; # EXPERIMENT !!!!!
|
||||
export where source = RTS_BGP;
|
||||
direct;
|
||||
gateway direct;
|
||||
};
|
||||
{% else %}
|
||||
template bgp bgp_ibgp_mwu {
|
||||
local local_addr_mwu as mwu_as;
|
||||
import filter ebgp_icvpn_import_filter;
|
||||
export none;
|
||||
direct;
|
||||
gateway direct;
|
||||
};
|
||||
{% endif %}
|
||||
|
||||
{% if 'gates' in group_names %}
|
||||
# templates for eBGP
|
||||
template bgp ebgp_ic {
|
||||
local local_addr_icvpn as mwu_as;
|
||||
import keep filtered on;
|
||||
import filter ebgp_icvpn_import_filter;
|
||||
export filter {
|
||||
if is_mwu_self_nets() then { # own nets
|
||||
accept;
|
||||
}
|
||||
if source = RTS_BGP then {
|
||||
if is_freifunk() || is_dn42() then {
|
||||
accept;
|
||||
}
|
||||
}
|
||||
reject;
|
||||
};
|
||||
direct;
|
||||
};
|
||||
|
||||
template bgp ffrl_uplink {
|
||||
table ffrl;
|
||||
local as mwu_as;
|
||||
import keep filtered;
|
||||
import filter ebgp_ffrl_import_filter;
|
||||
export filter ebgp_ffrl_export_filter;
|
||||
next hop self;
|
||||
direct;
|
||||
};
|
||||
{% endif %}
|
||||
|
||||
# P E E R I N G S
|
||||
# iBGP
|
||||
include "mwu_peers_v4.inc";
|
||||
|
||||
{% if 'gates' in group_names %}
|
||||
# P E E R I N G S
|
||||
# eBGP FFRL exit
|
||||
include "ffrl_peers_v4.inc";
|
||||
|
||||
# P E E R I N G S
|
||||
# eBGP ICVPN
|
||||
include "icvpn_peers_v4.inc";
|
||||
{% endif %}
|
Loading…
Reference in a new issue