<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ad-Blocking on tsvinc</title>
    <link>https://tsvinc.dev/tags/ad-blocking/</link>
    <description>Recent content in Ad-Blocking on tsvinc</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 14 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://tsvinc.dev/tags/ad-blocking/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>572,000 domains and the router barely notices</title>
      <link>https://tsvinc.dev/posts/blocky-mikrotik-no-pihole/</link>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/blocky-mikrotik-no-pihole/</guid>
      <description>&lt;p&gt;&lt;figure class=&#34;svg-figure&#34; role=&#34;img&#34; aria-label=&#34;A hand-drawn doodle: the blocky router as a bouncer — a frowning ad envelope is turned away with an NXDOMAIN sign while a happy clean DNS query envelope is waved through the door&#34;&gt;&#xA;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;1200&#34; height=&#34;675&#34; viewBox=&#34;0 0 1200 675&#34; role=&#34;img&#34; aria-labelledby=&#34;title desc&#34;&gt;&#xA;  &lt;title id=&#34;title&#34;&gt;Blocky guards DNS on a MikroTik router&lt;/title&gt;&#xA;  &lt;desc id=&#34;desc&#34;&gt;A doodled router acts as a bouncer, turning away a frowning ad envelope with an NXDOMAIN paddle while waving a happy clean envelope through.&lt;/desc&gt;&#xA;&#xA;  &lt;rect width=&#34;1200&#34; height=&#34;675&#34; fill=&#34;var(--bg, #111114)&#34;/&gt;&#xA;&#xA;  &lt;!-- sparse notebook marks --&gt;&#xA;  &lt;g fill=&#34;none&#34; stroke=&#34;var(--fg-faint, #4a4a52)&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; opacity=&#34;0.48&#34;&gt;&#xA;    &lt;path d=&#34;M73 111l19-2m-8-9l2 19M1096 116l20 3m-8-12l-3 20M89 571l22 1m-10-10l-1 21M1081 559l22-3m-12-8l3 20&#34;/&gt;&#xA;    &lt;path d=&#34;M177 86c43-8 84-7 124-2M906 88c42 7 78 6 116 0M167 590c45 7 87 7 127 1M901 588c41-6 79-4 117 2&#34;/&gt;&#xA;    &lt;circle cx=&#34;353&#34; cy=&#34;94&#34; r=&#34;3&#34;/&gt;&lt;circle cx=&#34;858&#34; cy=&#34;594&#34; r=&#34;4&#34;/&gt;&lt;circle cx=&#34;1050&#34; cy=&#34;211&#34; r=&#34;3&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- motion: rejected left, welcomed right --&gt;&#xA;  &lt;g fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;    &lt;path d=&#34;M337 333c-39-29-78-31-112-16&#34; stroke=&#34;#cc3333&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M239 304l-18 15 21 8&#34; stroke=&#34;#cc3333&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M289 291l11-15m5 30l19-4m-29 24l12 13&#34; stroke=&#34;#cc3333&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;path d=&#34;M783 354c39 0 69 2 102 0&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M870 341l18 13-18 13&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- blocky router bouncer --&gt;&#xA;  &lt;g stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;    &lt;!-- antennas --&gt;&#xA;    &lt;path d=&#34;M481 182l-32-77m35 76l-20-82M718 181l32-77m-30 79l45-70&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;circle cx=&#34;457&#34; cy=&#34;101&#34; r=&#34;7&#34; fill=&#34;var(--fg-heading, #e9a447)&#34;/&gt;&#xA;    &lt;circle cx=&#34;758&#34; cy=&#34;108&#34; r=&#34;7&#34; fill=&#34;var(--fg-heading, #e9a447)&#34;/&gt;&#xA;&#xA;    &lt;!-- imperfect router case --&gt;&#xA;    &lt;path d=&#34;M420 205Q423 181 449 180L747 184Q777 184 779 212L786 504Q785 532 755 535L448 532Q418 530 418 500Z&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M433 219q164-12 333 1M437 515q164 10 333 0&#34; fill=&#34;none&#34; stroke=&#34;var(--border, #2a2a30)&#34; stroke-width=&#34;3&#34;/&gt;&#xA;&#xA;    &lt;!-- simple identity badge --&gt;&#xA;    &lt;path d=&#34;M457 231q68-8 139 1l-2 52q-69 7-137-1Z&#34; fill=&#34;var(--bg, #111114)&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;text x=&#34;526&#34; y=&#34;266&#34; text-anchor=&#34;middle&#34; fill=&#34;var(--fg-heading, #e9a447)&#34; font-family=&#34;Commit Mono, ui-monospace, monospace&#34; font-size=&#34;25&#34; font-weight=&#34;700&#34;&gt;blocky&lt;/text&gt;&#xA;&#xA;    &lt;!-- bouncer face --&gt;&#xA;    &lt;path d=&#34;M650 238q13-8 26 0m22 0q13-8 26 0&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;circle cx=&#34;666&#34; cy=&#34;247&#34; r=&#34;5&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;circle cx=&#34;707&#34; cy=&#34;247&#34; r=&#34;5&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;path d=&#34;M673 270q16 9 32-2&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;&#xA;    &lt;!-- open passage --&gt;&#xA;    &lt;path d=&#34;M626 322q1-22 23-23l90 2q19 1 20 22l4 192-140-1Z&#34; fill=&#34;var(--bg, #111114)&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;5&#34;/&gt;&#xA;    &lt;path d=&#34;M640 316q51-8 105 1M641 496q53 8 108 0&#34; fill=&#34;none&#34; stroke=&#34;var(--fg-faint, #4a4a52)&#34; stroke-width=&#34;3&#34;/&gt;&#xA;    &lt;circle cx=&#34;742&#34; cy=&#34;405&#34; r=&#34;6&#34; fill=&#34;var(--link, #78d8bd)&#34;/&gt;&#xA;&#xA;    &lt;!-- stern arm and rejection paddle --&gt;&#xA;    &lt;path d=&#34;M420 329c-35-12-58-5-79 22-10 13-19 17-31 14&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;7&#34;/&gt;&#xA;    &lt;circle cx=&#34;306&#34; cy=&#34;364&#34; r=&#34;9&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;path d=&#34;M337 350l-30-71&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;8&#34;/&gt;&#xA;    &lt;path d=&#34;M242 222q66-17 130 1l10 58q-68 17-132 1Z&#34; fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;#cc3333&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;text x=&#34;312&#34; y=&#34;260&#34; text-anchor=&#34;middle&#34; fill=&#34;#cc3333&#34; font-family=&#34;Commit Mono, ui-monospace, monospace&#34; font-size=&#34;21&#34; font-weight=&#34;700&#34;&gt;NXDOMAIN&lt;/text&gt;&#xA;&#xA;    &lt;!-- welcoming arm --&gt;&#xA;    &lt;path d=&#34;M779 326c33-22 56-18 75 5 10 12 20 9 30-2&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;7&#34;/&gt;&#xA;    &lt;circle cx=&#34;888&#34; cy=&#34;323&#34; r=&#34;9&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;path d=&#34;M884 314l-1-23m7 25l18-14m-17 19l22 4&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;&#xA;    &lt;!-- feet --&gt;&#xA;    &lt;path d=&#34;M470 532l-11 25h51l7-24M697 535l8 23h51l-13-24&#34; fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- frowning ad envelope, bounced away --&gt;&#xA;  &lt;g transform=&#34;rotate(-7 153 385)&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;    &lt;path d=&#34;M75 338q77-19 153 1l5 79q-78 18-153 0Z&#34; fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--accent, #e787db)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M82 343l73 46 72-47&#34; fill=&#34;none&#34; stroke=&#34;var(--accent, #e787db)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;!-- ad megaphone mark --&gt;&#xA;    &lt;path d=&#34;M111 353l24-9 2 21-25-4Zm4 9l5 14&#34; fill=&#34;none&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;path d=&#34;M143 347l11-8m-10 19l14 2&#34; fill=&#34;none&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;3&#34;/&gt;&#xA;    &lt;!-- worried face --&gt;&#xA;    &lt;circle cx=&#34;171&#34; cy=&#34;370&#34; r=&#34;5&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;circle cx=&#34;201&#34; cy=&#34;369&#34; r=&#34;5&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;path d=&#34;M170 397q15-13 31 0&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;!-- stumbling legs --&gt;&#xA;    &lt;path d=&#34;M110 424l-19 27m86-22l15 29M77 453l20 1m89 6l21-5&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- happy clean query walking through --&gt;&#xA;  &lt;g transform=&#34;rotate(3 932 420)&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;    &lt;path d=&#34;M855 374q76-14 151 1l-3 76q-75 15-149-1Z&#34; fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M860 379l72 43 69-44&#34; fill=&#34;none&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;!-- happy face --&gt;&#xA;    &lt;path d=&#34;M893 405q7 7 14 0m28 1q7 7 14 0M903 427q17 14 35 0&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;!-- jaunty legs --&gt;&#xA;    &lt;path d=&#34;M885 454l-8 35m76-33l22 27M861 490l20-2m89-3l21 5&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;!-- little clean sparkle --&gt;&#xA;    &lt;path d=&#34;M1018 362l3-18m-9 9l18 2&#34; fill=&#34;none&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&lt;/svg&gt;&#xA;&#xA;&lt;/figure&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
