peer: add DNS server(s) attribute

This commit is contained in:
Shiz 2022-01-18 12:37:03 +01:00
parent d128a837ba
commit 7e821eb8b0
3 changed files with 11 additions and 3 deletions

View File

@ -507,13 +507,14 @@ def main():
def do_add_peer(parser: argparse.ArgumentParser, args: argparse.Namespace, ctx: WeegeeContext) -> None:
interface = WeegeePublicInterface.load(ctx, args.interface)
peer = WeegeePeer.create(ctx, args.name, interface,
routes=args.route, host=args.endpoint, port=args.port,
routes=args.route, host=args.endpoint, port=args.port, dns=args.dns,
extra=args.metadata,
)
peer.save()
add_peer = peer_commands.add_parser('create', help='add new peer')
add_peer.add_argument('-r', '--route', type=ipaddress.ip_network, action='append', default=[], help='peer route(s)')
add_peer.add_argument('-n', '--dns', type=ipaddress.ip_address, action='append', default=[], help='peer DNS server(s)')
add_peer.add_argument('-e', '--endpoint', metavar='HOST', help='peer endpoint host (optional)')
add_peer.add_argument('-p', '--port', type=int, help='peer endpoint port (optional)')
add_peer.add_argument('-d', '--metadata', action='append', help='metadata item(s)')
@ -536,13 +537,14 @@ def main():
private_key=args.private_key, public_key=args.public_key,
addresses=args.address, port=args.port, hosts=[WeegeeHost.load(ctx, name) for name in args.host or ctx.get_config().default_server_hosts],
)
server = WeegeeServer.create(ctx, args.name, interface, routes=args.route, host=args.endpoint, extra=args.metadata)
server = WeegeeServer.create(ctx, args.name, interface, routes=args.route, host=args.endpoint, dns=args.dns, extra=args.metadata)
server.save()
add_server = server_commands.add_parser('create', help='add new server')
add_server.add_argument('-H', '--host', action='append', default=[], help='server host(s)')
add_server.add_argument('-a', '--address', type=ipaddress.ip_interface, action='append', help='interface address(es)')
add_server.add_argument('-r', '--route', type=ipaddress.ip_network, default=[], action='append', help='interface route(s) for clients')
add_server.add_argument('-n', '--dns', type=ipaddress.ip_address, action='append', default=[], help='DNS server(s) for clients')
add_server.add_argument('-k', '--public-key', metavar='KEY', help='public key (optional)')
add_server.add_argument('-K', '--private-key', metavar='KEY', help='private key (optional)')
add_server.add_argument('-i', '--interface', metavar='NAME', help='interface name (optional)')

View File

@ -410,11 +410,12 @@ class WeegeePeer(WeegeeBase):
return set(p for p in cls.find_all(ctx) if p.interface.to_public() in interfaces)
@classmethod
def create(cls, ctx: WeegeeContext, name: str, interface: WeegeePublicInterface, routes: List[IPNetwork], host: O[str] = None, port: O[int] = None, extra: O[List[str]] = None) -> 'WeegeePeer':
def create(cls, ctx: WeegeeContext, name: str, interface: WeegeePublicInterface, routes: List[IPNetwork], host: O[str] = None, port: O[int] = None, dns: List[IPAddress] = [], extra: O[List[str]] = None) -> 'WeegeePeer':
return super().create(ctx, name,
interface=interface.item,
routes=routes,
host=host, port=port,
dns=dns,
extra=extra,
)

View File

@ -84,6 +84,7 @@ WEEGEE_PEER = WeegeeMeta(
'routes: [ipnet]',
'host: ?str = ',
'port: ?int = ',
'dns: [ipaddr] = []',
],
item_prefix='wg/peer',
)
@ -158,8 +159,12 @@ WEEGEE_INTERFACE_CONF_WGQUICK = WeegeeTemplate(
name='wg/interface-conf/wg-quick',
version=1,
template="""
{% set dns = peers.values() | sum(attribute='dns', start=[]) %}
[Interface]
Address = {{ interface.addresses | join(", ") }}
{% if dns -%}
DNS = {{ dns | join(", ") }}
{% endif -%}
{% if interface.port -%}
ListenPort = {{interface.port}}
{% endif -%}