From 9ff8149e249f42fc6e53a0569520173d38505e65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20M=C3=A4rkle?= Date: Fri, 19 May 2023 10:49:23 +0200 Subject: [PATCH] basic headscale installation --- Readme_Stefan.txt | 98 -------------------- inv | 2 + roles/aws_graviton_nano/tasks/main.yml | 2 +- roles/common-server/tasks/main.yml | 25 +++++ roles/headscale-server/tasks/main.yml | 36 +++++++ roles/headscale-server/templates/config.yaml | 38 ++++++++ 6 files changed, 102 insertions(+), 99 deletions(-) delete mode 100644 Readme_Stefan.txt create mode 100644 inv create mode 100644 roles/common-server/tasks/main.yml create mode 100644 roles/headscale-server/templates/config.yaml diff --git a/Readme_Stefan.txt b/Readme_Stefan.txt deleted file mode 100644 index 8c561f1..0000000 --- a/Readme_Stefan.txt +++ /dev/null @@ -1,98 +0,0 @@ - _____ _ -| ___| __ ___ | |__ ___ -| |_ | '__/ _ \| '_ \ / _ \ -| _|| | | (_) | | | | __/ -|_| |_| \___/|_| |_|\___| - -__ __ _ _ _ _ _ -\ \ / /__(_) |__ _ __ __ _ ___| |__ | |_ ___ _ __ | | - \ \ /\ / / _ \ | '_ \| '_ \ / _` |/ __| '_ \| __/ _ \ '_ \| | - \ V V / __/ | | | | | | | (_| | (__| | | | || __/ | | |_| - \_/\_/ \___|_|_| |_|_| |_|\__,_|\___|_| |_|\__\___|_| |_(_) - - - -Lieber Iljas, - -Dein Weihnachtsgeschenk dieses Jahr ist mit Arbeit verbunden - Arbeit -Deinerseits wohlgemerkt ;-) - -Um es zu genießen mußt Du zuerst: -- dem mächtigen amazon Konzern noch weiter in die Hände spielen und Dir -einen aws Account einrichten -- auf Deinem nagelneuen AWS Account unter Sicherheit/IAM einen Benutzer -hinzufügen mit Zugriffstyp "Programmgesteuerter Zugriff" -- die dabei generierten Tokens Dir merken und z.B. in Deine .bashrc -eintragen als Umgebungsvariablen `AWS_ACCESS_KEY_ID` und `AWS_SECRET_ACCESS_KEY` -- Dir ansible installieren - und da Du wahrscheinlich verstehen willst was -passiert, ist das ansible lernen die eigentliche Arbeit ;-) -- das ansible-Playbook anschauen und ausführen, dass Stefan erstellt hat und -das unter wg-aws geclont ist -- Dir auf Deinen Geräten wireguard als VPN Software installieren -- die Konfigurationen, die das ansible Playbook erstellt hat auf Deinen -Geräten importieren (als Datei oder qrcode) -- Dich über Deinen neuen mini-Cloud-VPN-Server freuen auf dem Du auch sonst -alles machen kannst was Du magst -- mit der Inbetriebnahme den unten stehenden Gutschein bei uns einlösen -;-) - leider bietet aws nämlich kein Prepaid an ... - - _ _ _ ___ -__ _____ _ __ | | (_)_ __ __| | __ _ ( _ ) -\ \ / / _ \| '_ \ | | | | '_ \ / _` |/ _` | / _ \/\ - \ V / (_) | | | | | |___| | | | | (_| | (_| | | (_> < - \_/ \___/|_| |_| |_____|_|_| |_|\__,_|\__,_| \___/\/ - - ____ _ __ -/ ___|| |_ ___ / _| __ _ _ __ -\___ \| __/ _ \ |_ / _` | '_ \ - ___) | || __/ _| (_| | | | | -|____/ \__\___|_| \__,_|_| |_| - - - - - - -========================= X8 ================================ X8 ========== - - - - - - - ____ _ _ _ _ _ _ - / ___|_ _| |_ ___ ___| |__ ___(_)_ __ _ / | | | __ _| |__ _ __ -| | _| | | | __/ __|/ __| '_ \ / _ \ | '_ \(_) | | _ | |/ _` | '_ \| '__| -| |_| | |_| | |_\__ \ (__| | | | __/ | | | |_ | | | |_| | (_| | | | | | - \____|\__,_|\__|___/\___|_| |_|\___|_|_| |_(_) |_| \___/ \__,_|_| |_|_| - - ____ _ _ - / ___|_ __ __ ___ _(_) |_ ___ _ __ -| | _| '__/ _` \ \ / / | __/ _ \| '_ \ -| |_| | | | (_| |\ V /| | || (_) | | | | - \____|_| \__,_| \_/ |_|\__\___/|_| |_| - - _ _ _ ____ _ -| |_| || | __ _ _ __ __ _ _ __ ___ / ___| _ __ ___ | |_ -| __| || |_ / _` | | '_ \ / _` | '_ \ / _ \ \___ \| '_ \ / _ \| __| -| |_|__ _| (_| |_| | | | (_| | | | | (_) | ___) | |_) | (_) | |_ - \__| |_| \__, (_)_| |_|\__,_|_| |_|\___/ |____/| .__/ \___/ \__| - |___/ |_| - _ _ _ _ -(_)_ __ ___| |_ __ _ _ __ ___ ___ | |__ ___(_) -| | '_ \/ __| __/ _` | '_ \ / __/ _ \ | '_ \ / _ \ | -| | | | \__ \ || (_| | | | | (_| __/ | |_) | __/ | -|_|_| |_|___/\__\__,_|_| |_|\___\___| |_.__/ \___|_| - - _ - __ _ _ __ ___ __ _ _______ _ __ __ _____| |__ - / _` | '_ ` _ \ / _` |_ / _ \| '_ \ \ \ /\ / / _ \ '_ \ -| (_| | | | | | | (_| |/ / (_) | | | | \ V V / __/ |_) | - \__,_|_| |_| |_|\__,_/___\___/|_| |_| \_/\_/ \___|_.__/ - - _ - ___ ___ _ ____ _(_) ___ ___ -/ __|/ _ \ '__\ \ / / |/ __/ _ \ -\__ \ __/ | \ V /| | (_| __/ -|___/\___|_| \_/ |_|\___\___| - diff --git a/inv b/inv new file mode 100644 index 0000000..cc016f3 --- /dev/null +++ b/inv @@ -0,0 +1,2 @@ +[launched] +headscale.wolkige.abgruen.de diff --git a/roles/aws_graviton_nano/tasks/main.yml b/roles/aws_graviton_nano/tasks/main.yml index 53bbbd0..8aa1e8b 100644 --- a/roles/aws_graviton_nano/tasks/main.yml +++ b/roles/aws_graviton_nano/tasks/main.yml @@ -79,5 +79,5 @@ - name: Print public IP of this server debug: - msg: Your instance has th public IP address {{ item.public_ip }} + msg: Your instance has th public IP address {{ item.public_ip_address }} loop: "{{ graviton.instances }}" diff --git a/roles/common-server/tasks/main.yml b/roles/common-server/tasks/main.yml new file mode 100644 index 0000000..8e637b7 --- /dev/null +++ b/roles/common-server/tasks/main.yml @@ -0,0 +1,25 @@ +--- +- name: Update APT package cache + apt: + update_cache: true + upgrade: dist + +- name: Install debian packages + apt: + name: "{{ item }}" + state: present + with_items: + - "unattended-upgrades" + - "joe" + - "fail2ban" + +- name: configure "fail2ban" + template: + src: jail.local + dest: /etc/fail2ban/jail.local + +- name: Restart fail2ban + ansible.builtin.systemd: + name: fail2ban.service + state: restarted + enabled: true diff --git a/roles/headscale-server/tasks/main.yml b/roles/headscale-server/tasks/main.yml index e69de29..9d3e02d 100644 --- a/roles/headscale-server/tasks/main.yml +++ b/roles/headscale-server/tasks/main.yml @@ -0,0 +1,36 @@ +--- +#- name: Download headscale .deb +# get_url: +# url="https://github.com/juanfont/headscale/releases/download/v0.22.3/headscale_0.22.3_linux_arm64.deb" +# dest="/tmp/headscale.deb" + +#- name: Install my_package +# apt: deb="/tmp/headscale.deb" + +- name: determine name of host + ansible.builtin.set_fact: + headscale_hostname: "{{ inventory_hostname }}" + +- name: determine name of network + ansible.builtin.set_fact: + headscale_base_domain: "{{ headscale_hostname | regex_replace('^[\\w-]+\\.', '') }}" + +- name: generate config + template: + src: "config.yaml" + dest: "/etc/headscale/config.yaml" + +- name: ensure directories are present + ansible.builtin.file: + path: "{{ item }}" + state: directory + mode: '0755' + with_items: + - /var/lib/headscale + - /var/lib/headscale/cache + +- name: Enable systemd service + ansible.builtin.systemd: + name: headscale.service + state: started + enabled: true diff --git a/roles/headscale-server/templates/config.yaml b/roles/headscale-server/templates/config.yaml new file mode 100644 index 0000000..8a0e421 --- /dev/null +++ b/roles/headscale-server/templates/config.yaml @@ -0,0 +1,38 @@ +--- +# Headscale configuration +# addresses. ports and paths +server_url: "https://{{ headscale_hostname }}" +listen_addr: 0.0.0.0:443 +metrics_listen_addr: 127.0.0.1:9090 +grpc_listen_addr: 127.0.0.1:50443 +grpc_allow_insecure: false +private_key_path: /var/lib/headscale/private.key +noise: + private_key_path: /var/lib/headscale/noise_private.key +# IP ranges & dns +ip_prefixes: + - fd7a:115c:a1e0::/48 + - 10.13.100.0/24 +dns_config: + override_local_dns: true + nameservers: + - 1.1.1.1 + magic_dns: true + base_domain: {{ headscale_base_domain }} + +# DERP +derp: + server: + enabled: false + +# DB +db_type: sqlite3 +db_path: /var/lib/headscale/db.sqlite + +# TLS +acme_url: https://acme-v02.api.letsencrypt.org/directory +acme_email: "" +tls_letsencrypt_hostname: "{{ headscale_hostname }}" +tls_letsencrypt_cache_dir: /var/lib/headscale/cache +tls_letsencrypt_challenge_type: HTTP-01 +tls_letsencrypt_listen: ":http"