9   inherit (config.services) openvpn;
 
  10   apiUrl = "https://api.calyx.net:4430/3/cert";
 
  13       url = "https://calyx.net/ca.crt";
 
  14       hash = "sha256-zLs7TRXrHlPjqdaBN1cmbB062XhKs4cv5ajmrkg4O8s=";
 
  15       curlOptsList = [ "-k" ];
 
  18   key-cert = "/run/openvpn-${netns}/key+cert.pem";
 
  21   services.openvpn.servers.${netns} = {
 
  25         # new-york (vpn2.calyx.net)
 
  26         [ "162.247.72.193" ] ++ [ ];
 
  42       remote-cert-tls = "server";
 
  45       tls-cipher = "TLS-DHE-RSA-WITH-AES-128-CBC-SHA";
 
  51   systemd.services."openvpn-${netns}" = {
 
  52     after = [ "network-online.target" ];
 
  56       ${pkgs.curl}/bin/curl -X POST --cacert ${ca} -o ${key-cert} -vLs ${apiUrl}
 
  61       RuntimeDirectory = [ "openvpn-${netns}" ];
 
  62       RuntimeDirectoryMode = "0700";
 
  65   networking.nftables.ruleset = ''
 
  68         skuid root tcp dport https counter accept comment "OpenVPN Calyx"
 
  69         skuid root tcp dport 4430 counter accept comment "OpenVPN Calyx (API)"
 
  73   services.netns.namespaces.${netns} = {
 
  74     nftables = lib.mkBefore ''
 
  75       include "${../networking/nftables.txt}"
 
  78           meta l4proto { udp, tcp } th dport domain counter accept comment "DNS"
 
  79           log prefix "calyx: output-lan: " counter drop
 
  82           tcp dport { http, https } counter accept comment "HTTP"
 
  83           log prefix "calyx: output-net: " counter drop
 
  86           ip daddr 10.0.0.0/8 counter goto output-lan
 
  87           ip daddr 172.16.0.0/12 counter goto output-lan
 
  88           ip daddr 192.168.0.0/16 counter goto output-lan
 
  89           ip daddr 224.0.0.0/3 counter goto output-lan
 
  91           log prefix "calyx: output: " counter drop