1import ../make-test-python.nix ({ pkgs, lib, kernelPackages ? null, ... } : {
2 name = "wireguard-generated";
3 meta = with pkgs.lib.maintainers; {
4 maintainers = [ ma27 grahamc ];
5 };
6
7 nodes = {
8 peer1 = {
9 boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
10 networking.firewall.allowedUDPPorts = [ 12345 ];
11 networking.wireguard.interfaces.wg0 = {
12 ips = [ "10.10.10.1/24" ];
13 listenPort = 12345;
14 privateKeyFile = "/etc/wireguard/private";
15 generatePrivateKeyFile = true;
16
17 };
18 };
19
20 peer2 = {
21 boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
22 networking.firewall.allowedUDPPorts = [ 12345 ];
23 networking.wireguard.interfaces.wg0 = {
24 ips = [ "10.10.10.2/24" ];
25 listenPort = 12345;
26 privateKeyFile = "/etc/wireguard/private";
27 generatePrivateKeyFile = true;
28 };
29 };
30 };
31
32 testScript = ''
33 start_all()
34
35 peer1.wait_for_unit("wireguard-wg0.service")
36 peer2.wait_for_unit("wireguard-wg0.service")
37
38 retcode, peer1pubkey = peer1.execute("wg pubkey < /etc/wireguard/private")
39 if retcode != 0:
40 raise Exception("Could not read public key from peer1")
41
42 retcode, peer2pubkey = peer2.execute("wg pubkey < /etc/wireguard/private")
43 if retcode != 0:
44 raise Exception("Could not read public key from peer2")
45
46 peer1.succeed(
47 "wg set wg0 peer {} allowed-ips 10.10.10.2/32 endpoint 192.168.1.2:12345 persistent-keepalive 1".format(
48 peer2pubkey.strip()
49 )
50 )
51 peer1.succeed("ip route replace 10.10.10.2/32 dev wg0 table main")
52
53 peer2.succeed(
54 "wg set wg0 peer {} allowed-ips 10.10.10.1/32 endpoint 192.168.1.1:12345 persistent-keepalive 1".format(
55 peer1pubkey.strip()
56 )
57 )
58 peer2.succeed("ip route replace 10.10.10.1/32 dev wg0 table main")
59
60 peer1.succeed("ping -c1 10.10.10.2")
61 peer2.succeed("ping -c1 10.10.10.1")
62 '';
63})