mirror of
https://github.com/house-of-vanity/Wireguard-Peer-Manager.git
synced 2025-07-06 17:24:07 +00:00
Add config feature
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@ -2,8 +2,9 @@ __pycache__/
|
|||||||
clients/
|
clients/
|
||||||
server.key
|
server.key
|
||||||
server.pub
|
server.pub
|
||||||
wg0.conf
|
*.conf
|
||||||
wg0.conf_old
|
*.conf_old
|
||||||
|
!wpm_example.conf
|
||||||
*.swp
|
*.swp
|
||||||
*.swo
|
*.swo
|
||||||
hostname
|
hostname
|
||||||
|
36
gen.py
36
gen.py
@ -3,6 +3,7 @@ import logging
|
|||||||
import json
|
import json
|
||||||
import ipaddress
|
import ipaddress
|
||||||
import argparse
|
import argparse
|
||||||
|
import configparser
|
||||||
from socket import getfqdn
|
from socket import getfqdn
|
||||||
from os import system
|
from os import system
|
||||||
from base64 import b64encode, b64decode
|
from base64 import b64encode, b64decode
|
||||||
@ -22,13 +23,23 @@ my_parser = argparse.ArgumentParser()
|
|||||||
my_parser.add_argument('--update', action='store_true', default=False)
|
my_parser.add_argument('--update', action='store_true', default=False)
|
||||||
my_parser.add_argument('--peer', action='store', type=str)
|
my_parser.add_argument('--peer', action='store', type=str)
|
||||||
my_parser.add_argument('--delete', action='store', type=str)
|
my_parser.add_argument('--delete', action='store', type=str)
|
||||||
|
my_parser.add_argument('--config', action='store', type=str)
|
||||||
|
|
||||||
ips = "0.0.0.0/5, 8.0.0.0/7, 10.150.200.0/24, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4"
|
## Reading config
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
config.read('wpm.conf')
|
||||||
|
ips = config['Interface'].get('allowed_ips', '0.0.0.0/0')
|
||||||
|
dns = config['Interface'].get('dns', '8.8.8.8/32')
|
||||||
|
|
||||||
|
|
||||||
|
#ips = "0.0.0.0/5, 8.0.0.0/7, 10.150.200.0/24, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4"
|
||||||
|
|
||||||
# Execute the parse_args() method
|
# Execute the parse_args() method
|
||||||
args = my_parser.parse_args()
|
args = my_parser.parse_args()
|
||||||
peer_name = args.peer
|
peer_name = args.peer
|
||||||
del_name = args.delete
|
del_name = args.delete
|
||||||
|
config = args.config if args.config else (config['Interface'].get('config', 'wg0'))
|
||||||
|
log.info('Using %s WG config file.', config)
|
||||||
is_update = args.update
|
is_update = args.update
|
||||||
|
|
||||||
|
|
||||||
@ -53,7 +64,7 @@ class Peer:
|
|||||||
else:
|
else:
|
||||||
self.priv_key = self.generate_key()
|
self.priv_key = self.generate_key()
|
||||||
self.pub_key = self.public_key(self.priv_key)
|
self.pub_key = self.public_key(self.priv_key)
|
||||||
self.allowed_ips = allowed_ips if allowed_ips else Helper().next_ip
|
self.allowed_ips = allowed_ips if allowed_ips else Helper(cfg_path=config).next_ip
|
||||||
|
|
||||||
self.full_comment = "# priv_key: " + " ; ".join([self.priv_key, "comment: " + comment])
|
self.full_comment = "# priv_key: " + " ; ".join([self.priv_key, "comment: " + comment])
|
||||||
|
|
||||||
@ -82,7 +93,7 @@ class Peer:
|
|||||||
_wg.add_attr(None, 'PrivateKey', self.priv_key)
|
_wg.add_attr(None, 'PrivateKey', self.priv_key)
|
||||||
_wg.add_peer(helper.server_pub_key)
|
_wg.add_peer(helper.server_pub_key)
|
||||||
_wg.add_attr(helper.server_pub_key, 'AllowedIPs', f'{helper.dns}/32, {ips}')
|
_wg.add_attr(helper.server_pub_key, 'AllowedIPs', f'{helper.dns}/32, {ips}')
|
||||||
_wg.add_attr(helper.server_pub_key, 'Endpoint', helper.server_addr)
|
_wg.add_attr(helper.server_pub_key, 'Endpoint', f"{helper.server_addr}:51820")
|
||||||
_wg.add_attr(helper.server_pub_key, 'PersistentKeepalive', 10)
|
_wg.add_attr(helper.server_pub_key, 'PersistentKeepalive', 10)
|
||||||
_wg.write_file()
|
_wg.write_file()
|
||||||
system(f'qrencode -r {filename}.conf -o {filename}-qr.png')
|
system(f'qrencode -r {filename}.conf -o {filename}-qr.png')
|
||||||
@ -93,8 +104,7 @@ class Peer:
|
|||||||
class Helper:
|
class Helper:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
cfg_path="/etc/wireguard/wg0.conf",
|
cfg_path):
|
||||||
dns="8.8.8.8"):
|
|
||||||
self.cfg_path = cfg_path
|
self.cfg_path = cfg_path
|
||||||
self.server_addr = self.hostname
|
self.server_addr = self.hostname
|
||||||
self.dns = dns
|
self.dns = dns
|
||||||
@ -118,7 +128,7 @@ class Helper:
|
|||||||
def ip_list(self):
|
def ip_list(self):
|
||||||
"""Return list of IPs"""
|
"""Return list of IPs"""
|
||||||
ip_list = list()
|
ip_list = list()
|
||||||
ip_list.append(ipaddress.ip_address(Helper().wg.interface['Address'].split('/')[0]))
|
ip_list.append(ipaddress.ip_address(Helper(cfg_path=config).wg.interface['Address'].split('/')[0]))
|
||||||
for i, v in self.wg.peers.items():
|
for i, v in self.wg.peers.items():
|
||||||
try:
|
try:
|
||||||
ip_raw = v.get('AllowedIPs', None)
|
ip_raw = v.get('AllowedIPs', None)
|
||||||
@ -166,22 +176,22 @@ class Helper:
|
|||||||
|
|
||||||
def add_peer(peer_name):
|
def add_peer(peer_name):
|
||||||
log.info('Generate a new peer config.')
|
log.info('Generate a new peer config.')
|
||||||
helper = Helper()
|
helper = Helper(cfg_path=config)
|
||||||
helper.add_peer(peer_name)
|
helper.add_peer(peer_name)
|
||||||
helper.wg.write_file()
|
helper.wg.write_file()
|
||||||
system('systemctl restart wg-quick@wg0.service')
|
system(f'systemctl restart wg-quick@{config}.service')
|
||||||
|
|
||||||
def del_peer(peer_name):
|
def del_peer(peer_name):
|
||||||
log.info(f'Remove given peer {peer_name}.')
|
log.info(f'Remove given peer {peer_name}.')
|
||||||
helper = Helper()
|
helper = Helper(cfg_path=config)
|
||||||
helper.del_peer(peer_name)
|
helper.del_peer(peer_name)
|
||||||
helper.wg.write_file()
|
helper.wg.write_file()
|
||||||
system('systemctl restart wg-quick@wg0.service')
|
system(f'systemctl restart wg-quick@{config}.service')
|
||||||
|
|
||||||
def update_configs():
|
def update_configs():
|
||||||
log.info("Update all clients configs.")
|
log.info("Update all clients configs.")
|
||||||
for peer in Helper().peer_list:
|
for peer in Helper(cfg_path=config).peer_list:
|
||||||
peer.gen_config(Helper())
|
peer.gen_config(Helper(cfg_path=config))
|
||||||
|
|
||||||
if not is_update and peer_name:
|
if not is_update and peer_name:
|
||||||
add_peer(peer_name)
|
add_peer(peer_name)
|
||||||
@ -190,7 +200,7 @@ if is_update:
|
|||||||
update_configs()
|
update_configs()
|
||||||
|
|
||||||
def list_peers():
|
def list_peers():
|
||||||
return [{'name': p.comment, 'ip': p.allowed_ips, 'pub_key': p.pub_key} for p in Helper().peer_list]
|
return [{'name': p.comment, 'ip': p.allowed_ips, 'pub_key': p.pub_key} for p in Helper(cfg_path=config).peer_list]
|
||||||
|
|
||||||
if del_name:
|
if del_name:
|
||||||
del_peer(del_name)
|
del_peer(del_name)
|
||||||
|
9
wpm_example.conf
Normal file
9
wpm_example.conf
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Interface]
|
||||||
|
## allowed_ips for generated peer configs.
|
||||||
|
allowed_ips = 0.0.0.0/0
|
||||||
|
|
||||||
|
## DNS for peer configs
|
||||||
|
dns = 8.8.8.8
|
||||||
|
|
||||||
|
## wg0 is default config.
|
||||||
|
# config = wg0
|
Reference in New Issue
Block a user