(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.
(setf *default-zone-admin* "hostmaster@distorted.org.uk")
:mx mail
:srv ((:smtp old-mail)))
+ (stratocaster.20140403._domainkey
+ :dkim ("stratocaster-20140403"
+ :v "DKIM1" :k "rsa" :h "sha256" :s "email"))
+
;; Anycast services.
- (dns0 (any :a dns0.any)
- (jump :svc precision.jump)
- (dmz :svc radius.dmz)
- (unsafe :svc radius.unsafe)
- (colo :svc precision.colo))
- (dns1 (any :a dns1.any)
- (jump :svc telecaster.jump)
- (dmz :svc vampire.dmz)
- (unsafe :svc vampire.unsafe)
- (colo :svc telecaster.colo))
+ (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 (any :a ntp0.any)
- (jump :svc fender.jump)
- (dmz :svc ibanez.dmz)
- (unsafe :svc ibanez.unsafe)
- (colo :svc fender.colo))
- (ntp1 (any :a ntp1.any)
- (dmz :svc vampire.dmz)
- (unsafe :svc vampire.unsafe))
+ (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 (any :a www-cache.any)
- (jump :svc telecaster.jump)
- (dmz :svc roadstar.dmz)
- (unsafe :svc roadstar.unsafe)
- (colo :svc telecaster.colo))
+ (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 (any :a krb0.any)
- (jump :svc precision.jump)
- (dmz :svc radius.dmz)
- (unsafe :svc radius.unsafe)
- (colo :svc precision.colo))
- (krb1 (any :a krb1.any)
- (dmz :svc vampire.dmz)
- (unsafe :svc vampire.unsafe))
+ (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)
(evolution :alias evo)
;; Colocated services.
- ((irc vox) (colo :svc jazz.colo)
- (jump :svc jazz.jump))
- ((git www mail) (colo :svc stratocaster.colo)
- (jump :svc stratocaster.jump))
+ ((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)
+ (cabal :svc stratocaster.colo :sshfp "stratocaster")
+ ((db ftp) (colo :svc telecaster.colo :sshfp "telecaster")
+ (jump :svc telecaster.jump :sshfp "telecaster"))
;; Local services.
- (rawk (unsafe :svc artist.unsafe)
- (dmz :svc artist.dmz))
- (pifi (vpn :svc orange.vpn)
- (dmz :svc artist.dmz))
- ((ftp rsync wiki bugs old-mail db i2p) :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.
(anon (colo :svc jazz.colo)
- (unsafe :svc vampire.unsafe)
- (jump :a anon.jump)
+ (unsafe :svc vampire.unsafe)
+ (jump :a anon.jump)
(dmz :a anon.dmz))
;; Fancy connectivity.
;; 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))
+ (fender (colo :a fender.colo :sshfp "fender")
+ (jump :a fender.jump :sshfp "fender"))
+ (precision (colo :a precision.colo :sshfp "precision")
+ (jump :a precision.jump :sshfp "precision"))
+ (telecaster (colo :a telecaster.colo :sshfp "telecaster")
+ (jump :a telecaster.jump :sshfp "telecaster"))
(telecaster :alias tele)
- (stratocaster (colo :a stratocaster.colo)
- (jump :a stratocaster.jump))
+ (stratocaster (colo :a stratocaster.colo :sshfp "stratocaster")
+ (jump :a stratocaster.jump :sshfp "stratocaster"))
(stratocaster :alias strat)
- (jazz (colo :a jazz.colo)
- (jump :a jazz.jump)
- (iodine :a jazz.iodine))
+ (jazz (colo :a jazz.colo :sshfp "jazz")
+ (jump :a jazz.jump :sshfp "jazz")
+ (iodine :a jazz.iodine :sshfp "jazz"))
;; Media server (on loan to Good Technology HSTG).
(jaguar (jump :a jaguar.jump))
(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))
- (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)
- (untrusted :a artist.untrusted))
+ (vampire (unsafe :a vampire.unsafe :sshfp "vampire")
+ (dmz :a vampire.dmz :sshfp "vampire")
+ (safe :a vampire.safe :sshfp "vampire")
+ (untrusted :a vampire.untrusted :sshfp "vampire"))
+ (ibanez (unsafe :a ibanez.unsafe :sshfp "ibanez")
+ (dmz :a ibanez.dmz :sshfp "ibanez"))
+ (radius (unsafe :a radius.unsafe :sshfp "radius")
+ (dmz :a radius.dmz :sshfp "radius")
+ (safe :a radius.safe :sshfp "radius")
+ (untrusted :a radius.untrusted :sshfp "radius"))
+ (roadstar (unsafe :a roadstar.unsafe :sshfp "roadstar")
+ (dmz :a roadstar.dmz :sshfp "roadstar"))
+ (jem (unsafe :a jem.unsafe :sshfp "jem")
+ (dmz :a jem.dmz :sshfp "jem"))
+ (artist (unsafe :a artist.unsafe :sshfp "artist")
+ (dmz :a artist.dmz :sshfp "artist")
+ (untrusted :a artist.untrusted :sshfp "artist"))
;; DHCP hosts.
(gibson :cname gibson.dhcp)
;; Virtual network.
(vpn :net vpn)
- (crybaby (vpn :a crybaby.vpn))
- (terror (vpn :a terror.vpn))
- (orange (vpn :a orange.vpn))
+ (crybaby (vpn :a crybaby.vpn :sshfp "crybaby"))
+ (terror (vpn :a terror.vpn :sshfp "terror"))
+ (orange (vpn :a orange.vpn :sshfp "orange"))
(iodine :net iodine)
;; ITS.
(dhcp :ns ((radius.ns.dhcp :ip radius)
(precision.ns.dhcp :ip precision)
(vampire.ns.dhcp :ip vampire)))
- :cidr-delegation
- (trusted ((dhcp safe) 199.29.172.dhcp.199.29.172.in-addr.arpa)))
+ :multi (((dhcp safe) :family :ipv4 :suffix "199.29.172.dhcp") :cname *))
(defrevzone dmz
:ns ((radius.ns :ip radius)