diff --git a/roles/prometheus/defaults/main.yml b/roles/prometheus/defaults/main.yml
index e5baf0a3197e57fb5d37ecab70b960b8150ace7c..203b1101cf26e499637f56220221202a1cf422e7 100644
--- a/roles/prometheus/defaults/main.yml
+++ b/roles/prometheus/defaults/main.yml
@@ -75,6 +75,8 @@ blackbox_targets:
   smtp_starttls:
     - mail.archlinux.org:25
     - lists.archlinux.org:25
+  dns_geomirror_a: "{{ groups['geo_mirrors'] + ['mirror.pkgbuild.com'] }}"
+  dns_geomirror_aaaa: "{{ groups['geo_mirrors'] + ['mirror.pkgbuild.com'] }}"
 matrix_metrics_endpoints:
   - homeserver
   - appservice
diff --git a/roles/prometheus_exporters/files/blackbox.yml b/roles/prometheus_exporters/files/blackbox.yml
deleted file mode 100644
index df99062cbd290e43b150e3f1436f0cbe8350ee13..0000000000000000000000000000000000000000
--- a/roles/prometheus_exporters/files/blackbox.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-modules:
-  http_prometheus:
-    prober: http
-    timeout: 5s
-    http:
-      headers:
-        User-Agent: "blackbox-monitoring"
-  tls_connect:
-    prober: tcp
-    timeout: 5s
-    tcp:
-      tls: true
-  smtp_starttls:
-    prober: tcp
-    timeout: 5s
-    tcp:
-      query_response:
-        - expect: "^220 ([^ ]+) ESMTP (.+)$"
-        - send: "EHLO prober\r"
-        - expect: "^250-STARTTLS"
-        - send: "STARTTLS\r"
-        - expect: "^220"
-        - starttls: true
-        - send: "EHLO prober\r"
-        - expect: "^250"
-        - send: "QUIT\r"
diff --git a/roles/prometheus_exporters/handlers/main.yml b/roles/prometheus_exporters/handlers/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e099b7807381a9a3ec0d908fc8d567a99fbc16a6
--- /dev/null
+++ b/roles/prometheus_exporters/handlers/main.yml
@@ -0,0 +1,4 @@
+---
+
+- name: reload blackbox exporter
+  service: name=prometheus-blackbox-exporter state=reloaded
diff --git a/roles/prometheus_exporters/tasks/main.yml b/roles/prometheus_exporters/tasks/main.yml
index 06cfb95f1f92b070d63f5799d4a3c2be9609625b..db335f6c0ddad6413b412d4041f627ea0e28c7c9 100644
--- a/roles/prometheus_exporters/tasks/main.yml
+++ b/roles/prometheus_exporters/tasks/main.yml
@@ -124,7 +124,8 @@
   systemd: name=prometheus-fail2ban-textcollector.timer enabled=yes daemon_reload=yes state=started
 
 - name: install blackbox exporter configuration
-  copy: src=blackbox.yml dest=/etc/prometheus/blackbox.yml owner=root group=root mode=0644
+  template: src=blackbox.yml.j2 dest=/etc/prometheus/blackbox.yml owner=root group=root mode=0644
+  notify: reload blackbox exporter
   when: "'prometheus' in group_names"
 
 - name: install rebuilderd textcollector service
diff --git a/roles/prometheus_exporters/templates/blackbox.yml.j2 b/roles/prometheus_exporters/templates/blackbox.yml.j2
new file mode 100644
index 0000000000000000000000000000000000000000..9ba1a2a51a5545bd049f3b3bbc045efe1a0c019b
--- /dev/null
+++ b/roles/prometheus_exporters/templates/blackbox.yml.j2
@@ -0,0 +1,46 @@
+modules:
+  http_prometheus:
+    prober: http
+    timeout: 5s
+    http:
+      headers:
+        User-Agent: "blackbox-monitoring"
+  tls_connect:
+    prober: tcp
+    timeout: 5s
+    tcp:
+      tls: true
+  smtp_starttls:
+    prober: tcp
+    timeout: 5s
+    tcp:
+      query_response:
+        - expect: "^220 ([^ ]+) ESMTP (.+)$"
+        - send: "EHLO prober\r"
+        - expect: "^250-STARTTLS"
+        - send: "STARTTLS\r"
+        - expect: "^220"
+        - starttls: true
+        - send: "EHLO prober\r"
+        - expect: "^250"
+        - send: "QUIT\r"
+  dns_geomirror_a:
+    prober: dns
+    timeout: 5s
+    dns:
+      query_name: geo.mirror.pkgbuild.com
+      query_type: A
+      preferred_ip_protocol: ip4
+      validate_answer_rrs:
+        fail_if_not_matches_regexp:
+          - geo\.mirror\.pkgbuild\.com\.\t.*\tIN\tA\t({{ groups['geo_mirrors'] | map('extract', hostvars, ['ipv4_address']) | join('|') | replace('.', '\.') }})
+  dns_geomirror_aaaa:
+    prober: dns
+    timeout: 5s
+    dns:
+      query_name: geo.mirror.pkgbuild.com
+      query_type: AAAA
+      preferred_ip_protocol: ip6
+      validate_answer_rrs:
+        fail_if_not_matches_regexp:
+          - geo\.mirror\.pkgbuild\.com\.\t.*\tIN\tAAAA\t({{ groups['geo_mirrors'] | map('extract', hostvars, ['ipv6_address']) | join('|') }})