gitextract_xk3afjz7/ ├── .ansible-lint ├── .dockerignore ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ └── feature_request.md │ ├── actions/ │ │ ├── setup-algo/ │ │ │ └── action.yml │ │ └── setup-uv/ │ │ └── action.yml │ ├── dependabot.yml │ └── workflows/ │ ├── docker-image.yaml │ ├── integration-tests.yml │ ├── lint.yml │ ├── main.yml │ ├── security.yml │ ├── smart-tests.yml │ └── test-effectiveness.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .yamllint ├── CLAUDE.md ├── CODEOWNERS ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── PULL_REQUEST_TEMPLATE.md ├── README.md ├── SECURITY.md ├── algo ├── algo-docker.sh ├── algo-showenv.sh ├── algo.ps1 ├── ansible.cfg ├── cloud.yml ├── config.cfg ├── deploy_client.yml ├── destroy.yml ├── docs/ │ ├── aws-credentials.md │ ├── client-android.md │ ├── client-apple-ipsec.md │ ├── client-linux-ipsec.md │ ├── client-linux-wireguard.md │ ├── client-linux.md │ ├── client-macos-wireguard.md │ ├── client-openwrt-router-wireguard.md │ ├── client-windows.md │ ├── cloud-alternative-ingress-ip.md │ ├── cloud-amazon-ec2.md │ ├── cloud-azure.md │ ├── cloud-cloudstack.md │ ├── cloud-do.md │ ├── cloud-gce.md │ ├── cloud-hetzner.md │ ├── cloud-linode.md │ ├── cloud-scaleway.md │ ├── cloud-vultr.md │ ├── deploy-from-ansible.md │ ├── deploy-from-cloudshell.md │ ├── deploy-from-docker.md │ ├── deploy-from-macos.md │ ├── deploy-from-script-or-cloud-init-to-localhost.md │ ├── deploy-from-windows.md │ ├── deploy-to-ubuntu.md │ ├── deploy-to-unsupported-cloud.md │ ├── faq.md │ ├── firewalls.md │ ├── index.md │ └── troubleshooting.md ├── files/ │ └── cloud-init/ │ ├── README.md │ ├── base.sh │ ├── base.yml │ └── sshd_config ├── input.yml ├── install.sh ├── inventory ├── library/ │ ├── gcp_compute_location_info.py │ ├── lightsail_region_facts.py │ ├── scaleway_compute.py │ └── x25519_pubkey.py ├── main.yml ├── playbooks/ │ ├── cloud-post.yml │ ├── cloud-pre.yml │ ├── rescue.yml │ └── tmpfs/ │ ├── linux.yml │ ├── macos.yml │ ├── main.yml │ └── umount.yml ├── pyproject.toml ├── pytest.ini ├── requirements.yml ├── roles/ │ ├── client/ │ │ ├── files/ │ │ │ └── libstrongswan-relax-constraints.conf │ │ ├── handlers/ │ │ │ └── main.yml │ │ └── tasks/ │ │ ├── main.yml │ │ └── systems/ │ │ ├── CentOS.yml │ │ ├── Debian.yml │ │ ├── Fedora.yml │ │ ├── Ubuntu.yml │ │ └── main.yml │ ├── cloud-azure/ │ │ ├── defaults/ │ │ │ └── main.yml │ │ ├── files/ │ │ │ └── deployment.json │ │ └── tasks/ │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── cloud-cloudstack/ │ │ └── tasks/ │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── cloud-digitalocean/ │ │ └── tasks/ │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── cloud-ec2/ │ │ ├── defaults/ │ │ │ └── main.yml │ │ ├── files/ │ │ │ └── stack.yaml │ │ └── tasks/ │ │ ├── cloudformation.yml │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── cloud-gce/ │ │ └── tasks/ │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── cloud-hetzner/ │ │ └── tasks/ │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── cloud-lightsail/ │ │ ├── files/ │ │ │ └── stack.yaml │ │ └── tasks/ │ │ ├── cloudformation.yml │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── cloud-linode/ │ │ ├── defaults/ │ │ │ └── main.yml │ │ └── tasks/ │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── cloud-openstack/ │ │ └── tasks/ │ │ ├── destroy.yml │ │ └── main.yml │ ├── cloud-scaleway/ │ │ ├── defaults/ │ │ │ └── main.yml │ │ └── tasks/ │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── cloud-vultr/ │ │ └── tasks/ │ │ ├── destroy.yml │ │ ├── main.yml │ │ └── prompts.yml │ ├── common/ │ │ ├── defaults/ │ │ │ └── main.yml │ │ ├── handlers/ │ │ │ └── main.yml │ │ ├── tasks/ │ │ │ ├── aip/ │ │ │ │ ├── digitalocean.yml │ │ │ │ ├── main.yml │ │ │ │ └── placeholder.yml │ │ │ ├── facts.yml │ │ │ ├── iptables.yml │ │ │ ├── main.yml │ │ │ ├── packages.yml │ │ │ ├── ubuntu.yml │ │ │ └── unattended-upgrades.yml │ │ └── templates/ │ │ ├── 10-algo-lo100.network.j2 │ │ ├── 10periodic.j2 │ │ ├── 50unattended-upgrades.j2 │ │ ├── 99-algo-ipv6-egress.yaml.j2 │ │ ├── rules.v4.j2 │ │ └── rules.v6.j2 │ ├── dns/ │ │ ├── defaults/ │ │ │ └── main.yml │ │ ├── files/ │ │ │ ├── 50-dnscrypt-proxy-unattended-upgrades │ │ │ └── apparmor.profile.dnscrypt-proxy │ │ ├── handlers/ │ │ │ └── main.yml │ │ ├── tasks/ │ │ │ ├── dns_adblocking.yml │ │ │ ├── main.yml │ │ │ └── ubuntu.yml │ │ └── templates/ │ │ ├── adblock.sh.j2 │ │ ├── dnscrypt-proxy/ │ │ │ ├── cache.toml.j2 │ │ │ ├── filters.toml.j2 │ │ │ ├── global.toml.j2 │ │ │ └── sources.toml.j2 │ │ ├── dnscrypt-proxy.toml.j2 │ │ └── ip-blacklist.txt.j2 │ ├── local/ │ │ └── tasks/ │ │ ├── main.yml │ │ └── prompts.yml │ ├── privacy/ │ │ ├── README.md │ │ ├── defaults/ │ │ │ └── main.yml │ │ ├── handlers/ │ │ │ └── main.yml │ │ ├── tasks/ │ │ │ ├── advanced_privacy.yml │ │ │ ├── auto_cleanup.yml │ │ │ ├── clear_history.yml │ │ │ ├── log_filtering.yml │ │ │ ├── log_rotation.yml │ │ │ └── main.yml │ │ └── templates/ │ │ ├── 46-privacy-ssh-filter.conf.j2 │ │ ├── 47-privacy-auth-filter.conf.j2 │ │ ├── 48-privacy-kernel-filter.conf.j2 │ │ ├── 49-privacy-vpn-filter.conf.j2 │ │ ├── auth-logrotate.j2 │ │ ├── clear-history-on-logout.sh.j2 │ │ ├── kern-logrotate.j2 │ │ ├── privacy-auto-cleanup.sh.j2 │ │ ├── privacy-log-cleanup.sh.j2 │ │ ├── privacy-logrotate.j2 │ │ ├── privacy-monitor.sh.j2 │ │ ├── privacy-rsyslog.conf.j2 │ │ └── privacy-shutdown-cleanup.service.j2 │ ├── ssh_tunneling/ │ │ ├── defaults/ │ │ │ └── main.yml │ │ ├── handlers/ │ │ │ └── main.yml │ │ ├── tasks/ │ │ │ └── main.yml │ │ └── templates/ │ │ └── ssh_config.j2 │ ├── strongswan/ │ │ ├── defaults/ │ │ │ └── main.yml │ │ ├── handlers/ │ │ │ └── main.yml │ │ ├── meta/ │ │ │ └── main.yml │ │ ├── tasks/ │ │ │ ├── client_configs.yml │ │ │ ├── distribute_keys.yml │ │ │ ├── ipsec_configuration.yml │ │ │ ├── main.yml │ │ │ ├── openssl.yml │ │ │ └── ubuntu.yml │ │ └── templates/ │ │ ├── 100-CustomLimitations.conf.j2 │ │ ├── charon.conf.j2 │ │ ├── client_ipsec.conf.j2 │ │ ├── client_ipsec.secrets.j2 │ │ ├── ipsec.conf.j2 │ │ ├── ipsec.secrets.j2 │ │ ├── mobileconfig.j2 │ │ └── strongswan.conf.j2 │ └── wireguard/ │ ├── defaults/ │ │ └── main.yml │ ├── files/ │ │ └── wireguard.sh │ ├── handlers/ │ │ └── main.yml │ ├── tasks/ │ │ ├── keys.yml │ │ ├── main.yml │ │ ├── mobileconfig.yml │ │ └── ubuntu.yml │ └── templates/ │ ├── client.conf.j2 │ ├── mobileconfig.j2 │ ├── server.conf.j2 │ └── vpn-dict.j2 ├── scripts/ │ ├── annotate-test-failure.sh │ ├── lint.sh │ ├── list_servers.py │ ├── test-templates.sh │ └── track-test-effectiveness.py ├── server.yml ├── tests/ │ ├── README.md │ ├── conftest.py │ ├── e2e/ │ │ ├── README.md │ │ └── test-vpn-connectivity.sh │ ├── fixtures/ │ │ ├── __init__.py │ │ └── test_variables.yml │ ├── integration/ │ │ ├── ansible-service-wrapper.py │ │ ├── ansible.cfg │ │ ├── mock-apparmor_status.sh │ │ ├── mock_modules/ │ │ │ ├── apt.py │ │ │ ├── command.py │ │ │ └── shell.py │ │ ├── test-configs/ │ │ │ ├── .provisioned │ │ │ └── 10.99.0.10/ │ │ │ ├── .config.yml │ │ │ ├── ipsec/ │ │ │ │ ├── .pki/ │ │ │ │ │ ├── .rnd │ │ │ │ │ ├── 10.99.0.10_ca_generated │ │ │ │ │ ├── cacert.pem │ │ │ │ │ ├── certs/ │ │ │ │ │ │ ├── 01.pem │ │ │ │ │ │ ├── 02.pem │ │ │ │ │ │ ├── 03.pem │ │ │ │ │ │ ├── 10.99.0.10.crt │ │ │ │ │ │ ├── 10.99.0.10_crt_generated │ │ │ │ │ │ ├── testuser1.crt │ │ │ │ │ │ ├── testuser1_crt_generated │ │ │ │ │ │ ├── testuser2.crt │ │ │ │ │ │ └── testuser2_crt_generated │ │ │ │ │ ├── ecparams/ │ │ │ │ │ │ └── secp384r1.pem │ │ │ │ │ ├── index.txt │ │ │ │ │ ├── index.txt.attr │ │ │ │ │ ├── index.txt.attr.old │ │ │ │ │ ├── index.txt.old │ │ │ │ │ ├── openssl.cnf │ │ │ │ │ ├── private/ │ │ │ │ │ │ ├── .rnd │ │ │ │ │ │ ├── 10.99.0.10.key │ │ │ │ │ │ ├── cakey.pem │ │ │ │ │ │ ├── testuser1.key │ │ │ │ │ │ ├── testuser1.p12 │ │ │ │ │ │ ├── testuser1_ca.p12 │ │ │ │ │ │ ├── testuser2.key │ │ │ │ │ │ ├── testuser2.p12 │ │ │ │ │ │ └── testuser2_ca.p12 │ │ │ │ │ ├── public/ │ │ │ │ │ │ ├── testuser1.pub │ │ │ │ │ │ └── testuser2.pub │ │ │ │ │ ├── reqs/ │ │ │ │ │ │ ├── 10.99.0.10.req │ │ │ │ │ │ ├── testuser1.req │ │ │ │ │ │ └── testuser2.req │ │ │ │ │ ├── serial │ │ │ │ │ ├── serial.old │ │ │ │ │ └── serial_generated │ │ │ │ ├── apple/ │ │ │ │ │ ├── testuser1.mobileconfig │ │ │ │ │ └── testuser2.mobileconfig │ │ │ │ └── manual/ │ │ │ │ ├── cacert.pem │ │ │ │ ├── testuser1.conf │ │ │ │ ├── testuser1.p12 │ │ │ │ ├── testuser1.secrets │ │ │ │ ├── testuser2.conf │ │ │ │ ├── testuser2.p12 │ │ │ │ └── testuser2.secrets │ │ │ └── wireguard/ │ │ │ ├── .pki/ │ │ │ │ ├── index.txt │ │ │ │ ├── preshared/ │ │ │ │ │ ├── 10.99.0.10 │ │ │ │ │ ├── testuser1 │ │ │ │ │ └── testuser2 │ │ │ │ ├── private/ │ │ │ │ │ ├── 10.99.0.10 │ │ │ │ │ ├── testuser1 │ │ │ │ │ └── testuser2 │ │ │ │ └── public/ │ │ │ │ ├── 10.99.0.10 │ │ │ │ ├── testuser1 │ │ │ │ └── testuser2 │ │ │ ├── apple/ │ │ │ │ ├── ios/ │ │ │ │ │ ├── testuser1.mobileconfig │ │ │ │ │ └── testuser2.mobileconfig │ │ │ │ └── macos/ │ │ │ │ ├── testuser1.mobileconfig │ │ │ │ └── testuser2.mobileconfig │ │ │ ├── testuser1.conf │ │ │ └── testuser2.conf │ │ └── test-run.log │ ├── test-aws-credentials.yml │ ├── test-local-config.sh │ ├── test-wireguard-async.yml │ ├── test-wireguard-fix.yml │ ├── test-wireguard-real-async.yml │ ├── test_cloud_init_template.py │ ├── test_package_preinstall.py │ ├── unit/ │ │ ├── test_ansible_12_boolean_fix.py │ │ ├── test_basic_sanity.py │ │ ├── test_boolean_variables.py │ │ ├── test_cloud_provider_configs.py │ │ ├── test_comprehensive_boolean_scan.py │ │ ├── test_config_validation.py │ │ ├── test_destroy.py │ │ ├── test_docker_localhost_deployment.py │ │ ├── test_double_templating.py │ │ ├── test_generated_configs.py │ │ ├── test_iptables_rules.py │ │ ├── test_lightsail_boto3_fix.py │ │ ├── test_list_servers.py │ │ ├── test_openssl_compatibility.py │ │ ├── test_scaleway_fix.py │ │ ├── test_strongswan_templates.py │ │ ├── test_template_rendering.py │ │ ├── test_user_management.py │ │ ├── test_wireguard_key_generation.py │ │ └── test_yaml_jinja2_expressions.py │ └── validate_jinja2_templates.py └── users.yml