gitextract_eckrvmuz/ ├── .devcontainer/ │ ├── .dockerignore │ ├── Dockerfile │ ├── README.md │ └── devcontainer.json ├── .dockerignore ├── .github/ │ ├── CODEOWNERS │ ├── CONTRIBUTING.md │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.yml │ │ ├── config.yml │ │ ├── feature_request.yml │ │ └── provider.md │ ├── dependabot.yml │ ├── labels.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── ci-skip.yml │ ├── ci.yml │ ├── closed-issue.yml │ ├── configs/ │ │ └── mlc-config.json │ ├── labels.yml │ ├── markdown-skip.yml │ ├── markdown.yml │ ├── opened-issue.yml │ └── update-servers-list.yml ├── .gitignore ├── .golangci.yml ├── .markdownlint-cli2.jsonc ├── .vscode/ │ ├── extensions.json │ ├── settings.json │ └── tasks.json ├── Dockerfile ├── LICENSE ├── README.md ├── ci/ │ ├── cmd/ │ │ └── main.go │ ├── go.mod │ ├── go.sum │ └── internal/ │ ├── mullvad.go │ ├── protonvpn.go │ ├── secrets.go │ └── simple.go ├── cmd/ │ └── gluetun/ │ └── main.go ├── go.mod ├── go.sum ├── internal/ │ ├── alpine/ │ │ ├── alpine.go │ │ ├── users.go │ │ └── version.go │ ├── amneziawg/ │ │ ├── constructor.go │ │ ├── constructor_test.go │ │ ├── helpers_test.go │ │ ├── log.go │ │ ├── log_mock_test.go │ │ ├── netlinker.go │ │ ├── netlinker_mock_test.go │ │ ├── run.go │ │ └── settings.go │ ├── boringpoll/ │ │ ├── boringpoll.go │ │ └── interfaces.go │ ├── cleanup/ │ │ ├── cleanup.go │ │ ├── cleanup_test.go │ │ ├── interfaces.go │ │ ├── mocks_generate_test.go │ │ └── mocks_test.go │ ├── cli/ │ │ ├── ci.go │ │ ├── cli.go │ │ ├── clientkey.go │ │ ├── formatservers.go │ │ ├── genkey.go │ │ ├── healthcheck.go │ │ ├── interfaces.go │ │ ├── nooplogger.go │ │ ├── openvpnconfig.go │ │ ├── update.go │ │ └── warner.go │ ├── command/ │ │ ├── cmder.go │ │ ├── interfaces.go │ │ ├── interfaces_local.go │ │ ├── mocks_generate_test.go │ │ ├── mocks_local_test.go │ │ ├── run.go │ │ ├── run_test.go │ │ ├── split.go │ │ ├── split_test.go │ │ ├── start.go │ │ ├── start_test.go │ │ └── startnlog.go │ ├── configuration/ │ │ ├── settings/ │ │ │ ├── amneziawg.go │ │ │ ├── boringpoll.go │ │ │ ├── deprecated.go │ │ │ ├── dns.go │ │ │ ├── dns_test.go │ │ │ ├── dnsblacklist.go │ │ │ ├── errors.go │ │ │ ├── firewall.go │ │ │ ├── firewall_test.go │ │ │ ├── health.go │ │ │ ├── helpers/ │ │ │ │ └── belong.go │ │ │ ├── helpers.go │ │ │ ├── helpers_test.go │ │ │ ├── httpproxy.go │ │ │ ├── interfaces.go │ │ │ ├── iptables.go │ │ │ ├── log.go │ │ │ ├── mocks_generate_test.go │ │ │ ├── mocks_reader_test.go │ │ │ ├── mocks_test.go │ │ │ ├── nordvpn_retro.go │ │ │ ├── openvpn.go │ │ │ ├── openvpn_test.go │ │ │ ├── openvpnselection.go │ │ │ ├── pmtud.go │ │ │ ├── portforward.go │ │ │ ├── portforward_test.go │ │ │ ├── provider.go │ │ │ ├── publicip.go │ │ │ ├── publicip_test.go │ │ │ ├── server.go │ │ │ ├── serverselection.go │ │ │ ├── settings.go │ │ │ ├── settings_test.go │ │ │ ├── shadowsocks.go │ │ │ ├── storage.go │ │ │ ├── surfshark_retro.go │ │ │ ├── system.go │ │ │ ├── updater.go │ │ │ ├── validation/ │ │ │ │ ├── servers.go │ │ │ │ └── surfshark.go │ │ │ ├── version.go │ │ │ ├── vpn.go │ │ │ ├── wireguard.go │ │ │ └── wireguardselection.go │ │ └── sources/ │ │ ├── files/ │ │ │ ├── amneziawg.go │ │ │ ├── amneziawg_test.go │ │ │ ├── helpers.go │ │ │ ├── interfaces.go │ │ │ ├── reader.go │ │ │ ├── wireguard.go │ │ │ └── wireguard_test.go │ │ └── secrets/ │ │ ├── amneziawg.go │ │ ├── helpers.go │ │ ├── interfaces.go │ │ ├── reader.go │ │ ├── reader_test.go │ │ └── wireguard.go │ ├── constants/ │ │ ├── colors.go │ │ ├── countries.go │ │ ├── openvpn/ │ │ │ ├── auth.go │ │ │ ├── ciphers.go │ │ │ ├── paths.go │ │ │ └── versions.go │ │ ├── paths.go │ │ ├── protocol.go │ │ ├── providers/ │ │ │ ├── providers.go │ │ │ └── providers_test.go │ │ ├── status.go │ │ └── vpn/ │ │ └── protocol.go │ ├── dns/ │ │ ├── leak.go │ │ ├── leak_test.go │ │ ├── logger.go │ │ ├── loop.go │ │ ├── plaintext.go │ │ ├── run.go │ │ ├── settings.go │ │ ├── setup.go │ │ ├── state/ │ │ │ ├── settings.go │ │ │ └── state.go │ │ ├── status.go │ │ ├── ticker.go │ │ └── update.go │ ├── firewall/ │ │ ├── enable.go │ │ ├── firewall.go │ │ ├── interfaces.go │ │ ├── iptables/ │ │ │ ├── atomic.go │ │ │ ├── cmd_matcher_test.go │ │ │ ├── delete.go │ │ │ ├── delete_test.go │ │ │ ├── firewall.go │ │ │ ├── interfaces.go │ │ │ ├── ip6tables.go │ │ │ ├── iptables.go │ │ │ ├── iptablesmix.go │ │ │ ├── list.go │ │ │ ├── list_test.go │ │ │ ├── mocks_generate_test.go │ │ │ ├── mocks_test.go │ │ │ ├── parse.go │ │ │ ├── parse_test.go │ │ │ ├── support.go │ │ │ ├── support_test.go │ │ │ └── tcp.go │ │ ├── logger.go │ │ ├── outboundsubnets.go │ │ ├── ports.go │ │ ├── redirect.go │ │ ├── vpn.go │ │ └── wrappers.go │ ├── format/ │ │ ├── duration.go │ │ └── duration_test.go │ ├── healthcheck/ │ │ ├── checker.go │ │ ├── checker_test.go │ │ ├── client.go │ │ ├── dns/ │ │ │ └── dns.go │ │ ├── handler.go │ │ ├── icmp/ │ │ │ ├── apple_ipv4.go │ │ │ ├── echo.go │ │ │ ├── interfaces.go │ │ │ └── listen.go │ │ ├── interfaces.go │ │ ├── run.go │ │ └── server.go │ ├── httpproxy/ │ │ ├── accept.go │ │ ├── auth.go │ │ ├── handler.go │ │ ├── handler_test.go │ │ ├── http.go │ │ ├── https.go │ │ ├── logger.go │ │ ├── loop.go │ │ ├── run.go │ │ ├── server.go │ │ ├── settings.go │ │ ├── state/ │ │ │ ├── settings.go │ │ │ └── state.go │ │ └── status.go │ ├── httpserver/ │ │ ├── address.go │ │ ├── helpers_test.go │ │ ├── logger.go │ │ ├── logger_mock_test.go │ │ ├── run.go │ │ ├── run_test.go │ │ ├── server.go │ │ ├── server_test.go │ │ ├── settings.go │ │ └── settings_test.go │ ├── loopstate/ │ │ ├── apply.go │ │ ├── get.go │ │ ├── lock.go │ │ ├── set.go │ │ └── state.go │ ├── mod/ │ │ ├── configgz_linux.go │ │ ├── info_linux.go │ │ ├── load_linux.go │ │ ├── probe_linux.go │ │ └── probe_unspecified.go │ ├── models/ │ │ ├── alias.go │ │ ├── build.go │ │ ├── connection.go │ │ ├── filters.go │ │ ├── markdown.go │ │ ├── markdown_test.go │ │ ├── publicip.go │ │ ├── server.go │ │ ├── server_test.go │ │ ├── servers.go │ │ ├── servers_test.go │ │ └── sort.go │ ├── natpmp/ │ │ ├── checks.go │ │ ├── checks_test.go │ │ ├── externaladdress.go │ │ ├── externaladdress_test.go │ │ ├── helpers_test.go │ │ ├── natpmp.go │ │ ├── natpmp_test.go │ │ ├── portmapping.go │ │ ├── portmapping_test.go │ │ ├── rpc.go │ │ └── rpc_test.go │ ├── netlink/ │ │ ├── address.go │ │ ├── conntrack_linux.go │ │ ├── conntrack_unspecified.go │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── family.go │ │ ├── family_linux.go │ │ ├── helpers_test.go │ │ ├── interfaces.go │ │ ├── ipv6.go │ │ ├── link.go │ │ ├── link_linux.go │ │ ├── link_test.go │ │ ├── netlink.go │ │ ├── netlink_unspecified.go │ │ ├── route.go │ │ ├── route_linux.go │ │ ├── rule.go │ │ ├── rule_linux.go │ │ ├── rule_test.go │ │ ├── wireguard_linux.go │ │ └── wireguard_test.go │ ├── openvpn/ │ │ ├── auth.go │ │ ├── config.go │ │ ├── extract/ │ │ │ ├── data.go │ │ │ ├── extract.go │ │ │ ├── extract_test.go │ │ │ ├── extractor.go │ │ │ ├── helpers_test.go │ │ │ ├── pem.go │ │ │ ├── pem_test.go │ │ │ ├── read.go │ │ │ └── read_test.go │ │ ├── interfaces.go │ │ ├── logger.go │ │ ├── logs.go │ │ ├── logs_test.go │ │ ├── openvpn.go │ │ ├── paths.go │ │ ├── pkcs8/ │ │ │ ├── algorithms.go │ │ │ ├── algorithms_test.go │ │ │ ├── descbc.go │ │ │ ├── testdata/ │ │ │ │ ├── readme.txt │ │ │ │ ├── rsa_pkcs8_aes128cbc_decrypted.pem │ │ │ │ ├── rsa_pkcs8_aes128cbc_encrypted.pem │ │ │ │ ├── rsa_pkcs8_descbc_decrypted.pem │ │ │ │ └── rsa_pkcs8_descbc_encrypted.pem │ │ │ ├── upgrade.go │ │ │ └── upgrade_test.go │ │ ├── run.go │ │ ├── start.go │ │ ├── start_linux.go │ │ ├── start_unspecified.go │ │ ├── stream.go │ │ └── version.go │ ├── pmtud/ │ │ ├── constants/ │ │ │ ├── lengths.go │ │ │ ├── syscall_unix.go │ │ │ └── syscall_windows.go │ │ ├── icmp/ │ │ │ ├── apple_ipv4.go │ │ │ ├── check.go │ │ │ ├── df_linux.go │ │ │ ├── df_unspecified.go │ │ │ ├── df_windows.go │ │ │ ├── errors.go │ │ │ ├── icmp.go │ │ │ ├── interfaces.go │ │ │ ├── ipv4.go │ │ │ ├── ipv6.go │ │ │ ├── message.go │ │ │ └── multi.go │ │ ├── interfaces.go │ │ ├── ip/ │ │ │ ├── family.go │ │ │ ├── ipheader.go │ │ │ ├── ipheader_darwin.go │ │ │ ├── ipheader_unspecified.go │ │ │ ├── ipv4_unix.go │ │ │ ├── ipv4_unspecified.go │ │ │ ├── ipv4_windows.go │ │ │ ├── source.go │ │ │ ├── source_unix.go │ │ │ └── source_windows.go │ │ ├── nooplogger.go │ │ ├── pmtud.go │ │ ├── pmtud_integration_test.go │ │ ├── tcp/ │ │ │ ├── helpers_test.go │ │ │ ├── interfaces.go │ │ │ ├── mocks_generate_test.go │ │ │ ├── mocks_test.go │ │ │ ├── mss.go │ │ │ ├── mss_test.go │ │ │ ├── multi.go │ │ │ ├── packet.go │ │ │ ├── tcp.go │ │ │ ├── tcp_darwin.go │ │ │ ├── tcp_integration_test.go │ │ │ ├── tcp_linux.go │ │ │ ├── tcp_notdarwin.go │ │ │ ├── tcp_test.go │ │ │ ├── tcp_unix.go │ │ │ ├── tcp_unspecified.go │ │ │ ├── tcp_windows.go │ │ │ ├── tcpheader.go │ │ │ └── tracker.go │ │ ├── test/ │ │ │ ├── mtu.go │ │ │ └── mtu_test.go │ │ └── vpn.go │ ├── portforward/ │ │ ├── interfaces.go │ │ ├── loop.go │ │ ├── service/ │ │ │ ├── command.go │ │ │ ├── command_test.go │ │ │ ├── fs.go │ │ │ ├── helpers.go │ │ │ ├── helpers_test.go │ │ │ ├── interfaces.go │ │ │ ├── mocks_generate_test.go │ │ │ ├── mocks_test.go │ │ │ ├── service.go │ │ │ ├── settings.go │ │ │ ├── start.go │ │ │ └── stop.go │ │ └── settings.go │ ├── pprof/ │ │ ├── helpers_test.go │ │ ├── logger_mock_test.go │ │ ├── server.go │ │ ├── server_test.go │ │ ├── settings.go │ │ └── settings_test.go │ ├── provider/ │ │ ├── airvpn/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── api.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── common/ │ │ │ ├── mocks.go │ │ │ ├── mocks_generate_test.go │ │ │ ├── portforward.go │ │ │ ├── storage.go │ │ │ └── updater.go │ │ ├── custom/ │ │ │ ├── connection.go │ │ │ ├── interfaces.go │ │ │ ├── openvpnconf.go │ │ │ ├── openvpnconf_test.go │ │ │ └── provider.go │ │ ├── cyberghost/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── constants.go │ │ │ ├── countries.go │ │ │ ├── hosttoserver.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── example/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── api.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── expressvpn/ │ │ │ ├── connection.go │ │ │ ├── connection_test.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── hardcoded.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── fastestvpn/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── api.go │ │ │ ├── api_test.go │ │ │ ├── hosttoserver.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── giganews/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── filename.go │ │ │ ├── hosttoserver.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── hidemyass/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── hosts.go │ │ │ ├── hosttourl.go │ │ │ ├── index.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ ├── updater.go │ │ │ └── url.go │ │ ├── ipvanish/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── filename.go │ │ │ ├── filename_test.go │ │ │ ├── hosttoserver.go │ │ │ ├── hosttoserver_test.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ ├── servers_test.go │ │ │ └── updater.go │ │ ├── ivpn/ │ │ │ ├── connection.go │ │ │ ├── connection_test.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── api.go │ │ │ ├── api_test.go │ │ │ ├── resolve.go │ │ │ ├── roundtrip_test.go │ │ │ ├── servers.go │ │ │ ├── servers_test.go │ │ │ └── updater.go │ │ ├── mullvad/ │ │ │ ├── connection.go │ │ │ ├── connection_test.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── api.go │ │ │ ├── hosttoserver.go │ │ │ ├── ips.go │ │ │ ├── ips_test.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── nordvpn/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── api.go │ │ │ ├── models.go │ │ │ ├── name.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── perfectprivacy/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── portforward.go │ │ │ ├── portforward_test.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── citytoserver.go │ │ │ ├── filename.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── privado/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── privateinternetaccess/ │ │ │ ├── connection.go │ │ │ ├── httpclient.go │ │ │ ├── httpclient_test.go │ │ │ ├── openvpnconf.go │ │ │ ├── portforward.go │ │ │ ├── portforward_test.go │ │ │ ├── presets/ │ │ │ │ └── presets.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── api.go │ │ │ ├── hosttoserver.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── privatevpn/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── portforward.go │ │ │ ├── portforward_test.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── countries.go │ │ │ ├── filename.go │ │ │ ├── hosttoserver.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── protonvpn/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── portforward.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── api.go │ │ │ ├── countries.go │ │ │ ├── iptoserver.go │ │ │ ├── servers.go │ │ │ ├── updater.go │ │ │ └── version.go │ │ ├── provider.go │ │ ├── providers.go │ │ ├── purevpn/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── compare.go │ │ │ ├── compare_test.go │ │ │ ├── hosttoserver.go │ │ │ ├── parse.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── slickvpn/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── surfshark/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ ├── servers/ │ │ │ │ └── locationdata.go │ │ │ └── updater/ │ │ │ ├── api.go │ │ │ ├── api_test.go │ │ │ ├── hosttoserver.go │ │ │ ├── location.go │ │ │ ├── remaining.go │ │ │ ├── resolve.go │ │ │ ├── roundtrip_test.go │ │ │ ├── servers.go │ │ │ ├── updater.go │ │ │ └── zip.go │ │ ├── torguard/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── filename.go │ │ │ ├── hosttoserver.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── utils/ │ │ │ ├── cipher.go │ │ │ ├── cipher_test.go │ │ │ ├── connection.go │ │ │ ├── connection_test.go │ │ │ ├── filtering.go │ │ │ ├── filtering_test.go │ │ │ ├── logger.go │ │ │ ├── nofetcher.go │ │ │ ├── openvpn.go │ │ │ ├── pick.go │ │ │ ├── pick_test.go │ │ │ ├── port.go │ │ │ ├── port_test.go │ │ │ ├── portforward.go │ │ │ ├── protocol.go │ │ │ └── protocol_test.go │ │ ├── vpnsecure/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── helpers_test.go │ │ │ ├── hosttoserver.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ ├── testdata/ │ │ │ │ └── index.html │ │ │ ├── updater.go │ │ │ ├── website.go │ │ │ └── website_test.go │ │ ├── vpnunlimited/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── constants.go │ │ │ ├── hosttoserver.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ ├── vyprvpn/ │ │ │ ├── connection.go │ │ │ ├── openvpnconf.go │ │ │ ├── provider.go │ │ │ └── updater/ │ │ │ ├── filename.go │ │ │ ├── hosttoserver.go │ │ │ ├── resolve.go │ │ │ ├── servers.go │ │ │ └── updater.go │ │ └── windscribe/ │ │ ├── connection.go │ │ ├── connection_test.go │ │ ├── openvpnconf.go │ │ ├── provider.go │ │ └── updater/ │ │ ├── api.go │ │ ├── servers.go │ │ └── updater.go │ ├── publicip/ │ │ ├── api/ │ │ │ ├── api.go │ │ │ ├── api_test.go │ │ │ ├── cloudflare.go │ │ │ ├── echoip.go │ │ │ ├── errors.go │ │ │ ├── interfaces.go │ │ │ ├── ip2location.go │ │ │ ├── ipinfo.go │ │ │ ├── multi.go │ │ │ ├── resilient.go │ │ │ └── resilient_test.go │ │ ├── data.go │ │ ├── fs.go │ │ ├── interfaces.go │ │ ├── loop.go │ │ └── update.go │ ├── routing/ │ │ ├── conversion.go │ │ ├── conversion_test.go │ │ ├── default.go │ │ ├── enable.go │ │ ├── errors.go │ │ ├── inbound.go │ │ ├── ip.go │ │ ├── ip_test.go │ │ ├── local.go │ │ ├── logger.go │ │ ├── mocks_generate_test.go │ │ ├── mocks_test.go │ │ ├── outbound.go │ │ ├── routes.go │ │ ├── routing.go │ │ ├── rules.go │ │ ├── rules_test.go │ │ ├── tables_linux.go │ │ ├── tables_unspecified.go │ │ └── vpn.go │ ├── server/ │ │ ├── dns.go │ │ ├── handler.go │ │ ├── handlerv0.go │ │ ├── handlerv1.go │ │ ├── helpers.go │ │ ├── interfaces.go │ │ ├── logger.go │ │ ├── middlewares/ │ │ │ ├── auth/ │ │ │ │ ├── apikey.go │ │ │ │ ├── basic.go │ │ │ │ ├── configfile.go │ │ │ │ ├── configfile_test.go │ │ │ │ ├── format.go │ │ │ │ ├── interfaces.go │ │ │ │ ├── interfaces_local.go │ │ │ │ ├── lookup.go │ │ │ │ ├── lookup_test.go │ │ │ │ ├── middleware.go │ │ │ │ ├── middleware_test.go │ │ │ │ ├── mocks_generate_test.go │ │ │ │ ├── mocks_test.go │ │ │ │ ├── none.go │ │ │ │ └── settings.go │ │ │ └── log/ │ │ │ ├── interfaces.go │ │ │ └── middleware.go │ │ ├── openvpn.go │ │ ├── portforward.go │ │ ├── publicip.go │ │ ├── server.go │ │ ├── updater.go │ │ ├── vpn.go │ │ └── wrappers.go │ ├── shadowsocks/ │ │ ├── logger.go │ │ ├── loop.go │ │ └── state.go │ ├── storage/ │ │ ├── choices.go │ │ ├── copy.go │ │ ├── copy_test.go │ │ ├── filter.go │ │ ├── flush.go │ │ ├── formatting.go │ │ ├── hardcoded.go │ │ ├── hardcoded_test.go │ │ ├── helpers.go │ │ ├── merge.go │ │ ├── mocks_generate_test.go │ │ ├── mocks_test.go │ │ ├── read.go │ │ ├── read_test.go │ │ ├── servers.go │ │ ├── servers.json │ │ ├── storage.go │ │ └── sync.go │ ├── subnet/ │ │ └── subsets.go │ ├── tun/ │ │ ├── check.go │ │ ├── check_unspecified.go │ │ ├── create.go │ │ ├── create_unspecified.go │ │ ├── tun.go │ │ └── tun_test.go │ ├── updater/ │ │ ├── html/ │ │ │ ├── attribute.go │ │ │ ├── bfs.go │ │ │ ├── css.go │ │ │ ├── errors.go │ │ │ ├── fetch.go │ │ │ ├── fetch_test.go │ │ │ └── match.go │ │ ├── interfaces.go │ │ ├── loop/ │ │ │ ├── loop.go │ │ │ └── state.go │ │ ├── openvpn/ │ │ │ ├── extract.go │ │ │ ├── fetch.go │ │ │ └── multifetch.go │ │ ├── providers.go │ │ ├── resolver/ │ │ │ ├── interfaces.go │ │ │ ├── ips.go │ │ │ ├── ips_test.go │ │ │ ├── net.go │ │ │ ├── parallel.go │ │ │ └── repeat.go │ │ ├── unzip/ │ │ │ ├── extract.go │ │ │ ├── fetch.go │ │ │ └── unzip.go │ │ └── updater.go │ ├── version/ │ │ ├── github.go │ │ └── version.go │ ├── vpn/ │ │ ├── amneziawg.go │ │ ├── cleanup.go │ │ ├── helpers.go │ │ ├── interfaces.go │ │ ├── loop.go │ │ ├── openvpn.go │ │ ├── portforward.go │ │ ├── run.go │ │ ├── settings.go │ │ ├── state/ │ │ │ ├── state.go │ │ │ └── vpn.go │ │ ├── status.go │ │ ├── tunnelup.go │ │ ├── wireguard.go │ │ └── wireguard_test.go │ └── wireguard/ │ ├── address.go │ ├── address_test.go │ ├── config.go │ ├── config_test.go │ ├── constructor.go │ ├── constructor_test.go │ ├── helpers_test.go │ ├── log.go │ ├── log_mock_test.go │ ├── log_test.go │ ├── netlink_integration_test.go │ ├── netlinker.go │ ├── netlinker_mock_test.go │ ├── route.go │ ├── route_test.go │ ├── rule.go │ ├── rule_test.go │ ├── run.go │ ├── settings.go │ ├── settings_test.go │ ├── wireguard_linux.go │ └── wireguard_unspecified.go └── maintenance.md