コード例 #1
0
        static string GetClientConfig(KeyData clientKey, string serverKey, string serverIp, string serverPort, string subnet, int ip)
        {
            var sb = new StringBuilder();

            sb.AppendLine("[Interface]");
            sb.AppendLine($"PrivateKey = {clientKey.PrivateKey}");
            sb.AppendLine($"Address = {GetSubnetIp(subnet, ip++)}/24");
            sb.AppendLine("DNS = 94.140.14.14,94.140.15.15");
            sb.AppendLine(string.Empty);
            sb.AppendLine("[Peer]");
            sb.AppendLine($"PublicKey = {serverKey}");
            sb.AppendLine($"PresharedKey = {clientKey.PresharedKey}");
            sb.AppendLine($"Endpoint = {serverIp}:{serverPort}");
            sb.AppendLine("PersistentKeepalive = 25");
            sb.AppendLine($"AllowedIPs = {subnet}/24");

            return(sb.ToString());
        }
コード例 #2
0
        static void Main(string[] args)
        {
            bool needQrCode = false;

            try
            {
                var utf8 = new UTF8Encoding(false);

                var configFolder = Path.Combine(Directory.GetCurrentDirectory(), "config");
                Console.WriteLine("Config folder: " + configFolder);

                if (args.Length == 0)
                {
                    Console.WriteLine("Usage:");
                    Console.WriteLine("--config <server_ip> <server_port> <subnet> <clients_count>: generate wg config");
                    Console.WriteLine("--folder <config folder override>");
                    return;
                }

                for (int i = 0; i < args.Length; i++)
                {
                    var arg = args[i];

                    switch (arg)
                    {
                    case "--folder":
                    {
                        configFolder = args[++i];
                        Console.WriteLine("configFolder folder override: " + configFolder);
                        break;
                    }

                    case "--routes":
                    {
                        Directory.CreateDirectory(configFolder);
                        var fileName = args[++i];

                        Console.WriteLine("Resolving dns...");
                        var hosts = Utils.ReadConsoleLines(true);
                        ResolveDns(hosts, out string ips_cidr, out string ips_mask);

                        Console.WriteLine("Saving resolved to files...");
                        File.WriteAllText(Path.Combine(configFolder, $"cidr_{fileName}.txt"), ips_cidr);
                        File.WriteAllText(Path.Combine(configFolder, $"mask_{fileName}.txt"), ips_mask);

                        Console.WriteLine("Done");
                        break;
                    }

                    case "--cidr-convert":
                    {
                        Directory.CreateDirectory(configFolder);
                        var fileName = args[++i];

                        Console.WriteLine("Converting cidr subnets...");
                        var cidrSubnets = Utils.ReadConsoleLines(true);
                        var converted   = ConvertCIDR(cidrSubnets);

                        Console.WriteLine("Saving converted to file...");
                        File.WriteAllLines(Path.Combine(configFolder, $"{fileName}.txt"), converted);

                        Console.WriteLine("Done");
                        break;
                    }

                    case "--qrcode":
                    {
                        needQrCode = true;
                        Console.WriteLine("Generating QR codes enabled");
                        break;
                    }

                    case "--config":
                    {
                        Directory.CreateDirectory(configFolder);

                        var serverIp   = args[++i];
                        var serverPort = args[++i];
                        var subnet     = args[++i];

                        int clients = int.Parse(args[++i]);
                        if (clients > 254)
                        {
                            throw new Exception("No more than 254 clients");
                        }

                        Console.WriteLine("Generating configs...");
                        var serverKeys = KeyData.Generate();
                        var clientKeys = KeyData.Generate(clients);

                        for (int j = 0; j < clientKeys.Length; j++)
                        {
                            var configName = $"client{j + 1:D3}";
                            var configData = GetClientConfig(clientKeys[j], serverKeys.PublicKey, serverIp, serverPort, subnet, j + 2);

                            var configPath = Path.Combine(configFolder, $"{configName}.conf");
                            File.WriteAllText(configPath, configData, utf8);

                            if (needQrCode)
                            {
                                var configQRPath = Path.Combine(configFolder, $"{configName}.png");
                                Utils.GenerateQrCode(configData, configQRPath);
                            }
                        }

                        var serverConfigPath = Path.Combine(configFolder, "server.conf");
                        var serverConfigData = GetServerConfig(serverKeys.PrivateKey, clientKeys, subnet, serverPort);
                        File.WriteAllText(serverConfigPath, serverConfigData, utf8);

                        Console.WriteLine("Done");
                        break;
                    }

                    default: throw new Exception("Unknown argument: " + arg);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }