diff options
author | sinanmohd <sinan@sinanmohd.com> | 2024-11-24 17:13:53 +0530 |
---|---|---|
committer | sinanmohd <sinan@sinanmohd.com> | 2024-11-24 21:02:24 +0530 |
commit | 3b60fcad3f6747ffc43de3f0a1bfc9b9d2bdde76 (patch) | |
tree | 2a6d6ec87a8350a1374c9388dfb0b0f3ce4602d7 /os/kay/modules/router.nix | |
parent | 47583795fa779198671ac22892f2292268499048 (diff) |
kay/router: add IPv6 support
Diffstat (limited to 'os/kay/modules/router.nix')
-rw-r--r-- | os/kay/modules/router.nix | 65 |
1 files changed, 62 insertions, 3 deletions
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; + }; + }; + ''; + }; + }; } |