2021-07-13 13:59:59 +08:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import os
|
|
|
|
import json
|
|
|
|
import traceback
|
|
|
|
|
|
|
|
try:
|
|
|
|
with open("config.json") as f:
|
|
|
|
content = f.read()
|
|
|
|
config = json.loads(content)
|
|
|
|
print("[WARN] Found a valid config. Creation of server is skipped.")
|
|
|
|
exit(0)
|
|
|
|
except Exception:
|
|
|
|
print(traceback.format_exc())
|
|
|
|
|
|
|
|
op_mode = input("What will this node act as? (C)lient [S]erver [M]ixed: ").strip().lower()
|
|
|
|
if not op_mode:
|
|
|
|
print("Default to client mode.")
|
|
|
|
op_mode = "c"
|
|
|
|
|
|
|
|
if op_mode not in ("c", "s", "m"):
|
|
|
|
print("Invalid node mode. Please try again.")
|
|
|
|
exit(1)
|
|
|
|
|
|
|
|
udp2raw_config = {
|
|
|
|
"server": [],
|
|
|
|
"client": []
|
|
|
|
}
|
|
|
|
|
|
|
|
if op_mode in ("s", "m"):
|
|
|
|
print("====== Configuring udp2raw server ======")
|
|
|
|
|
|
|
|
while True:
|
|
|
|
print("====== Adding UDP2RAW Server {} ======".format(len(udp2raw_config["server"]) + 1))
|
|
|
|
|
|
|
|
while True:
|
|
|
|
udp_server_port = input("Please select an Internet-Facing port for incoming udp2raw connection: ").strip()
|
|
|
|
if not udp_server_port:
|
|
|
|
print("A udp2raw listen port is required. Try again.")
|
|
|
|
continue
|
|
|
|
break
|
|
|
|
|
|
|
|
while True:
|
|
|
|
udp_server_password = input("Please input udp2raw tunnel password: ").strip()
|
|
|
|
if not udp_server_password:
|
|
|
|
print("A udp2raw tunnel password is required. Try again.")
|
|
|
|
continue
|
|
|
|
break
|
|
|
|
|
|
|
|
udp2raw_config["server"].append({
|
|
|
|
"port": udp_server_port,
|
|
|
|
"password": udp_server_password
|
|
|
|
})
|
|
|
|
|
|
|
|
if not input("Add more udp2raw server? (Keep empty to finish)").strip():
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
|
|
if op_mode in ("c", "m"):
|
|
|
|
print("====== Configuring udp2raw client ======")
|
|
|
|
|
|
|
|
while True:
|
|
|
|
print("====== Adding UDP2RAW Client {} ======".format(len(udp2raw_config["client"]) + 1))
|
|
|
|
|
|
|
|
while True:
|
|
|
|
udp_server_address = input("Please input remote node internet-facing udp2raw ip:port : ").strip()
|
|
|
|
if not udp_server_address:
|
|
|
|
print("A udp2raw remote server information is required. Try again.")
|
|
|
|
continue
|
|
|
|
break
|
|
|
|
|
|
|
|
while True:
|
|
|
|
udp_server_password = input("Please input udp2raw tunnel password: ").strip()
|
|
|
|
if not udp_server_password:
|
|
|
|
print("A udp2raw tunnel password is required. Try again.")
|
|
|
|
continue
|
|
|
|
break
|
|
|
|
|
|
|
|
udp2raw_config["client"].append({
|
|
|
|
"remote": udp_server_address,
|
|
|
|
"password": udp_server_password,
|
|
|
|
"port": 28150 + len(udp2raw_config["client"])
|
|
|
|
})
|
|
|
|
|
|
|
|
if not input("Add more udp2raw client? (Keep empty to finish)").strip():
|
|
|
|
break
|
|
|
|
|
|
|
|
|
|
|
|
wg_prik = os.getenv("WG_MYPRIK")
|
|
|
|
wg_pubk = os.getenv("WG_MYPUBK")
|
|
|
|
wg_mtu = "1000"
|
2021-07-13 15:16:10 +08:00
|
|
|
wg_public_ip = os.getenv("WG_PUBLICIP")
|
|
|
|
|
|
|
|
print('''
|
|
|
|
|
|
|
|
====== Your Wireguard Public Key ======
|
|
|
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
======= Your Public IP Address ========
|
|
|
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
=======================================
|
|
|
|
|
|
|
|
'''.format(wg_pubk, wg_public_ip))
|
2021-07-13 13:59:59 +08:00
|
|
|
|
|
|
|
ifname = input("Input new wireguard interface name (wg0):").strip() or "wg0"
|
|
|
|
listen_port = input("Input new wireguard listen port (51820): ").strip() or "51820"
|
|
|
|
while True:
|
|
|
|
ifip = input("Input wireguard interface ip (Example: 10.0.0.1): ").strip()
|
|
|
|
if not ifip:
|
|
|
|
print("You MUST set a valid wireguard interface IP. Try Again.")
|
|
|
|
continue
|
|
|
|
break
|
|
|
|
|
|
|
|
peers = []
|
|
|
|
|
|
|
|
while True:
|
|
|
|
print("====== Adding Peer {} ======".format(len(peers) + 1))
|
|
|
|
while True:
|
|
|
|
peer_pubk = input("Enter Wireguard Peer Public Key: ").strip()
|
|
|
|
if not peer_pubk:
|
|
|
|
print("A public key is required. Try Again.")
|
|
|
|
continue
|
|
|
|
break
|
|
|
|
while True:
|
|
|
|
peer_allowed = input("Enter Wireguard Peer AllowedIPs (CIDR, Example: 10.0.0.0/24): ").strip()
|
|
|
|
if not peer_allowed:
|
|
|
|
print("Peer allowed ips required. Try Again.")
|
|
|
|
continue
|
|
|
|
break
|
|
|
|
|
|
|
|
print(">>> Choose from following udp2raw clients <<<")
|
|
|
|
for index, client_info in enumerate(udp2raw_config["client"]):
|
|
|
|
print("[{}] UDP2Raw Tunnel to Remote {}".format(index + 1, client_info["remote"]))
|
|
|
|
|
|
|
|
peer_endpoint = input("Enter Wireguard Peer Endpoint (ID from tunnel list, keep empty on server side): ").strip()
|
|
|
|
peer_keepalive = input("Enter Wireguard Peer Keep Alive seconds (Keep empty on server side): ").strip()
|
|
|
|
|
|
|
|
peers.append({
|
|
|
|
"pubkey": peer_pubk,
|
|
|
|
"allowed": peer_allowed,
|
|
|
|
"endpoint": peer_endpoint,
|
|
|
|
"keepalive": peer_keepalive
|
|
|
|
})
|
|
|
|
|
|
|
|
if not input("Add more peers? (Keep empty to finish)").strip():
|
|
|
|
break
|
|
|
|
|
|
|
|
print("Saving to local config...")
|
|
|
|
|
|
|
|
config = {
|
|
|
|
"mode": op_mode,
|
|
|
|
"pubkey": wg_pubk,
|
|
|
|
"prikey": wg_prik,
|
|
|
|
"mtu": wg_mtu,
|
|
|
|
"interface": ifname,
|
|
|
|
"ip": ifip,
|
|
|
|
"listen": listen_port,
|
|
|
|
"peers": peers,
|
|
|
|
"udp2raw": udp2raw_config
|
|
|
|
}
|
|
|
|
|
|
|
|
with open("config.json", "w") as f:
|
|
|
|
f.write(json.dumps(config, ensure_ascii=False))
|