networking test: test IPv6 with RA and DHCPv6
This commit is contained in:
parent
820b4cd067
commit
86755d923b
@ -10,29 +10,61 @@ let
|
|||||||
vlanIfs = range 1 (length config.virtualisation.vlans);
|
vlanIfs = range 1 (length config.virtualisation.vlans);
|
||||||
in {
|
in {
|
||||||
virtualisation.vlans = [ 1 2 3 ];
|
virtualisation.vlans = [ 1 2 3 ];
|
||||||
|
boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = true;
|
||||||
networking = {
|
networking = {
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
useNetworkd = networkd;
|
useNetworkd = networkd;
|
||||||
firewall.allowPing = true;
|
firewall.allowPing = true;
|
||||||
|
firewall.checkReversePath = true;
|
||||||
|
firewall.allowedUDPPorts = [ 547 ];
|
||||||
interfaces = mkOverride 0 (listToAttrs (flip map vlanIfs (n:
|
interfaces = mkOverride 0 (listToAttrs (flip map vlanIfs (n:
|
||||||
nameValuePair "eth${toString n}" {
|
nameValuePair "eth${toString n}" {
|
||||||
ipAddress = "192.168.${toString n}.1";
|
ipAddress = "192.168.${toString n}.1";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
|
ipv6Address = "fd00:1234:5678:${toString n}::1";
|
||||||
|
ipv6PrefixLength = 64;
|
||||||
})));
|
})));
|
||||||
};
|
};
|
||||||
services.dhcpd = {
|
services.dhcpd4 = {
|
||||||
enable = true;
|
enable = true;
|
||||||
interfaces = map (n: "eth${toString n}") vlanIfs;
|
interfaces = map (n: "eth${toString n}") vlanIfs;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
option subnet-mask 255.255.255.0;
|
authoritative;
|
||||||
'' + flip concatMapStrings vlanIfs (n: ''
|
'' + flip concatMapStrings vlanIfs (n: ''
|
||||||
subnet 192.168.${toString n}.0 netmask 255.255.255.0 {
|
subnet 192.168.${toString n}.0 netmask 255.255.255.0 {
|
||||||
option broadcast-address 192.168.${toString n}.255;
|
|
||||||
option routers 192.168.${toString n}.1;
|
option routers 192.168.${toString n}.1;
|
||||||
|
# XXX: technically it's _not guaranteed_ that IP addresses will be
|
||||||
|
# issued from the first item in range onwards! We assume that in
|
||||||
|
# our tests however.
|
||||||
range 192.168.${toString n}.2 192.168.${toString n}.254;
|
range 192.168.${toString n}.2 192.168.${toString n}.254;
|
||||||
}
|
}
|
||||||
'');
|
'');
|
||||||
};
|
};
|
||||||
|
services.radvd = {
|
||||||
|
enable = true;
|
||||||
|
config = flip concatMapStrings vlanIfs (n: ''
|
||||||
|
interface eth${toString n} {
|
||||||
|
AdvSendAdvert on;
|
||||||
|
AdvManagedFlag on;
|
||||||
|
AdvOtherConfigFlag on;
|
||||||
|
|
||||||
|
prefix fd00:1234:5678:${toString n}::/64 {
|
||||||
|
AdvAutonomous off;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
'');
|
||||||
|
};
|
||||||
|
services.dhcpd6 = {
|
||||||
|
enable = true;
|
||||||
|
interfaces = map (n: "eth${toString n}") vlanIfs;
|
||||||
|
extraConfig = ''
|
||||||
|
authoritative;
|
||||||
|
'' + flip concatMapStrings vlanIfs (n: ''
|
||||||
|
subnet6 fd00:1234:5678:${toString n}::/64 {
|
||||||
|
range6 fd00:1234:5678:${toString n}::2 fd00:1234:5678:${toString n}::2;
|
||||||
|
}
|
||||||
|
'');
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
testCases = {
|
testCases = {
|
||||||
@ -108,8 +140,14 @@ let
|
|||||||
useNetworkd = networkd;
|
useNetworkd = networkd;
|
||||||
firewall.allowPing = true;
|
firewall.allowPing = true;
|
||||||
useDHCP = true;
|
useDHCP = true;
|
||||||
interfaces.eth1.ip4 = mkOverride 0 [ ];
|
interfaces.eth1 = {
|
||||||
interfaces.eth2.ip4 = mkOverride 0 [ ];
|
ip4 = mkOverride 0 [ ];
|
||||||
|
ip6 = mkOverride 0 [ ];
|
||||||
|
};
|
||||||
|
interfaces.eth2 = {
|
||||||
|
ip4 = mkOverride 0 [ ];
|
||||||
|
ip6 = mkOverride 0 [ ];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
testScript = { nodes, ... }:
|
testScript = { nodes, ... }:
|
||||||
@ -121,21 +159,31 @@ let
|
|||||||
|
|
||||||
# Wait until we have an ip address on each interface
|
# Wait until we have an ip address on each interface
|
||||||
$client->waitUntilSucceeds("ip addr show dev eth1 | grep -q '192.168.1'");
|
$client->waitUntilSucceeds("ip addr show dev eth1 | grep -q '192.168.1'");
|
||||||
|
$client->waitUntilSucceeds("ip addr show dev eth1 | grep -q 'fd00:1234:5678:1:'");
|
||||||
$client->waitUntilSucceeds("ip addr show dev eth2 | grep -q '192.168.2'");
|
$client->waitUntilSucceeds("ip addr show dev eth2 | grep -q '192.168.2'");
|
||||||
|
$client->waitUntilSucceeds("ip addr show dev eth2 | grep -q 'fd00:1234:5678:2:'");
|
||||||
|
|
||||||
# Test vlan 1
|
# Test vlan 1
|
||||||
$client->waitUntilSucceeds("ping -c 1 192.168.1.1");
|
$client->waitUntilSucceeds("ping -c 1 192.168.1.1");
|
||||||
$client->waitUntilSucceeds("ping -c 1 192.168.1.2");
|
$client->waitUntilSucceeds("ping -c 1 192.168.1.2");
|
||||||
|
$client->waitUntilSucceeds("ping6 -c 1 fd00:1234:5678:1::1");
|
||||||
|
$client->waitUntilSucceeds("ping6 -c 1 fd00:1234:5678:1::2");
|
||||||
|
|
||||||
$router->waitUntilSucceeds("ping -c 1 192.168.1.1");
|
$router->waitUntilSucceeds("ping -c 1 192.168.1.1");
|
||||||
$router->waitUntilSucceeds("ping -c 1 192.168.1.2");
|
$router->waitUntilSucceeds("ping -c 1 192.168.1.2");
|
||||||
|
$router->waitUntilSucceeds("ping6 -c 1 fd00:1234:5678:1::1");
|
||||||
|
$router->waitUntilSucceeds("ping6 -c 1 fd00:1234:5678:1::2");
|
||||||
|
|
||||||
# Test vlan 2
|
# Test vlan 2
|
||||||
$client->waitUntilSucceeds("ping -c 1 192.168.2.1");
|
$client->waitUntilSucceeds("ping -c 1 192.168.2.1");
|
||||||
$client->waitUntilSucceeds("ping -c 1 192.168.2.2");
|
$client->waitUntilSucceeds("ping -c 1 192.168.2.2");
|
||||||
|
$client->waitUntilSucceeds("ping6 -c 1 fd00:1234:5678:2::1");
|
||||||
|
$client->waitUntilSucceeds("ping6 -c 1 fd00:1234:5678:2::2");
|
||||||
|
|
||||||
$router->waitUntilSucceeds("ping -c 1 192.168.2.1");
|
$router->waitUntilSucceeds("ping -c 1 192.168.2.1");
|
||||||
$router->waitUntilSucceeds("ping -c 1 192.168.2.2");
|
$router->waitUntilSucceeds("ping -c 1 192.168.2.2");
|
||||||
|
$router->waitUntilSucceeds("ping6 -c 1 fd00:1234:5678:2::1");
|
||||||
|
$router->waitUntilSucceeds("ping6 -c 1 fd00:1234:5678:2::2");
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
dhcpOneIf = {
|
dhcpOneIf = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user