chiark / gitweb /
Publish IPv6 addresses for hosts which can cope.
[zones] / distorted.lisp
index 85c93382a0fc45f502f09ed5a993e2ee8f60bd3f..61f226799a64011a396b4ba800f4df6a77ebdbe0 100644 (file)
@@ -2,6 +2,36 @@
 
 (load "hosts.lisp" :verbose nil)
 
+;;;--------------------------------------------------------------------------
+;;; Anycast services.
+
+(defvar *anycast-routable-families* (list :ipv6))
+
+(defzoneparse :anycast (name data rec :prefix prefix :zname zname)
+  (destructuring-bind (any-provider default-provider &rest other-providers)
+      data
+
+    ;; First, the default address.  If the anycast network is preferred then
+    ;; this is easy; otherwise we have something complicated to do because
+    ;; IPv6 anycast addresses are globally routable, while IPv4 ones aren't.
+    (if (zone-preferred-subnet-p (car any-provider))
+       (zone-set-address #'rec (cdr any-provider) :make-ptr-p t)
+       (dolist (addr (host-addrs (host-parse (cdr any-provider))))
+         (let ((family (ipaddr-family addr)))
+           (if (member family *anycast-routable-families*)
+               (zone-set-address #'rec addr
+                                 :family family :make-ptr-p t)
+               (zone-set-address #'rec (cdr default-provider)
+                                 :family family :make-ptr-p nil)))))
+
+    ;; Now for all of the others.
+    (dolist (provider (list* any-provider default-provider other-providers))
+      (zone-set-address #'rec (cdr provider)
+                       :make-ptr-p (eq provider any-provider)
+                       :name (concatenate 'string prefix "."
+                                          (string-downcase (car provider))
+                                          "." (string-downcase zname))))))
+
 ;;;--------------------------------------------------------------------------
 ;;; Other definitions.
 
@@ -16,106 +46,165 @@ (defzone distorted.org.uk
 
   ;; Nameservers.
   :ns #+view/inside ((radius.ns :ip radius)
+                    (precision.ns :ip precision)
                     (vampire.ns :ip vampire))
       #-view/inside ((radius.ns :ip radius)
-                    (vampire.ns :ip vampire)
+                    (precision.ns :ip precision)
                     (mythic-beasts-1.ns :ip mythic-ns1)
                     (mythic-beasts-2.ns :ip mythic-ns2)
                     (chiark.ns :ip chiark.greenend.org.uk))
 
   ;; Mail servers.
-  ((@ mail lists bugs cryptomail)
+  ((@ mail)
    :mx mail
    :srv ((:smtp mail)))
+  ((lists bugs cryptomail)
+   :ttl 300
+   :mx mail
+   :srv ((:smtp old-mail)))
 
-  ;; Kerberos.
-  (_kerberos :txt "DISTORTED.ORG.UK")
-  :srv (((:kerberos :protocol :udp) krb)
-       ((:kerberos-master :protocol :udp :port 88) krb)
-       (:kerberos-adm krb)
-       ((:kpasswd :protocol :udp) krb))
-
-  ;; Anycast services.  (Currently not implemented.)
-  (dns0 (unsafe :svc radius.unsafe)
-       (any :a dns0.any))
-  (dns1 (unsafe :svc vampire.unsafe)
-       (any :a dns1.any))
-  (ntp0 (unsafe :svc ibanez.unsafe)
-       (any :a ntp0.any))
-  (ntp1 (unsafe :svc vampire.unsafe)
-       (any :a ntp1.any))
-  (www-cache (dmz :svc vampire.dmz)
-            (unsafe :svc vampire.unsafe)
-            (any :a www-cache.any))
+  (stratocaster.20140403._domainkey
+   :dkim ("stratocaster-20140403"
+         :v "DKIM1" :k "rsa" :h "sha256" :s "email"))
+
+  ;; Anycast services.
+  (dns0 :anycast ((any dns0.any)
+                 (jump precision.jump)
+                 (colo precision.colo)
+                 (dmz radius.dmz)
+                 (unsafe radius.unsafe)))
+  (dns1 :anycast ((any dns1.any)
+                 (jump telecaster.jump)
+                 (dmz vampire.dmz)
+                 (unsafe vampire.unsafe)
+                 (colo telecaster.colo)))
   (dns :cname dns0)
+
+  (ntp0 :anycast ((any ntp0.any)
+                 (jump fender.jump)
+                 (dmz ibanez.dmz)
+                 (unsafe ibanez.unsafe)
+                 (colo  fender.colo)))
+  (ntp1 :anycast ((any ntp1.any)
+                 (dmz vampire.dmz)
+                 (unsafe vampire.unsafe)))
   (ntp :cname ntp0)
+
+  (www-cache :anycast ((any www-cache.any)
+                      (jump telecaster.jump)
+                      (dmz roadstar.dmz)
+                      (unsafe roadstar.unsafe)
+                      (colo telecaster.colo)))
   (wpad :cname www-cache)
 
+  (_kerberos :txt "DISTORTED.ORG.UK")
+  (krb0 :anycast ((any krb0.any)
+                 (jump precision.jump)
+                 (dmz radius.dmz)
+                 (unsafe radius.unsafe)
+                 (colo precision.colo)))
+  (krb1 :anycast ((any krb1.any)
+                 (dmz vampire.dmz)
+                 (unsafe vampire.unsafe)))
+  (krb-master (unsafe :svc radius.unsafe)
+             (dmz :svc radius.dmz))
+  :srv (((:kerberos :protocol :udp)
+        krb0
+        (krb1 :prio 100))
+       ((:kerberos-master :protocol :udp :port 88) krb-master)
+       (:kerberos-adm krb-master)
+       ((:kpasswd :protocol :udp) krb-master))
+  (krb :cname krb0)
+
   ;; Other services.
   :srv ((:http www)
        (:ftp ftp))
 
   ;; Entry is via little router box.
   (dmz :net dmz)
-  (guvnor (inside :svc gate.dmz) (dmz :a guvnor.dmz))
-  (anon (dmz :a anon.dmz))
-  (gate (dmz :a gate.dmz))
-  (nat (dmz :a nat.dmz))
+  (guvnor (dmz :addr guvnor.dmz))
+  (nat (dmz :addr nat.dmz))
 
   ;; Wireless gateway.
   (wireless :net wireless)
-  (evolution (safe :a evolution.safe))
+  (evolution (safe :addr evolution.safe))
   (evolution :alias evo)
 
+  ;; Colocated services.
+  ((irc vox) (colo :svc jazz.colo :sshfp "jazz")
+            (jump :svc jazz.jump :sshfp "jazz"))
+  ((git www mail) (colo :svc stratocaster.colo :sshfp "stratocaster")
+                 (jump :svc stratocaster.jump :sshfp "stratocaster"))
+  :svc #+view/inside stratocaster.colo
+       #-view/inside stratocaster.jump
+  (cabal :svc stratocaster.colo :sshfp "stratocaster")
+  ((db ftp) (colo :svc telecaster.colo :sshfp "telecaster")
+           (jump :svc telecaster.jump :sshfp "telecaster"))
+
   ;; Local services.
-  :svc vampire
-  ((www krb ftp rsync wiki git bugs mail db i2p rawk vox)
-   :svc vampire)
+  ((rawk pifi) (unsafe :svc artist.unsafe)
+              (dmz :svc artist.dmz))
+  (mirror (dmz :svc roadstar.dmz :sshfp "roadstar")
+         (unsafe :svc roadstar.unsafe :sshfp "roadstar"))
+  ((wiki bugs old-mail i2p) :svc vampire :sshfp "vampire")
 
   ;; Internal services.
-  #+view/inside ((news lpr) :svc vampire.unsafe)
+  #+view/inside ((news lpr) :svc vampire.unsafe :sshfp "vampire")
 
   ;; Anonymity services.
-  (tor :svc #+view/inside vampire.unsafe
-           #-view/inside anon.dmz)
+  (anon (colo :svc jazz.colo)
+       (unsafe :svc vampire.unsafe)
+       (jump :addr anon.jump)
+       (dmz :addr anon.dmz))
+
+  ;; Fancy connectivity.
+  (iodine (jump :addr jazz.jump))
 
   ;; Colocated hosts.
   (colo :net colo)
   (jump :net jump)
-  (fender ;(colo :a fender.colo)
-         (jump :a fender.jump))
-  (precision ;(colo :a precision.colo)
-            (jump :a precision.jump))
-  (telecaster ;(colo :a telecaster.colo)
-             (jump :a telecaster.jump))
+  (gate (jump :addr gate.jump :sshfp "precision"))
+  (fender (colo :addr fender.colo :sshfp "fender")
+         (jump :addr fender.jump :sshfp "fender"))
+  (precision (colo :addr precision.colo :sshfp "precision")
+            (jump :addr precision.jump :sshfp "precision"))
+  (telecaster (colo :addr telecaster.colo :sshfp "telecaster")
+             (jump :addr telecaster.jump :sshfp "telecaster"))
   (telecaster :alias tele)
-  (stratocaster ;(colo :a stratocaster.colo)
-               (jump :a stratocaster.jump))
+  (stratocaster (colo :addr stratocaster.colo :sshfp "stratocaster")
+               (jump :addr stratocaster.jump :sshfp "stratocaster"))
   (stratocaster :alias strat)
-  (jazz ;(colo :a jazz.colo)
-       (jump :a jazz.jump))
+  (jazz (colo :addr jazz.colo :sshfp "jazz")
+       (jump :addr jazz.jump :sshfp "jazz")
+       (iodine :addr jazz.iodine :sshfp "jazz"))
+
+  ;; Media server (on loan to Good Technology HSTG).
+  (jaguar (jump :addr jaguar.jump))
+
+  ;; Nicko's server.
+  (richmond (jump :addr richmond.jump))
 
   ;; Wired ethernet.
   (unsafe :net unsafe)
   (safe :net safe)
   (untrusted :net untrusted)
-  (vampire (unsafe :a vampire.unsafe)
-          (dmz :a vampire.dmz)
-          (safe :a vampire.safe)
-          (untrusted :a vampire.untrusted)
-          (iodine :a vampire.iodine))
-  (ibanez (unsafe :a ibanez.unsafe)
-         (dmz :a ibanez.dmz))
-  (radius (unsafe :a radius.unsafe)
-         (dmz :a radius.dmz)
-         (safe :a radius.safe)
-         (untrusted :a radius.untrusted))
-  (roadstar (unsafe :a roadstar.unsafe)
-           (dmz :a roadstar.dmz))
-  (jem (unsafe :a jem.unsafe)
-       (dmz :a jem.dmz))
-  (artist (unsafe :a artist.unsafe)
-         (dmz :a artist.dmz))
+  (vampire (unsafe :addr vampire.unsafe :sshfp "vampire")
+          (dmz :addr vampire.dmz :sshfp "vampire")
+          (safe :addr vampire.safe :sshfp "vampire")
+          (untrusted :addr vampire.untrusted :sshfp "vampire"))
+  (ibanez (unsafe :addr ibanez.unsafe :sshfp "ibanez")
+         (dmz :addr ibanez.dmz :sshfp "ibanez"))
+  (radius (unsafe :addr radius.unsafe :sshfp "radius")
+         (dmz :addr radius.dmz :sshfp "radius")
+         (safe :addr radius.safe :sshfp "radius")
+         (untrusted :addr radius.untrusted :sshfp "radius"))
+  (roadstar (unsafe :addr roadstar.unsafe :sshfp "roadstar")
+           (dmz :addr roadstar.dmz :sshfp "roadstar"))
+  (jem (unsafe :addr jem.unsafe :sshfp "jem")
+       (dmz :addr jem.dmz :sshfp "jem"))
+  (artist (unsafe :addr artist.unsafe :sshfp "artist")
+         (dmz :addr artist.dmz :sshfp "artist")
+         (untrusted :addr artist.untrusted :sshfp "artist"))
 
   ;; DHCP hosts.
   (gibson :cname gibson.dhcp)
@@ -126,46 +215,62 @@ (defzone distorted.org.uk
 
   ;; Virtual network.
   (vpn :net vpn)
-  (crybaby (vpn :a crybaby.vpn))
-  (terror (vpn :a terror.vpn))
+  (crybaby (vpn :addr crybaby.vpn :sshfp "crybaby"))
+  (terror (vpn :addr terror.vpn :sshfp "terror"))
+  (orange (vpn :addr orange.vpn :sshfp "orange"))
   (iodine :net iodine)
 
   ;; ITS.
   (its :net its)
-  (gw (its :a gw.its))
-  (mz (its :a mz.its))
+  (gw (its :addr gw.its))
+  (mz (its :addr mz.its))
+
+  ;; Strange things.
+  (blackhole (jump :addr blackhole.jump))
 
   ;; Delegations.
-  (dhcp :ns (radius.ns vampire.ns))
-  (io :ns ((ns.io :ip vampire))))
+  (dhcp :ns ((radius.ns.dhcp :ip radius)
+            (precision.ns.dhcp :ip precision)
+            (vampire.ns.dhcp :ip vampire)))
+  (dyn :ns ((radius.ns.dyn :ip radius)
+           (precision.ns.dyn :ip precision)
+           (vampire.ns.dyn :ip vampire)))
+  (dnserr :ns ((radius.ns.dnserr :ip radius.dmz)
+              (precision.ns.dnserr :ip precision.jump)
+              (vampire.ns.dnserr :ip vampire.dmz)))
+  (io :ns ((ns.io :ip jazz.jump))))
 
 ;;;--------------------------------------------------------------------------
 ;;; Other subsidiary zones.
 
 (defrevzone trusted
   :ns ((radius.ns :ip radius)
+       (precision.ns :ip precision)
        (vampire.ns :ip vampire))
   :reverse unsafe
   :reverse vpn
   :reverse colo
   :reverse its
   :reverse any
-  (dhcp :ns (radius.ns vampire.ns))
-  :cidr-delegation
-  (trusted ((dhcp safe) 199.29.172.dhcp.199.29.172.in-addr.arpa)))
+  (dhcp :ns ((radius.ns.dhcp :ip radius)
+            (precision.ns.dhcp :ip precision)
+            (vampire.ns.dhcp :ip vampire)))
+  :multi (((dhcp safe) :family :ipv4 :suffix "199.29.172.dhcp") :cname *))
 
 (defrevzone dmz
   :ns ((radius.ns :ip radius)
+       (precision.ns :ip precision)
        (vampire.ns :ip vampire))
   :reverse dmz)
 
 (defrevzone jump
   :ns ((radius.ns :ip radius)
+       (precision.ns :ip precision)
        (vampire.ns :ip vampire))
   :reverse jump)
 
 (defzone io.distorted.org.uk
-  :ns ((ns :ip vampire))
+  :ns ((ns :ip jazz.jump))
   (about :txt "Fake zone used for IP-over-DNS tunnelling."))
 
 ;;;----- That's all, folks --------------------------------------------------