diff --git a/host_vars/mirror.pkgbuild.com/misc b/host_vars/mirror.pkgbuild.com/misc index 1663410dd031d63e5835868ca0f72dbc108bc897..8759253d8d08ac13fe643bead1f1bdea8052e143 100644 --- a/host_vars/mirror.pkgbuild.com/misc +++ b/host_vars/mirror.pkgbuild.com/misc @@ -1,6 +1,7 @@ --- mirror_domain: mirror.pkgbuild.com mirror_debug_packages: false +geomirror_acme_challenge: true archweb_mirrorcheck_locations: [20, 21] filesystem: btrfs diff --git a/playbooks/mirrors.yml b/playbooks/mirrors.yml index bdb558063b08fd299d8f5f03325b3c59274f00d6..75184d5663166501f4c0581989ff8ab3af302852 100644 --- a/playbooks/mirrors.yml +++ b/playbooks/mirrors.yml @@ -15,4 +15,4 @@ - { role: promtail } - { role: fail2ban } - { role: wireguard } - - { role: geomirror, when: inventory_hostname == "mirror.pkgbuild.com" } + - { role: geomirror, when: "inventory_hostname == 'mirror.pkgbuild.com' or 'geo_mirrors' in group_names" } diff --git a/roles/geomirror/defaults/main.yml b/roles/geomirror/defaults/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..b82cec9d855633a7dac50735bf4f953c5e12d1e3 --- /dev/null +++ b/roles/geomirror/defaults/main.yml @@ -0,0 +1,2 @@ +--- +geomirror_acme_challenge: false diff --git a/roles/geomirror/tasks/main.yml b/roles/geomirror/tasks/main.yml index ae91396fc4aeabcd6e9b35d3d8286f7265612291..5373cb1c70113cb9e0665129461d630617091c10 100644 --- a/roles/geomirror/tasks/main.yml +++ b/roles/geomirror/tasks/main.yml @@ -12,6 +12,7 @@ - name: create directory for sqlite3 dbs file: path=/var/lib/powerdns state=directory owner=powerdns group=powerdns mode=0755 + when: geomirror_acme_challenge - name: initialize sqlite3 database for _acme-challenge zone command: sqlite3 -init /usr/share/doc/powerdns/schema.sqlite3.sql /var/lib/powerdns/pdns.sqlite3 "" @@ -20,6 +21,7 @@ args: creates: /var/lib/powerdns/pdns.sqlite3 register: init + when: geomirror_acme_challenge - name: create _acme-challenge zone command: "{{ item }}" @@ -33,6 +35,7 @@ - name: import TSIG key (for certbot) command: pdnsutil import-tsig-key {{ certbot_rfc2136_key }} {{ certbot_rfc2136_algorithm }} {{ certbot_rfc2136_secret }} changed_when: false + when: geomirror_acme_challenge - name: open powerdns ipv4 port for monitoring.archlinux.org ansible.posix.firewalld: zone=wireguard state=enabled permanent=true immediate=yes diff --git a/roles/geomirror/templates/geo.yml.j2 b/roles/geomirror/templates/geo.yml.j2 index c49b2eea12e8e60dc25d542159ea7fb6b2538517..58174918777fe92246f7769125a0e1406635fb80 100644 --- a/roles/geomirror/templates/geo.yml.j2 +++ b/roles/geomirror/templates/geo.yml.j2 @@ -7,11 +7,18 @@ domains: {{ geo_mirror_domain }}: - soa: mirror.pkgbuild.com. root.archlinux.org. 2022011501 3600 1800 604800 3600 - ns: mirror.pkgbuild.com + {% for host in groups['geo_mirrors'] %} + - ns: {{ host }} + {% endfor %} {% for host in groups['geo_mirrors'] %} {{ host.split(".")[0] }}.{{ geo_mirror_domain }}: - a: {{ hostvars[host]['ipv4_address'] }} - aaaa: {{ hostvars[host]['ipv6_address'] }} {% endfor %} + {% if not geomirror_acme_challenge %} + _acme-challenge.{{ geo_mirror_domain }}: + - ns: mirror.pkgbuild.com + {% endif %} services: {{ geo_mirror_domain }}: '%mp.geo.mirror.pkgbuild.com' mapping_lookup_formats: ['%cn'] diff --git a/roles/geomirror/templates/pdns.conf.j2 b/roles/geomirror/templates/pdns.conf.j2 index 1242e5306565f93aff71b4f760e7a8a50ac4b412..8a9c1fbd903b08c549d95ef232b88be5ba74ecc6 100644 --- a/roles/geomirror/templates/pdns.conf.j2 +++ b/roles/geomirror/templates/pdns.conf.j2 @@ -4,9 +4,13 @@ local-address={{ ipv4_address }},{{ ipv6_address }} webserver=yes webserver-address=0.0.0.0 webserver-allow-from=127.0.0.1,::1,{{ hostvars['monitoring.archlinux.org']['wireguard_address'] }} +{% if geomirror_acme_challenge %} launch=geoip,gsqlite3 -geoip-database-files=/var/lib/GeoIP/GeoLite2-Country.mmdb -geoip-zones-file=/etc/powerdns/geo.yml gsqlite3-database=/var/lib/powerdns/pdns.sqlite3 dnsupdate=yes lua-dnsupdate-policy-script=/etc/powerdns/dnsupdate-policy.lua +{% else %} +launch=geoip +{% endif %} +geoip-database-files=/var/lib/GeoIP/GeoLite2-Country.mmdb +geoip-zones-file=/etc/powerdns/geo.yml diff --git a/roles/prometheus/templates/prometheus.yml.j2 b/roles/prometheus/templates/prometheus.yml.j2 index a64e19f9009768684b4520e7a456a14c01de1ac2..2927ef6529e5ec795c3ea1ebefb03ed120f57fcd 100644 --- a/roles/prometheus/templates/prometheus.yml.j2 +++ b/roles/prometheus/templates/prometheus.yml.j2 @@ -77,9 +77,13 @@ scrape_configs: - job_name: 'powerdns' static_configs: - - targets: ['{{ hostvars['mirror.pkgbuild.com']['wireguard_address'] }}:8081'] + {% for host in groups['geo_mirrors'] + ['mirror.pkgbuild.com'] %} + + - targets: ['{{ hostvars[host]['wireguard_address'] }}:8081'] labels: - instance: "mirror.pkgbuild.com" + instance: "{{ host }}" + + {% endfor %} - job_name: 'gitlab_runner_exporter' static_configs: diff --git a/tf-stage1/archlinux.tf b/tf-stage1/archlinux.tf index 20d9ffbe899e237364a5366050c044f0ac043aea..2ed9a234e4e74729d04ab55892b14ba5c9402636 100644 --- a/tf-stage1/archlinux.tf +++ b/tf-stage1/archlinux.tf @@ -426,13 +426,34 @@ resource "hetznerdns_record" "pkgbuild_com_origin_txt" { type = "TXT" } -resource "hetznerdns_record" "pkgbuild_com_geo_mirror_ns" { +resource "hetznerdns_record" "pkgbuild_com_geo_mirror_ns1" { zone_id = hetznerdns_zone.pkgbuild.id name = "geo.mirror" value = "mirror.pkgbuild.com." type = "NS" } +resource "hetznerdns_record" "pkgbuild_com_geo_mirror_n2" { + zone_id = hetznerdns_zone.pkgbuild.id + name = "geo.mirror" + value = "asia.mirror.pkgbuild.com." + type = "NS" +} + +resource "hetznerdns_record" "pkgbuild_com_geo_mirror_ns3" { + zone_id = hetznerdns_zone.pkgbuild.id + name = "geo.mirror" + value = "america.mirror.pkgbuild.com." + type = "NS" +} + +resource "hetznerdns_record" "pkgbuild_com_geo_mirror_ns4" { + zone_id = hetznerdns_zone.pkgbuild.id + name = "geo.mirror" + value = "europe.mirror.pkgbuild.com." + type = "NS" +} + resource "hetznerdns_record" "archlinux_org_origin_caa" { zone_id = hetznerdns_zone.archlinux.id name = "@"