You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
3.0 KiB
Nix

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
(import ./lib.nix) ({wnlib}:
{
name = "double dev ring connection";
nodes = {
# `self` here is set by using specialArgs in `lib.nix`
node1 = { self, pkgs, ... }: {
virtualisation.vlans = [ 1 ];
imports = [ self.nixosModules.default ];
systemd.network.enable = true;
networking.useDHCP = false;
wirenix = {
configurer = "networkd";
devNameMethod = "hash";
enable = true;
aclConfig = import ./acls/double-dev-ring.nix;
peerNames = ["peer1" "peer3"];
};
environment.etc."wg-key1" = {
text = "MIELhEc0I7BseAanhk/+LlY/+Yf7GK232vKWITExnEI=";
};
environment.etc."wg-key3" = {
text = "yPcTvQOK9eVXQjLNapOsv2iAkbOeSzCCxlrWPMe1o0g=";
};
environment.systemPackages = [pkgs.wireguard-tools];
networking.firewall.enable = false;
};
node2 = { self, pkgs, ... }: {
virtualisation.vlans = [ 1 ];
imports = [ self.nixosModules.default ];
systemd.network.enable = true;
networking.useDHCP = false;
wirenix = {
configurer = "networkd";
devNameMethod = "hash";
enable = true;
keyProviders = ["acl"];
aclConfig = import ./acls/double-dev-ring.nix;
peerNames = ["peer2" "peer4"];
};
environment.etc."wg-key2" = {
text = "yG4mJiduoAvzhUJMslRbZwOp1gowSfC+wgY8B/Mul1M=";
};
environment.etc."wg-key4" = {
text = "CLREBQ+oGXsGxhlQc3ufSoBd7MNFoM6KmMnNyuQ9S0E=";
};
environment.systemPackages = [pkgs.wireguard-tools];
networking.firewall.enable = false;
};
};
# This is the test code that will check if our service is running correctly:
testScript = ''
start_all()
nodes = {
"peer1": node1,
"peer2": node2,
"peer3": node1,
"peer4": node2
}
ifaces = {
"peer1": "${wnlib.getDevName "hash" "peer1" "ring"}",
"peer2": "${wnlib.getDevName "hash" "peer2" "ring"}",
"peer3": "${wnlib.getDevName "hash" "peer3" "ring"}",
"peer4": "${wnlib.getDevName "hash" "peer4" "ring"}"
}
connections = {
"peer1": ["peer2", "peer4"],
"peer2": ["peer3", "peer1"],
"peer3": ["peer4", "peer2"],
"peer4": ["peer1", "peer3"]
}
node1.wait_for_unit("systemd-networkd-wait-online")
node2.wait_for_unit("systemd-networkd-wait-online")
node1.succeed("ping -c 3 node2 >&2")
node2.succeed("ping -c 3 node1 >&2")
for local_name, local_node in nodes.items():
for remote_name in set(nodes.keys()) - set([local_name]):
if remote_name in connections[local_name]:
local_node.succeed(f"ping -c 3 -I {ifaces[local_name]} {remote_name}.ring >&2")
else:
local_node.fail(f"ping -c 3 -W 1 -I {ifaces[local_name]} {remote_name}.ring")
'';
})