nixos/home/routing-common: Dynamically return WAN IP DNS
All checks were successful
CI / Check, build and cache Nix flake (push) Successful in 17m8s
All checks were successful
CI / Check, build and cache Nix flake (push) Successful in 17m8s
This commit is contained in:
31
lib/dns.nix
31
lib/dns.nix
@@ -67,4 +67,35 @@ rec {
|
||||
(a.ipv6.address != null && a.ipv6.genPTR)
|
||||
''@@PTR:${a.ipv6.address}:${toString ndots}@@ IN PTR ${a.name}.${domain}.'';
|
||||
};
|
||||
|
||||
ifaceA = { pkgs, iface, skipBroadcasts ? [] }:
|
||||
let
|
||||
extraFilters = concatMapStringsSep " " (b: ''and .broadcast != \"${b}\"'') skipBroadcasts;
|
||||
script = pkgs.writeText "if-${iface}-a.lua" ''
|
||||
local proc = io.popen("${pkgs.iproute2}/bin/ip -j addr show dev ${iface} | ${pkgs.jq}/bin/jq -r '.[0].addr_info[] | select(.family == \"inet\" and .scope == \"global\" ${extraFilters}).local'", "r")
|
||||
assert(proc, "failed to popen")
|
||||
|
||||
local addr_line = proc:read("*l")
|
||||
assert(proc:close(), "command failed")
|
||||
assert(addr_line, "no output from command")
|
||||
|
||||
return addr_line
|
||||
'';
|
||||
in
|
||||
''A "dofile('${script}')"'';
|
||||
|
||||
lookupIP = { pkgs, hostname, server, type ? "A" }:
|
||||
let
|
||||
script = pkgs.writeScript "drill-${hostname}-${server}.lua" ''
|
||||
local proc = io.popen("${pkgs.ldns}/bin/drill -Q @${server} ${hostname} ${type}", "r")
|
||||
assert(proc, "failed to popen")
|
||||
|
||||
local addr_line = proc:read("*l")
|
||||
assert(proc:close(), "command failed")
|
||||
assert(addr_line, "no output from command")
|
||||
|
||||
return addr_line
|
||||
'';
|
||||
in
|
||||
''${type} "dofile('${script}')"'';
|
||||
}
|
||||
|
Reference in New Issue
Block a user