aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/router.nix
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2023-01-22 23:41:59 +0100
committerKarel Kočí <cynerd@email.cz>2023-01-22 23:41:59 +0100
commitd965ae516e238dde8f22234859b81a5a25b7f726 (patch)
tree2b292d0d61da9300f91fb13a913fc92778943b55 /nixos/modules/router.nix
parent3a87a3276110b86345e3fd73af1ef5a707a5b4b9 (diff)
downloadnixos-personal-d965ae516e238dde8f22234859b81a5a25b7f726.tar.gz
nixos-personal-d965ae516e238dde8f22234859b81a5a25b7f726.tar.bz2
nixos-personal-d965ae516e238dde8f22234859b81a5a25b7f726.zip
nixos: some initial router configuration
Diffstat (limited to 'nixos/modules/router.nix')
-rw-r--r--nixos/modules/router.nix55
1 files changed, 41 insertions, 14 deletions
diff --git a/nixos/modules/router.nix b/nixos/modules/router.nix
index e149633..f5c8668 100644
--- a/nixos/modules/router.nix
+++ b/nixos/modules/router.nix
@@ -18,11 +18,6 @@ in {
type = types.str;
description = "Interface for the router's WAN";
};
- brlan = mkOption {
- type = types.str;
- default = "brlan";
- description = "LAN interface (commonly some bridge)";
- };
lanIP = mkOption {
type = types.str;
description = "LAN IP address";
@@ -47,16 +42,34 @@ in {
config = mkIf cnf.enable {
networking = {
- interfaces."${cnf.brlan}".ipv4.addresses = [
- {
- address = cnf.lanIP;
- prefixLength = cnf.lanPrefix;
- }
- ];
+ interfaces = {
+ brlan.ipv4.addresses = [
+ {
+ address = cnf.lanIP;
+ prefixLength = cnf.lanPrefix;
+ }
+ ];
+ brguest.ipv4.addresses = [
+ {
+ address = "192.168.1.1";
+ prefixLength = 24;
+ }
+ ];
+ };
+ vlans = {
+ "brlan.guest" = {
+ interface = "brlan";
+ id = 100;
+ };
+ };
+ bridges = {
+ brlan.interfaces = [];
+ brguest.interfaces = ["brlan.guest"];
+ };
nat = {
enable = true;
externalInterface = cnf.wan;
- internalInterfaces = [cnf.brlan];
+ internalInterfaces = ["brlan" "brguest"];
};
dhcpcd.allowInterfaces = [cnf.wan];
nameservers = ["1.1.1.1" "8.8.8.8"];
@@ -65,7 +78,7 @@ in {
services.dhcpd4 = {
enable = true;
authoritative = true;
- interfaces = [cnf.brlan];
+ interfaces = ["brlan" "brguest"];
extraConfig = ''
option domain-name-servers 1.1.1.1, 8.8.8.8;
subnet ${ipv4.prefix2ip cnf.lanIP cnf.lanPrefix} netmask ${ipv4.prefix2netmask cnf.lanPrefix} {
@@ -78,6 +91,12 @@ in {
option subnet-mask ${ipv4.prefix2netmask cnf.lanPrefix};
option broadcast-address ${ipv4.prefix2broadcast cnf.lanIP cnf.lanPrefix};
}
+ subnet 192.168.1.0 netmask 255.255.255.0 {
+ range 192.168.1.50 192.168.1.254;
+ option routers 192.168.1.1;
+ option subnet-mask 255.255.255.0;
+ option broadcast-address 192.168.1.255;
+ }
'';
};
@@ -85,7 +104,7 @@ in {
# TODO
enable = false;
authoritative = true;
- interfaces = [cnf.brlan];
+ interfaces = ["brlan"];
extraConfig = ''
'';
};
@@ -93,5 +112,13 @@ in {
services.kresd = {
enable = false;
};
+
+ networking.nftables.enable = true;
+ networking.firewall = {
+ filterForward = true;
+ extraForwardRules = ''
+ iifname "brguest" oifname != "${cnf.wan}" drop comment "prevent guest to access lan"
+ '';
+ };
};
}