++vpn network
This commit is contained in:
parent
5716cae900
commit
cf948b03a8
7 changed files with 65 additions and 62 deletions
|
|
@ -1,59 +1,35 @@
|
|||
from django.db import transaction
|
||||
|
||||
from .models import *
|
||||
from .selectors import *
|
||||
|
||||
@transaction.atomic
|
||||
def create_vpn(*,
|
||||
def create_wireguard_vpn(*,
|
||||
public_key: str,
|
||||
network_size: int
|
||||
) -> VPNNetwork:
|
||||
network_mask: int
|
||||
) -> WireGuardVPN:
|
||||
|
||||
# Select suitable pool
|
||||
pools = VPNPool.objects.filter(subnetwork_size=network_size)
|
||||
pool = get_suitable_pool(network_mask)[0]
|
||||
|
||||
# FIXME: exception - which?
|
||||
if not pools:
|
||||
return None
|
||||
|
||||
|
||||
# last_net = ipaddress.ip_network(self.used_networks.last().address)
|
||||
# last_net_ip = last_net[0]
|
||||
|
||||
# Find all pools with the correct size
|
||||
# if last_net_ip.version == 6:
|
||||
# offset_to_next = 2**(128 - self.subnetwork_size)
|
||||
# elif last_net_ip.version == 4:
|
||||
# offset_to_next = 2**(32 - self.subnetwork_size)
|
||||
|
||||
# For each pool see if it has still space:
|
||||
# num network reversations < 2**(subnetwork_size-network_size)
|
||||
# next_net_ip = last_net_ip + offset_to_next
|
||||
|
||||
|
||||
def next_free_network(self):
|
||||
if self.num_free_networks == 0:
|
||||
# FIXME: use right exception
|
||||
raise Exception("No free networks")
|
||||
|
||||
if len(self.free_networks) > 0:
|
||||
return self.free_networks[0].address
|
||||
|
||||
if len(self.used_networks) > 0:
|
||||
"""
|
||||
sample:
|
||||
|
||||
pool = 2a0a:e5c1:200::/40
|
||||
last_used = 2a0a:e5c1:204::/48
|
||||
|
||||
next:
|
||||
"""
|
||||
|
||||
last_net = ipaddress.ip_network(self.used_networks.last().address)
|
||||
last_net_ip = last_net[0]
|
||||
|
||||
if last_net_ip.version == 6:
|
||||
offset_to_next = 2**(128 - self.subnetwork_size)
|
||||
elif last_net_ip.version == 4:
|
||||
offset_to_next = 2**(32 - self.subnetwork_size)
|
||||
|
||||
next_net_ip = last_net_ip + offset_to_next
|
||||
|
||||
return str(next_net_ip)
|
||||
else:
|
||||
# first network to be created
|
||||
return self.network
|
||||
# return str(next_net_ip)
|
||||
# else:
|
||||
# # first network to be created
|
||||
# return self.network
|
||||
|
||||
@property
|
||||
def wireguard_config_filename(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue