allow multiple peerings per mntner and node (not per ASN)

This commit is contained in:
lare 2023-01-16 18:01:23 +01:00
parent c17ddf1a03
commit 0f1cbb3a11
3 changed files with 24 additions and 24 deletions

View file

@ -130,52 +130,52 @@ class PeeringManager:
def __generate_wg_conf(self, peering: dict): def __generate_wg_conf(self, peering: dict):
return render_template("wireguard.template.conf", peering=peering) return render_template("wireguard.template.conf", peering=peering)
def __generate_bird_conf(self, peering:dict): def __generate_bird_conf(self, peering: dict):
return render_template("bgp-peer.template.conf", peering=peering) return render_template("bgp-peer.template.conf", peering=peering)
def __install_peering(self, mode: str, peering: dict): def __install_peering(self, mode: str, peering: dict):
if mode == "add": if mode == "add":
wg_conf = self.__generate_wg_conf(peering) wg_conf = self.__generate_wg_conf(peering)
bgp_conf = self.__generate_bird_conf(peering) bgp_conf = self.__generate_bird_conf(peering)
with open(f"{self.__config['wg-configs']}/dn42_{peering['MNT'][:-4].lower()}.conf", "w") as wg_file: with open(f"{self.__config['wg-configs']}/dn42_{peering['MNT'][:-4].lower()}_{peering['asn'][-4:]}.conf", "w") as wg_file:
wg_file.write(wg_conf) wg_file.write(wg_conf)
wg_enable = subprocess.run(self.__config["wg-commands"]["enable"].replace("{MNT}",peering['MNT'][:-4].lower()).split(" ")) wg_enable = subprocess.run(self.__config["wg-commands"]["enable"].replace("{PEERING}",f"{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}").split(" "))
print(wg_enable) print(wg_enable)
wg_up = subprocess.run(self.__config["wg-commands"]["up"].replace("{MNT}",peering['MNT'][:-4].lower()).split(" ")) wg_up = subprocess.run(self.__config["wg-commands"]["up"].replace("{PEERING}",f"{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}").split(" "))
print(wg_up) print(wg_up)
time.sleep(5) time.sleep(5)
with open(f"{self.__config['bird-peers']}/dn42_{peering['MNT'][:-4].lower()}.conf", "w") as bgp_file: with open(f"{self.__config['bird-peers']}/dn42_{peering['MNT'][:-4].lower()}_{peering['asn'][-4:]}.conf", "w") as bgp_file:
bgp_file.write(bgp_conf) bgp_file.write(bgp_conf)
bgp_reload = subprocess.run(self.__config["bird-reload"].replace("{MNT}",peering['MNT'][:-4].lower()).split(" ")) bgp_reload = subprocess.run(self.__config["bird-reload"].replace("{PEERING}",f"{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}").split(" "))
print(bgp_reload) print(bgp_reload)
return 200 return 200
elif mode == "update": elif mode == "update":
wg_conf = self.__generate_wg_conf(peering) wg_conf = self.__generate_wg_conf(peering)
bgp_conf = self.__generate_bird_conf(peering) bgp_conf = self.__generate_bird_conf(peering)
with open(f"{self.__config['wg-configs']}/dn42_{peering['MNT'][:-4].lower()}.conf", "w") as wg_file: with open(f"{self.__config['wg-configs']}/dn42_{peering['MNT'][:-4].lower()}_{peering['asn'][-4:]}.conf", "w") as wg_file:
wg_file.write(wg_conf) wg_file.write(wg_conf)
wg_down = subprocess.run(self.__config["wg-commands"]["down"].replace("{MNT}",peering['MNT'][:-4].lower()).split(" ")) wg_down = subprocess.run(self.__config["wg-commands"]["down"].replace("{PEERING}",f"{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}").split(" "))
print(wg_down) print(wg_down)
wg_up = subprocess.run(self.__config["wg-commands"]["up"].replace("{MNT}",peering['MNT'][:-4].lower()).split(" ")) wg_up = subprocess.run(self.__config["wg-commands"]["up"].replace("{PEERING}",f"{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}").split(" "))
print(wg_up) print(wg_up)
time.sleep(5) time.sleep(5)
with open(f"{self.__config['bird-peers']}/dn42_{peering['MNT'][:-4].lower()}.conf", "w") as bgp_file: with open(f"{self.__config['bird-peers']}/dn42_{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}.conf", "w") as bgp_file:
bgp_file.write(bgp_conf) bgp_file.write(bgp_conf)
bgp_reload = subprocess.run(self.__config["bird-reload"].replace("{MNT}",peering['MNT'][:-4].lower()).split(" ")) bgp_reload = subprocess.run(self.__config["bird-reload"].replace("{PEERING}",f"{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}").split(" "))
print(bgp_reload) print(bgp_reload)
return 200 return 200
elif mode == "delete": elif mode == "delete":
os.remove(f"{self.__config['bird-peers']}/dn42_{peering['MNT'][:-4].lower()}.conf") os.remove(f"{self.__config['bird-peers']}/dn42_{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}.conf")
bgp_reload = subprocess.run(self.__config["bird-reload"].replace("{MNT}",peering['MNT'][:-4].lower()).split(" ")) bgp_reload = subprocess.run(self.__config["bird-reload"].replace("{PEERING}",f"{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}").split(" "))
print(bgp_reload) print(bgp_reload)
time.sleep(5) time.sleep(5)
wg_down = subprocess.run(self.__config["wg-commands"]["down"].replace("{MNT}",peering['MNT'][:-4].lower()).split(" ")) wg_down = subprocess.run(self.__config["wg-commands"]["down"].replace("{PEERING}",f"{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}").split(" "))
print(wg_down) print(wg_down)
wg_disable = subprocess.run(self.__config["wg-commands"]["disable"].replace("{MNT}",peering['MNT'][:-4].lower()).split(" ")) wg_disable = subprocess.run(self.__config["wg-commands"]["disable"].replace("{PEERING}",f"{peering['MNT'][:-4].lower()}_{peering['ASN'][-4:]}").split(" "))
print(wg_disable) print(wg_disable)
return 200 return 200

View file

@ -9,11 +9,11 @@
"production": true, //optional, default true; "production": true, //optional, default true;
"debug-mode": false, // optional; whethet to enable debugging; default false "debug-mode": false, // optional; whethet to enable debugging; default false
"wg-configs": "/etc/wireguard/", // optional, default: "/etc/wireguard/"; directory where the wireguard configs are located "wg-configs": "/etc/wireguard/", // optional, default: "/etc/wireguard/"; directory where the wireguard configs are located
"wg-commands": { // {MNT} will get replaced with the lowercase mnter without "-MNT" "wg-commands": { // {PEERING} will get replaced with the lowercase mnter without "-MNT" followed by the last four digits of the ASn
"enable": "systemctl enable wg-quick@dn42_{MNT}", //command to execute for enabling the wg-interface "enable": "./wg-services.sh enable {PEERING}", //command to execute for enabling the wg-interface
"up": "systemctl start wg-quick@dn42_{MNT}", //command to execute for starting the wg-interface "up": "./wg-services.sh start {PEERING}", //command to execute for starting the wg-interface
"down": "systemctl stop wg-quick@dn42_{MNT}", //command to execute for stopping the wg-interface "down": "./wg-services.sh stop {PEERING}", //command to execute for stopping the wg-interface
"disable": "systemctl disable wg-quick@dn42_{MNT}" //command to execute for disabling the wg-interface "disable": "./wg-services.sh disable {PEERING}" //command to execute for disabling the wg-interface
}, },
"bird-peers": "/etc/bird/peers/", // optional, default: "/etc/bird/peers/"; directory where bird peers are to be located "bird-peers": "/etc/bird/peers/", // optional, default: "/etc/bird/peers/"; directory where bird peers are to be located
"bird-reload": "birdc configure", // optional, default: "birdc configure"; command to reconfigure bird or other bgp daemon "bird-reload": "birdc configure", // optional, default: "birdc configure"; command to reconfigure bird or other bgp daemon

View file

@ -1,7 +1,7 @@
{% if peering["bgp_mp"] %} {% if peering["bgp_mp"] %}
protocol bgp dn42_{{peering["MNT"][:-4].lower()}} from dnpeers { protocol bgp dn42_{{peering["MNT"][:-4].lower()}}_{{peering["ASN"][-4:]}} from dnpeers {
neighbor {{peering["ipv6ll"]}} as {{peering["ASN"]}}; neighbor {{peering["ipv6ll"]}} as {{peering["ASN"]}};
interface "dn42_{{peering['MNT'][:-4].lower()}}"; interface "dn42_{{peering['MNT'][:-4].lower()}}_{{peering['ASN'][-4:]}}";
passive off; passive off;
ipv4 { ipv4 {
@ -20,14 +20,14 @@ protocol bgp dn42_{{peering["MNT"][:-4].lower()}} from dnpeers {
}; };
}; };
{%else%} {%else%}
protocol bgp dn42_{{peering["MNT"][:-4].lower()}}_4 from dnpeers { protocol bgp dn42_{{peering["MNT"][:-4].lower()}}_{{peering['ASN'][-4:]}}_4 from dnpeers {
neighbor {{peering["ipv4"]}} as {{peering["ASN"]}}; neighbor {{peering["ipv4"]}} as {{peering["ASN"]}};
passive off; passive off;
#import where dn42_import_filter(x,y,z); #import where dn42_import_filter(x,y,z);
#export where dn42_export_filter(x,y,z); #export where dn42_export_filter(x,y,z);
}; };
protocol bgp dn42_{{peering["MNT"][:-4].lower()}}_6 from dnpeers { protocol bgp dn42_{{peering["MNT"][:-4].lower()}}_{{peering['ASN'][-4:]}}_6 from dnpeers {
neighbor {{peering["ipv6"]}} as {{peering["ASN"]}}; neighbor {{peering["ipv6"]}} as {{peering["ASN"]}};
passive off; passive off;
#import where dn42_import_filter(x,y,z); #import where dn42_import_filter(x,y,z);