Add a script for generating ipv6 addrs from pkey
This commit is contained in:
parent
3da4d20122
commit
7354664bc8
52
scripts/wg-peer-to-ipv6
Executable file
52
scripts/wg-peer-to-ipv6
Executable file
@ -0,0 +1,52 @@
|
|||||||
|
#! /usr/bin/env python3
|
||||||
|
import argparse
|
||||||
|
import sys
|
||||||
|
import logging
|
||||||
|
import ipaddress
|
||||||
|
import hashlib
|
||||||
|
import base64
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
# Handle program arguments
|
||||||
|
ap = argparse.ArgumentParser(
|
||||||
|
prog="wg-peer-to-ipv6",
|
||||||
|
description="Deterministically generate IPv6 addresses from WireGuard public keys",
|
||||||
|
)
|
||||||
|
ap.add_argument("prefix", help="IPv6 prefix", type=ipaddress.IPv6Network)
|
||||||
|
ap.add_argument("public_key", help="WireGuard public key")
|
||||||
|
ap.add_argument(
|
||||||
|
"-v", "--verbose", help="Enable verbose logging", action="store_true"
|
||||||
|
)
|
||||||
|
args = ap.parse_args()
|
||||||
|
|
||||||
|
# Configure logging
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.DEBUG if args.verbose else logging.INFO,
|
||||||
|
format="%(levelname)s: %(message)s",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Decode the public key
|
||||||
|
public_key = base64.b64decode(args.public_key)
|
||||||
|
|
||||||
|
# Hash the public key
|
||||||
|
hash = hashlib.sha256(public_key).digest()
|
||||||
|
|
||||||
|
# Figure out how many bits we have for the host part
|
||||||
|
host_bits = args.prefix.max_prefixlen - args.prefix.prefixlen
|
||||||
|
|
||||||
|
# Take that many bits from the hash
|
||||||
|
host = int.from_bytes(hash, "big") >> (256 - host_bits)
|
||||||
|
|
||||||
|
# Create the IPv6 address
|
||||||
|
ipv6 = args.prefix.network_address + host
|
||||||
|
|
||||||
|
print(ipv6)
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
0
scripts/wg-reload
Normal file → Executable file
0
scripts/wg-reload
Normal file → Executable file
Loading…
x
Reference in New Issue
Block a user