allow multiple peerings per mntner and node (not per ASN)
This commit is contained in:
parent
c17ddf1a03
commit
0f1cbb3a11
3 changed files with 24 additions and 24 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue