From 2a8ced0fecf9267f001975282de671cb8cc0d1e8 Mon Sep 17 00:00:00 2001
From: Jack O'Sullivan <jackos1998@gmail.com>
Date: Thu, 6 Mar 2025 11:31:54 +0000
Subject: [PATCH] nixos/home/routing-common: Add DNS blocklist

---
 .../home/routing-common/dns-blocklist.txt     | 74 +++++++++++++++++++
 nixos/boxes/home/routing-common/dns.nix       | 21 +++++-
 2 files changed, 94 insertions(+), 1 deletion(-)
 create mode 100644 nixos/boxes/home/routing-common/dns-blocklist.txt

diff --git a/nixos/boxes/home/routing-common/dns-blocklist.txt b/nixos/boxes/home/routing-common/dns-blocklist.txt
new file mode 100644
index 0000000..a3721ae
--- /dev/null
+++ b/nixos/boxes/home/routing-common/dns-blocklist.txt
@@ -0,0 +1,74 @@
+# Blocklist for LG WebOS Services (US)
+ad.lgappstv.com
+ibis.lgappstv.com
+info.lgsmartad.com
+lgtvsdp.com
+ngfts.lge.com
+rdx2.lgtvsdp.com
+smartshare.lgtvsdp.com
+lgappstv.com
+us.ad.lgsmartad.com
+us.ibs.lgappstv.com
+us.info.lgsmartad.com
+us.lgtvsdp.com
+
+# Community Contributions
+lgad.cjpowercast.com
+edgesuite.net
+yumenetworks.com
+smartclip.net
+smartclip.com
+
+# Non-US Entries
+rdx2.lgtvsdp.com
+info.lgsmartad.com
+ibs.lgappstv.com
+lgtvsdp.com
+lgappstv.com
+smartshare.lgtvsdp.com
+
+# Full Block for Europe and Other Regions
+de.ad.lgsmartad.com
+de.emp.lgsmartplatform.com
+de.ibs.lgappstv.com
+de.info.lgsmartad.com
+de.lgeapi.com
+de.lgtvsdp.com
+de.rdx2.lgtvsdp.com
+eu.ad.lgsmartad.com
+eu.ibs.lgappstv.com
+eu.info.lgsmartad.com
+app-lgwebos.pluto.tv
+it.lgtvsdp.com
+it.lgeapi.com
+it.emp.lgsmartplatform.com
+
+# LG ThinQ Services
+eic.common.lgthinq.com
+eic.iotservice.lgthinq.com
+eic.service.lgthinq.com
+eic.ngfts.lge.com
+eic.svc-lgthinq-com.aws-thinq-prd.net
+eic.cdpsvc.lgtvcommon.com
+eic.cdpbeacon.lgtvcommon.com
+eic.cdplauncher.lgtvcommon.com
+eic.homeprv.lgtvcommon.com
+eic.lgtviot.com
+eic.nudge.lgtvcommon.com
+eic.rdl.lgtvcommon.com
+eic.recommend.lgtvcommon.com
+eic.service.lgtvcommon.com
+gb-lgeapi-com.esi-prd.net
+gb.lgeapi.com
+lgtvonline.lge.com
+lg-channelplus-de-beacons.xumo.com
+lg-channelplus-de-mds.xumo.com
+lg-channelplus-eu-beacons.xumo.com
+lg-channelplus-eu-mds.xumo.com
+kr-op-v2.lgthinqhome.com
+ngfts.lge.com
+noti.lgthinq.com
+objectcontent.lgthinq.com
+
+# Update Server Block
+#snu.lge.com
diff --git a/nixos/boxes/home/routing-common/dns.nix b/nixos/boxes/home/routing-common/dns.nix
index ff98614..67453f5 100644
--- a/nixos/boxes/home/routing-common/dns.nix
+++ b/nixos/boxes/home/routing-common/dns.nix
@@ -63,16 +63,35 @@ in
           webserver-allow-from = [ "127.0.0.1" "::1" ];
 
           lua-dns-script = pkgs.writeText "pdns-script.lua" ''
-            -- Disney+ doesn't like our IP space...
+            blocklist = newDS()
+
             function preresolve(dq)
               local name = dq.qname:toString()
+
+              -- Disney+ doesn't like our IP space...
               if dq.qtype == pdns.AAAA and (string.find(name, "disneyplus") or string.find(name, "disney-plus") or string.find(name , "disney.api")) then
                 dq.rcode = 0
                 return true
               end
 
+              if blocklist:check(dq.qname) then
+                if dq.qtype == pdns.A then
+                  dq:addAnswer(dq.qtype, "127.0.0.1")
+                elseif dq.qtype == pdns.AAAA then
+                  dq:addAnswer(dq.qtype, "::1")
+                end
+                return true
+              end
+
               return false
             end
+
+            for line in io.lines("${./dns-blocklist.txt}") do
+              entry = line:gsub("%s+", "")
+              if entry ~= "" and string.sub(entry, 1, 1) ~= "#" then
+                blocklist:add(entry)
+              end
+            end
           '';
         };
       };