Skip to content

Instantly share code, notes, and snippets.

@manesec
Last active August 11, 2023 13:52
Show Gist options
  • Save manesec/07319d48e9ef3f3b520f867ad3605ab1 to your computer and use it in GitHub Desktop.
Save manesec/07319d48e9ef3f3b520f867ad3605ab1 to your computer and use it in GitHub Desktop.
Simple wireguard generator
import os
from pathlib import Path
gen_peers = 10
SERVER_Header_config = """
[Interface]
Address = 172.16.0.1/24
SaveConfig = true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = <SERVER_PRIVARE_KEY>
"""
SERVER_Peers_config = """
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 172.16.0.<CLIENT_IP>
"""
CLIENT_CONFIG = """
[Interface]
PrivateKey = <CLIENT_PRIVARE_KEY>
Address = 172.16.0.<CLIENT_IP>/24
[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = serverip:51820
AllowedIPs = 192.168.31.0/24
"""
# gen key
Path("genkey").mkdir(exist_ok=True)
Path("client").mkdir(exist_ok=True)
os.chdir("genkey")
print("gen server key")
os.system("wg genkey | tee serverkey | wg pubkey > serverpub")
for x in range(gen_peers):
os.system("wg genkey | tee peer%skey | wg pubkey > peer%spub" % (x,x))
# gen key
server_pub_key = open("serverpub",'r').read().strip()
server_private_key = open("serverkey",'r').read().strip()
peer = []
for x in range(gen_peers):
peer_pub = open("peer%spub" % (x),'r').read().strip()
peer_priv = open("peer%skey"% (x),'r').read().strip()
peer.append([peer_pub,peer_priv])
# gen config
os.chdir("..")
OUTPUT_CONFIG = SERVER_Header_config.replace("<SERVER_PRIVARE_KEY>",server_private_key)
START_IP = 2
x= 0
for peer_pub, peer_priv in peer:
OUTPUT_CONFIG += SERVER_Peers_config.replace("<CLIENT_PUBLIC_KEY>",peer_pub).replace("<CLIENT_IP>",str(START_IP))
f = open("client/peer%s.conf"%(x),'w')
f.writelines(CLIENT_CONFIG.replace("<CLIENT_PRIVARE_KEY>",peer_priv).replace("<SERVER_PUBLIC_KEY>",server_pub_key).replace("<CLIENT_IP>",str(START_IP)))
f.close()
START_IP += 1
x+= 1
f = open("wg0.conf",'w')
f.writelines(OUTPUT_CONFIG)
f.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment