summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsinanmohd <sinan@sinanmohd.com>2024-11-24 17:13:53 +0530
committersinanmohd <sinan@sinanmohd.com>2024-11-24 21:02:24 +0530
commit3b60fcad3f6747ffc43de3f0a1bfc9b9d2bdde76 (patch)
tree2a6d6ec87a8350a1374c9388dfb0b0f3ce4602d7
parent47583795fa779198671ac22892f2292268499048 (diff)
kay/router: add IPv6 supportmaster
-rw-r--r--os/kay/modules/network.nix2
-rw-r--r--os/kay/modules/router.nix65
2 files changed, 63 insertions, 4 deletions
diff --git a/os/kay/modules/network.nix b/os/kay/modules/network.nix
index 22d132b..04b270d 100644
--- a/os/kay/modules/network.nix
+++ b/os/kay/modules/network.nix
@@ -3,7 +3,7 @@
let
inetVlan = 1003;
wanInterface = "enp3s0";
- nameServer = [ "1.0.0.1" "1.1.1.1" ];
+ nameServer = [ "2606:4700:4700::1111" "2606:4700:4700::1001" "1.1.1.1" "1.0.0.1" ];
in
{
imports = [
diff --git a/os/kay/modules/router.nix b/os/kay/modules/router.nix
index daf4f63..d45b7c3 100644
--- a/os/kay/modules/router.nix
+++ b/os/kay/modules/router.nix
@@ -1,5 +1,6 @@
-{ ... }: let
+{ lib, pkgs, ... }: let
wanInterface = "ppp0";
+ wanMTU = 1492;
gponInterface = "enp3s0";
gponHost = "192.168.38.1";
@@ -35,6 +36,11 @@ in {
address = gponHost;
prefixLength = gponPrefix;
}];
+ # TODO: fix it upstream
+ # https://github.com/NixOS/nixpkgs/blob/e8c38b73aeb218e27163376a2d617e61a2ad9b59/nixos/modules/services/networking/dhcpcd.nix#L13
+ # without this dhcpcd will not run, and if we set it to wanInterface,
+ # when pppd(ppp0 iface) exit it'll take out wan vlan iface as well
+ lo.useDHCP = true;
};
firewall = {
allowedUDPPorts = [ 53 67 ];
@@ -50,10 +56,63 @@ in {
'';
};
};
-
services.dnsmasq.settings = {
dhcp-range = [ "${leaseRangeStart},${leaseRangeEnd}" ];
- dhcp-host= "${wapMac},${wapIp}";
+ dhcp-host = "${wapMac},${wapIp}";
interface = [ lanInterface ];
};
+
+ boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = 2;
+ networking.dhcpcd = {
+ allowInterfaces = [ wanInterface ];
+ IPv6rs = false;
+ wait = "ipv6";
+ extraConfig = ''
+ ipv6only
+ interface ${wanInterface}
+ ipv6rs
+ ia_pd 1 ${lanInterface}/0
+ '';
+ };
+
+ # we start the services using pppd script
+ systemd.services = {
+ dhcpcd = {
+ before = lib.mkForce [];
+ wants = lib.mkForce [];
+ wantedBy = lib.mkForce [];
+ };
+ radvd = {
+ after = lib.mkForce [];
+ requires = lib.mkForce[];
+ wantedBy = lib.mkForce [];
+ };
+ };
+ services = {
+ pppd.script."ipv6" = {
+ runtimeInputs = [ pkgs.systemd pkgs.gnugrep pkgs.iproute2 ];
+ text = ''
+ systemctl restart dhcpcd.service
+ systemctl restart radvd.service
+ '';
+ };
+ radvd = {
+ enable = lib.mkForce true;
+ config = ''
+ interface ${lanInterface} {
+ AdvSendAdvert on;
+ AdvDefaultPreference high;
+ AdvLinkMTU ${toString wanMTU};
+
+ MinRtrAdvInterval 3;
+ MaxRtrAdvInterval 10;
+
+ prefix ::/64 {
+ AdvPreferredLifetime 60;
+ AdvValidLifetime 120;
+ };
+ };
+ '';
+ };
+ };
}