aboutsummaryrefslogtreecommitdiff
path: root/tw/services/wireguard.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tw/services/wireguard.scm')
-rw-r--r--tw/services/wireguard.scm67
1 files changed, 26 insertions, 41 deletions
diff --git a/tw/services/wireguard.scm b/tw/services/wireguard.scm
index 4a69be8c..1906f70e 100644
--- a/tw/services/wireguard.scm
+++ b/tw/services/wireguard.scm
@@ -1,4 +1,6 @@
(define-module (tw services wireguard)
+ #:use-module (ice-9 format)
+ #:use-module (ice-9 match)
#:use-module (ice-9 regex)
#:use-module ((srfi srfi-1) #:select (append-map every))
#:use-module ((srfi srfi-26) #:select (cut))
@@ -15,45 +17,27 @@
tw-wireguard-service-type))
(define %wireguard-peers
- `(("lap.twilken.net" .
- ,(wireguard-peer
- (name "lap.wg")
- (public-key "lap/DvCb8xXLUCqcaPEx8kCRcoeV4ScTMVZW5hvvNzA=")
- (preshared-key "/etc/wireguard/lap.psk")
- (allowed-ips '("10.0.0.1/32" "fc00::1/128"))))
- ("lud.twilken.net" .
- ,(wireguard-peer
- (name "lud.wg")
- (endpoint "lud.twilken.net:58921")
- (public-key "lud/9sbXVdOYXxOkRgAB+b/17QxbwllfJY/pbA3/MkE=")
- (preshared-key "/etc/wireguard/lud.psk")
- (allowed-ips '("10.0.0.2/32" "fc00::2/128"))))
- ("vin.twilken.net" .
- ,(wireguard-peer
- (name "vin.wg")
- (endpoint "vin.twilken.net:58921")
- (public-key "vin/Im+sOszZFE01UF1+QlyxLP1PsPXJgTz4KmgvL3Y=")
- (preshared-key "/etc/wireguard/vin.psk")
- (allowed-ips '("10.0.0.3/32" "fc00::3/128"))))
- ("fp4.twilken.net" .
- ,(wireguard-peer
- (name "fp4.wg")
- (public-key "fp4/aLAVBADTy+UGmNh011w1CFOOwq70Df6EWlZRkAs=")
- (preshared-key "/etc/wireguard/fp4.psk")
- (allowed-ips '("10.0.0.4/32" "fc00::4/128"))))
- ("pi3.twilken.net" .
- ,(wireguard-peer
- (name "pi3.wg")
- (endpoint "pi3.twilken.net:58922")
- (public-key "pi3/ThUH4qDTuyvNQIiiyy2dbziF/xLRTwO0+vcUoVY=")
- (preshared-key "/etc/wireguard/pi3.psk")
- (allowed-ips '("10.0.0.5/32" "fc00::5/128"))))
- ("frm.twilken.net" .
- ,(wireguard-peer
- (name "frm.wg")
- (public-key "frm/YGu1BfXUl4jrN0PTFMNdTQXWPSuY1wEpz5W9C2Y=")
- (preshared-key "/etc/wireguard/frm.psk")
- (allowed-ips '("10.0.0.6/32" "fc00::6/128"))))))
+ ;; Order in the following list is significant! It determines what IPs are assigned.
+ (let ((peers '(("lap" "lap/DvCb8xXLUCqcaPEx8kCRcoeV4ScTMVZW5hvvNzA=" #f)
+ ("lud" "lud/9sbXVdOYXxOkRgAB+b/17QxbwllfJY/pbA3/MkE=" 58921)
+ ("vin" "vin/Im+sOszZFE01UF1+QlyxLP1PsPXJgTz4KmgvL3Y=" 58921)
+ ("fp4" "fp4/aLAVBADTy+UGmNh011w1CFOOwq70Df6EWlZRkAs=" #f)
+ ("pi3" "pi3/ThUH4qDTuyvNQIiiyy2dbziF/xLRTwO0+vcUoVY=" 58922)
+ ("frm" "frm/YGu1BfXUl4jrN0PTFMNdTQXWPSuY1wEpz5W9C2Y=" #f)
+ ("btl" "btl/kAgD+DVXsApNn53JCZdgZ9iJvVpFZVpa3Z+rrj4=" #f))))
+
+ (map (match-lambda*
+ ((i (name public-key port))
+ (cons (string-append name ".twilken.net")
+ (wireguard-peer
+ (name (string-append name ".wg"))
+ (endpoint (and port (format #f "~a.twilken.net:~d" name port)))
+ (public-key public-key)
+ (preshared-key (string-append "/etc/wireguard/" name ".psk"))
+ (allowed-ips (list (format #f "10.0.0.~d/32" (+ i 1))
+ (format #f "fc00::~d/128" (+ i 1)))))))
+ (args (error "Unknown peer spec" args)))
+ (iota (length peers)) peers)))
(define (wireguard-peers-list? object)
(and (list? object)
@@ -72,12 +56,13 @@
"Where to store this host's private key."))
(define (other-peers this-host peers)
- (let ((own-peer (assoc-ref peers this-host)))
- (delq own-peer (map cdr peers))))
+ (delq (assoc-ref peers this-host) (map cdr peers)))
(define (tw-wireguard-service config)
"Create a full WireGuard config from the personal network CONFIG."
(match-record config <tw-wireguard-configuration> (this-host peers private-key-file)
+ (unless (assoc this-host peers)
+ (error "No peer config found for host" this-host))
(match-record (assoc-ref peers this-host) (@@ (gnu services vpn) <wireguard-peer>) (endpoint allowed-ips)
(wireguard-configuration
(addresses