chiark / gitweb /
Publish IPv6 addresses for hosts which can cope.
[zones] / distorted.lisp
index b9bf87bfbaeef7718bd8289d2147cf19c86954cd..61f226799a64011a396b4ba800f4df6a77ebdbe0 100644 (file)
 (load "hosts.lisp" :verbose nil)
 
 ;;;--------------------------------------------------------------------------
-;;; Network allocations
-;;; (RFC1918 addresses are allocated from Cambridge G-RIN.)
-
-(defnet distorted.org.uk 172.29.198.0/23
-  (untrusted 256
-    (wireless 128)
-    (iodine 16))
-  (trusted 256
-    (fretwank 128
-      (unsafe 32)
-      (dhcp 32)
-      (safe 32))
-    (virtual 32)
-    (its 4)))
+;;; Anycast services.
 
-;;;--------------------------------------------------------------------------
-;;; Host allocations
-
-;; External addresses.
-(defhost guvnor.demon 80.177.3.76)
-
-;; Unsafe network.
-(defhost guvnor (unsafe 1))
-(defhost metalzone (unsafe 2))
-;;(defhost evolution.fretwank (unsafe 3))
-(defhost vampire (unsafe 4))
-
-;; Safe network.
-(defhost tubescreamer (safe 1))
-(defhost obsidian (safe 2))
+(defvar *anycast-routable-families* (list :ipv6))
 
-;; Wireless network.
-(defhost vampire.untrusted (untrusted 1))
-(defhost evolution (untrusted 2))
+(defzoneparse :anycast (name data rec :prefix prefix :zname zname)
+  (destructuring-bind (any-provider default-provider &rest other-providers)
+      data
 
-;; Virtual private network.
-(defhost crybaby (virtual 1))
-(defhost terror (virtual 2))
+    ;; 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)))))
 
-;; Iodine network.
-(defhost vampire.iodine (iodine 1))
-
-;; Special network for ITS.
-;; It doesn't understand point-to-point links, so we need a little net.
-(defhost gw (its 1))
-(defhost mz (its 2))
+    ;; 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.
 
 (setf *default-zone-admin* "hostmaster@distorted.org.uk")
 
-(preferred-subnet-case
-  (fretwank
-   (setf *default-zone-source* 'vampire.distorted.org.uk.)
-   (defhost www-frontend metalzone)
-   (defhost dns-frontend vampire))
-  (t
-   (setf *default-zone-source* 'guvnor.distorted.org.uk.)
-   (defhost www-frontend guvnor.demon)
-   (defhost dns-frontend guvnor.demon)))
+(setf *default-zone-source* 'radius.distorted.org.uk.)
 
 ;;;--------------------------------------------------------------------------
 ;;; Main zone definition.
 
 (defzone distorted.org.uk
-  ;;
-  ;; Nameservers
-  :ns #+subnet/fretwank ((metalzone.ns :ip metalzone)
-                        (vampire.ns :ip vampire))
-      #-subnet/fretwank ((boyle.ns :ip boyle.nsict.org)
-                        (chiark.ns :ip chiark.greenend.org.uk)
-                        (guvnor.ns :ip guvnor.demon))
-  ;;
-  ;; Mail servers
-  ((@ mail lists bugs cryptomail)
+
+  ;; Nameservers.
+  :ns #+view/inside ((radius.ns :ip radius)
+                    (precision.ns :ip precision)
+                    (vampire.ns :ip vampire))
+      #-view/inside ((radius.ns :ip radius)
+                    (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)
    :mx mail
    :srv ((:smtp mail)))
-  ;;
-  ;; Other services
+  ((lists bugs cryptomail)
+   :ttl 300
+   :mx mail
+   :srv ((:smtp old-mail)))
+
+  (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))
-  ;;
-  ;; Colocated services
-  ;;((www ftp git) (inet :svc boyle.nsict.org) (fretwank :svc metalzone))
-  ;;
-  ;; Entry is via little port-forwarding box
-  (guvnor (inet :a guvnor.demon) (fretwank :a guvnor))
-  ;;
-  ;; Wireless gateway
+
+  ;; Entry is via little router box.
+  (dmz :net dmz)
+  (guvnor (dmz :addr guvnor.dmz))
+  (nat (dmz :addr nat.dmz))
+
+  ;; Wireless gateway.
+  (wireless :net wireless)
+  (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.
+  ((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 :sshfp "vampire")
+
+  ;; Anonymity services.
+  (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)
+  (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 :addr stratocaster.colo :sshfp "stratocaster")
+               (jump :addr stratocaster.jump :sshfp "stratocaster"))
+  (stratocaster :alias strat)
+  (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)
-  (evolution (untrusted :a evolution))
-  ;;
-  ;; Local services
-  (@ :svc www-frontend)
-  ((www ftp wiki git bugs mail)
-   (inet :svc guvnor.demon)
-   (fretwank :svc metalzone))
-  ((db tor i2p rawk)
-   (inet :svc guvnor.demon)
-   (fretwank :svc vampire))
-  (vox (inet :svc guvnor.demon) (fretwank :svc vampire))
-  ;;
-  ;; Internal services
-  ((ntp1) (fretwank :svc metalzone))
-  ((www-cache wpad ntp news) (fretwank :svc vampire))
-  ;;
-  ;; Wired ethernet
-  (fretwank :net fretwank)
-  (metalzone (inet :a guvnor.demon)
-            (fretwank :a metalzone))
-  (vampire (fretwank :a vampire)
-          (untrusted :a vampire.untrusted)
-          (iodine :a vampire.iodine))
-  (obsidian (fretwank :a obsidian))
-  ;;
-  ;; Virtual network
-  (virtual :net virtual)
-  (crybaby (virtual :a crybaby))
-  (terror (virtual :a terror))
+  (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)
+  (lespaul :cname lespaul.dhcp)
+  (firebird :cname firebird.dhcp)
+  (marauder :cname marauder.dhcp)
+  (invader :cname invader.dhcp)
+
+  ;; Virtual network.
+  (vpn :net 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.
   (its :net its)
-  (gw (its :a gw))
-  (mz (its :a mz))
-  ;;
-  ;; Delegations
-  #+subnet/fretwank (dhcp :ns (metalzone.ns vampire.ns))
-  (io :ns ((ns.io :ip dns-frontend))))
+  (gw (its :addr gw.its))
+  (mz (its :addr mz.its))
+
+  ;; Strange things.
+  (blackhole (jump :addr blackhole.jump))
+
+  ;; Delegations.
+  (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 ((metalzone.ns :ip metalzone) (vampire.ns :ip vampire))
-  :reverse trusted
-  #+subnet/fretwank (dhcp :ns (metalzone.ns vampire.ns))
-  #+subnet/fretwank (@ :cidr-delegation
-                      (dhcp
-                       (dhcp 199.29.172.dhcp.199.29.172.in-addr.arpa))))
+  :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.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 untrusted
-  :ns ((metalzone.ns :ip metalzone) (vampire.ns :ip vampire))
-  :reverse untrusted)
+(defrevzone dmz
+  :ns ((radius.ns :ip radius)
+       (precision.ns :ip precision)
+       (vampire.ns :ip vampire))
+  :reverse dmz)
 
-(defzone dhcp.distorted.org.uk
-  :ns ((metalzone.ns :ip metalzone) (vampire.ns :ip vampire))
-  :net dhcp)
+(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 dns-frontend))
+  :ns ((ns :ip jazz.jump))
   (about :txt "Fake zone used for IP-over-DNS tunnelling."))
 
-(defzone dhcp.199.29.172.in-addr.arpa
-  :ns ((metalzone.ns :ip metalzone) (vampire.ns :ip vampire)))
-
 ;;;----- That's all, folks --------------------------------------------------