at 25.11-pre 2.6 kB view raw
1import ../make-test-python.nix ( 2 { 3 pkgs, 4 lib, 5 kernelPackages ? null, 6 nftables ? false, 7 ... 8 }: 9 let 10 wg-snakeoil-keys = import ./snakeoil-keys.nix; 11 peer = import ./make-peer.nix { inherit lib; }; 12 commonConfig = { 13 boot.kernelPackages = lib.mkIf (kernelPackages != null) kernelPackages; 14 networking.nftables.enable = nftables; 15 # Make sure iptables doesn't work with nftables enabled 16 boot.blacklistedKernelModules = lib.mkIf nftables [ "nft_compat" ]; 17 }; 18 in 19 { 20 name = "wg-quick"; 21 meta = with pkgs.lib.maintainers; { 22 maintainers = [ d-xo ]; 23 }; 24 25 nodes = { 26 peer0 = peer { 27 ip4 = "192.168.0.1"; 28 ip6 = "fd00::1"; 29 extraConfig = lib.mkMerge [ 30 commonConfig 31 { 32 networking.firewall.allowedUDPPorts = [ 23542 ]; 33 networking.wg-quick.interfaces.wg0 = { 34 address = [ 35 "10.23.42.1/32" 36 "fc00::1/128" 37 ]; 38 listenPort = 23542; 39 40 inherit (wg-snakeoil-keys.peer0) privateKey; 41 42 peers = lib.singleton { 43 allowedIPs = [ 44 "10.23.42.2/32" 45 "fc00::2/128" 46 ]; 47 48 inherit (wg-snakeoil-keys.peer1) publicKey; 49 }; 50 51 dns = [ 52 "10.23.42.2" 53 "fc00::2" 54 "wg0" 55 ]; 56 }; 57 } 58 ]; 59 }; 60 61 peer1 = peer { 62 ip4 = "192.168.0.2"; 63 ip6 = "fd00::2"; 64 extraConfig = lib.mkMerge [ 65 commonConfig 66 { 67 networking.useNetworkd = true; 68 networking.wg-quick.interfaces.wg0 = { 69 address = [ 70 "10.23.42.2/32" 71 "fc00::2/128" 72 ]; 73 inherit (wg-snakeoil-keys.peer1) privateKey; 74 75 peers = lib.singleton { 76 allowedIPs = [ 77 "0.0.0.0/0" 78 "::/0" 79 ]; 80 endpoint = "192.168.0.1:23542"; 81 persistentKeepalive = 25; 82 83 inherit (wg-snakeoil-keys.peer0) publicKey; 84 }; 85 86 dns = [ 87 "10.23.42.1" 88 "fc00::1" 89 "wg0" 90 ]; 91 }; 92 } 93 ]; 94 }; 95 }; 96 97 testScript = '' 98 start_all() 99 100 peer0.wait_for_unit("wg-quick-wg0.service") 101 peer1.wait_for_unit("wg-quick-wg0.service") 102 103 peer1.succeed("ping -c5 fc00::1") 104 peer1.succeed("ping -c5 10.23.42.1") 105 ''; 106 } 107)