<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>UniFi on </title>
    <link>https://gabevso.dev/tags/unifi/</link>
    <description>Recent content in UniFi on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sat, 17 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://gabevso.dev/tags/unifi/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Home Lab: Replacing the ISP Router with OpenWrt, UniFi and VLANs</title>
      <link>https://gabevso.dev/posts/home-lab-network/</link>
      <pubDate>Sat, 17 Oct 2026 00:00:00 +0000</pubDate>
      
      <guid>https://gabevso.dev/posts/home-lab-network/</guid>
      <description>&lt;p&gt;For years my home network was whatever the ISP router shipped with: one box doing routing, Wi-Fi, DHCP and DNS, with three SSIDs that &lt;em&gt;looked&lt;/em&gt; separate. They weren&amp;rsquo;t. All three landed in the same broadcast domain, so a guest on the &amp;ldquo;guest&amp;rdquo; network or my IoT devices could see and reach the NAS.&lt;/p&gt;
&lt;p&gt;I finally got around to building out a home lab that better accommodates my needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;GL.iNet Flint 2 (GL-MT6000)&lt;/strong&gt; running stock &lt;strong&gt;OpenWrt&lt;/strong&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, which does routing, firewall, DHCP and DNS,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;UniFi USW Lite 8 PoE&lt;/strong&gt; switch and a &lt;strong&gt;UniFi U6+&lt;/strong&gt; access point, which only tag frames,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;Raspberry Pi 5&lt;/strong&gt; running UniFi OS Server as the controller,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;GL.iNet Beryl AX&lt;/strong&gt; as a sandboxed lab router for devices under test.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The end result is six VLANs, each its own subnet, with a firewall deciding what can talk to what. Below is how it&amp;rsquo;s laid out, what the OpenWrt config looks like, and the handful of services that needed extra work to function across VLAN boundaries.&lt;/p&gt;</description>
      <content>&lt;p&gt;For years my home network was whatever the ISP router shipped with: one box doing routing, Wi-Fi, DHCP and DNS, with three SSIDs that &lt;em&gt;looked&lt;/em&gt; separate. They weren&amp;rsquo;t. All three landed in the same broadcast domain, so a guest on the &amp;ldquo;guest&amp;rdquo; network or my IoT devices could see and reach the NAS.&lt;/p&gt;
&lt;p&gt;I finally got around to building out a home lab that better accommodates my needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;GL.iNet Flint 2 (GL-MT6000)&lt;/strong&gt; running stock &lt;strong&gt;OpenWrt&lt;/strong&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, which does routing, firewall, DHCP and DNS,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;UniFi USW Lite 8 PoE&lt;/strong&gt; switch and a &lt;strong&gt;UniFi U6+&lt;/strong&gt; access point, which only tag frames,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;Raspberry Pi 5&lt;/strong&gt; running UniFi OS Server as the controller,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;GL.iNet Beryl AX&lt;/strong&gt; as a sandboxed lab router for devices under test.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The end result is six VLANs, each its own subnet, with a firewall deciding what can talk to what. Below is how it&amp;rsquo;s laid out, what the OpenWrt config looks like, and the handful of services that needed extra work to function across VLAN boundaries.&lt;/p&gt;
&lt;h2 id=&#34;openwrt&#34;&gt;OpenWrt&lt;/h2&gt;
&lt;p&gt;I wanted every routing and firewall decision to live in one place, in plain text I could read and diff. On OpenWrt that&amp;rsquo;s three files in &lt;code&gt;/etc/config&lt;/code&gt;: &lt;code&gt;network&lt;/code&gt;, &lt;code&gt;firewall&lt;/code&gt; and &lt;code&gt;dhcp&lt;/code&gt;. The firewall is fw4&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;, which renders to nftables&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;, and DHCP/DNS is dnsmasq&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;. Neither is hidden behind a UI that only exposes half the options.&lt;/p&gt;
&lt;p&gt;The Flint 2 is well supported by upstream OpenWrt (MediaTek Filogic, MT7986)&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;, so I&amp;rsquo;m running the stock image and not GL.iNet&amp;rsquo;s fork. It has a 2.5G WAN port, a 2.5G LAN port and four 1G LAN ports, which is enough for this house.&lt;/p&gt;
&lt;p&gt;I went with UniFi for the switch and AP because the hardware is good and the controller makes Wi-Fi easy. But I didn&amp;rsquo;t want a UniFi gateway, so UniFi only handles layer 2 here.&lt;/p&gt;
&lt;h2 id=&#34;physical-layout&#34;&gt;Physical layout&lt;/h2&gt;
&lt;p&gt;One constraint shaped the topology: there&amp;rsquo;s a single Cat6 run between floors. The fiber ONT is upstairs and most of the equipment is downstairs.&lt;/p&gt;
&lt;p&gt;So the router sits upstairs next to the ONT, and that one cable carries an 802.1Q trunk down to the switch. The WAN is a short patch cable, and the AP plugs straight into the router, so Wi-Fi traffic headed to the internet never crosses the run. The only thing that does is Wi-Fi talking to wired devices downstairs, mostly phones hitting the NAS.&lt;/p&gt;

            &lt;img src=&#34;../../posts/home-lab-network/topology.svg&#34; alt=&#34;topology.svg&#34; class=&#34;&#34;&gt;
&lt;h2 id=&#34;segments&#34;&gt;Segments&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;VLAN&lt;/th&gt;
          &lt;th&gt;Name&lt;/th&gt;
          &lt;th&gt;What&amp;rsquo;s on it&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;99&lt;/td&gt;
          &lt;td&gt;mgmt&lt;/td&gt;
          &lt;td&gt;router, switch, AP, UniFi controller&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;10&lt;/td&gt;
          &lt;td&gt;main&lt;/td&gt;
          &lt;td&gt;person phones, laptops, desktop, NAS&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;20&lt;/td&gt;
          &lt;td&gt;work&lt;/td&gt;
          &lt;td&gt;work laptops or equipment&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;30&lt;/td&gt;
          &lt;td&gt;iot&lt;/td&gt;
          &lt;td&gt;cameras, smart-home hub, printer, streaming box&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;40&lt;/td&gt;
          &lt;td&gt;guest&lt;/td&gt;
          &lt;td&gt;guests&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;50&lt;/td&gt;
          &lt;td&gt;test&lt;/td&gt;
          &lt;td&gt;lab router, with devices under test behind it&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each one is &lt;code&gt;10.N.&amp;lt;vlan&amp;gt;.0/24&lt;/code&gt; with the gateway at &lt;code&gt;.1&lt;/code&gt;, so I can tell which VLAN a device is on from its address.&lt;/p&gt;
&lt;h2 id=&#34;the-config-files&#34;&gt;The config files&lt;/h2&gt;
&lt;h3 id=&#34;network&#34;&gt;network&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;br-lan&lt;/code&gt; bridges all five LAN ports with VLAN filtering turned on&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;. Each &lt;code&gt;bridge-vlan&lt;/code&gt; section says which ports carry that VLAN and how. &lt;code&gt;t&lt;/code&gt; means tagged, and &lt;code&gt;u*&lt;/code&gt; means untagged and also the port&amp;rsquo;s default VLAN (PVID). &lt;code&gt;lan1&lt;/code&gt; and &lt;code&gt;lan2&lt;/code&gt; are trunks, and the rest are access ports:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config bridge-vlan
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option device &amp;#39;br-lan&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option vlan &amp;#39;10&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list ports &amp;#39;lan1:t&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list ports &amp;#39;lan2:t&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config bridge-vlan
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option device &amp;#39;br-lan&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option vlan &amp;#39;99&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list ports &amp;#39;lan1:u*&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list ports &amp;#39;lan2:u*&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list ports &amp;#39;lan4:u*&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config interface &amp;#39;main&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option device &amp;#39;br-lan.10&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option proto &amp;#39;static&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option ipaddr &amp;#39;10.N.10.1&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option netmask &amp;#39;255.255.255.0&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;One interface sits on each VLAN device (&lt;code&gt;br-lan.10&lt;/code&gt;, &lt;code&gt;br-lan.20&lt;/code&gt;, and so on)&lt;sup id=&#34;fnref:7&#34;&gt;&lt;a href=&#34;#fn:7&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;7&lt;/a&gt;&lt;/sup&gt;. On the MT6000 the WAN is &lt;code&gt;eth1&lt;/code&gt; because it has its own MAC rather than being a switch port, so &lt;code&gt;option device &#39;wan&#39;&lt;/code&gt; brings up nothing.&lt;/p&gt;
&lt;p&gt;The management VLAN goes untagged on both trunks. That lets a factory-reset UniFi device pick up a management address with no UniFi gateway around to help. It also means there&amp;rsquo;s no &amp;ldquo;VLAN 99&amp;rdquo; network in the UniFi controller. Untagged frames don&amp;rsquo;t carry a VLAN ID, so on the UniFi side the built-in Default network &lt;em&gt;is&lt;/em&gt; mgmt. Every other VLAN gets created in UniFi as a VLAN-only network with no DHCP&lt;sup id=&#34;fnref:8&#34;&gt;&lt;a href=&#34;#fn:8&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;8&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;One UniFi setting to watch: DHCP Guarding is on by default with &lt;code&gt;192.168.2.1&lt;/code&gt; prefilled. It silently drops DHCP replies from any other server, including the Flint&amp;rsquo;s.&lt;/p&gt;
&lt;h3 id=&#34;firewall&#34;&gt;firewall&lt;/h3&gt;
&lt;p&gt;Every internal zone defaults to rejecting both traffic to the router and traffic routed through it. A zone looks like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config zone
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option name &amp;#39;iot&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list network &amp;#39;iot&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option input &amp;#39;REJECT&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option output &amp;#39;ACCEPT&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option forward &amp;#39;REJECT&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;forwarding&lt;/code&gt; sections open whole zone-to-zone paths, and &lt;code&gt;rule&lt;/code&gt; sections open individual ports:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config forwarding
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option src &amp;#39;main&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option dest &amp;#39;iot&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config rule
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option name &amp;#39;Work-to-Printer&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option src &amp;#39;work&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option dest &amp;#39;iot&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option dest_ip &amp;#39;10.N.30.x&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option proto &amp;#39;tcp&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list dest_port &amp;#39;631&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list dest_port &amp;#39;9100&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list dest_port &amp;#39;515&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option target &amp;#39;ACCEPT&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The policy in one table. Rows can &lt;em&gt;start&lt;/em&gt; connections to columns, and conntrack&lt;sup id=&#34;fnref:9&#34;&gt;&lt;a href=&#34;#fn:9&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;9&lt;/a&gt;&lt;/sup&gt; lets the replies back:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;from ↓ / to →&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;wan&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;mgmt&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;main&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;work&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;iot&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;guest&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;test&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;mgmt&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;main&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;work&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;printer&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;lab router&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;iot&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;Plex&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;guest&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;test&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;✔&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Main can reach the cameras and printer, but nothing on IoT can open a connection back toward main. The NAS is only reachable from main, and that&amp;rsquo;s just because no rule allows anything else.&lt;/p&gt;
&lt;h3 id=&#34;dhcp&#34;&gt;dhcp&lt;/h3&gt;
&lt;p&gt;dnsmasq serves every VLAN. Each segment gets a pool section, and reservations are &lt;code&gt;host&lt;/code&gt; entries. I keep reservations below &lt;code&gt;.100&lt;/code&gt;, where the dynamic pools start:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config dhcp &amp;#39;iot&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option interface &amp;#39;iot&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option start &amp;#39;100&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option limit &amp;#39;100&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option leasetime &amp;#39;24h&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option ra &amp;#39;server&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option dhcpv6 &amp;#39;server&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	list ra_flags &amp;#39;other-config&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config host
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option name &amp;#39;printer&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option mac &amp;#39;xx:xx:xx:xx:xx:xx&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	option ip &amp;#39;10.N.30.x&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The IPv6 flags on IoT come up again in the Matter section below.&lt;/p&gt;
&lt;h2 id=&#34;getting-services-across-vlans&#34;&gt;Getting services across VLANs&lt;/h2&gt;
&lt;p&gt;Splitting the network was the easy part. Most of the work went into getting specific things working again across the boundaries.&lt;/p&gt;
&lt;h3 id=&#34;printing-from-the-work-vlan&#34;&gt;Printing from the work VLAN&lt;/h3&gt;
&lt;p&gt;Work laptops get four ports to the printer and nothing else: 631 (IPP), 9100 (raw), 515 (LPD) and UDP 161 (SNMP). I didn&amp;rsquo;t expect to need SNMP, but Windows and macOS driver installs poll it, and without it adding the printer just hangs. The laptops add the printer by IP since discovery doesn&amp;rsquo;t cross VLANs.&lt;/p&gt;
&lt;p&gt;Epson&amp;rsquo;s Windows driver was a separate headache. It installs its own port type that finds the printer by subnet broadcast on every print job, which can&amp;rsquo;t reach another VLAN. Switching it to a Standard TCP/IP port fixed it.&lt;/p&gt;
&lt;h3 id=&#34;discovery-mdns&#34;&gt;Discovery (mDNS)&lt;/h3&gt;
&lt;p&gt;mDNS&lt;sup id=&#34;fnref:10&#34;&gt;&lt;a href=&#34;#fn:10&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;10&lt;/a&gt;&lt;/sup&gt; is link-local, so splitting devices into VLANs breaks AirPrint, casting and the smart-home apps. avahi&amp;rsquo;s reflector&lt;sup id=&#34;fnref:11&#34;&gt;&lt;a href=&#34;#fn:11&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;11&lt;/a&gt;&lt;/sup&gt; on the router fixes it. I restricted it to main and IoT, because by default it joins every interface, including the WAN:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;[server]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;allow-interfaces&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;br-lan.10,br-iot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;[reflector]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;enable-reflector&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;SSDP/UPnP discovery doesn&amp;rsquo;t get reflected. My rule of thumb is that new devices go on IoT unless something on main needs to find them over SSDP.&lt;/p&gt;
&lt;h3 id=&#34;plex-from-the-streaming-box&#34;&gt;Plex from the streaming box&lt;/h3&gt;
&lt;p&gt;The streaming box lives on IoT because it&amp;rsquo;s ad-supported hardware that scans whatever network it&amp;rsquo;s on, and I don&amp;rsquo;t want it near the NAS. It gets a single pinhole to Plex&amp;rsquo;s port on the NAS.&lt;/p&gt;
&lt;p&gt;Plex then had one more problem. It advertises the server as a &lt;code&gt;*.plex.direct&lt;/code&gt; hostname that resolves to a private IP. dnsmasq&amp;rsquo;s rebind protection drops those answers, so Plex quietly fell back to relaying through its cloud&lt;sup id=&#34;fnref:12&#34;&gt;&lt;a href=&#34;#fn:12&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;12&lt;/a&gt;&lt;/sup&gt;. One line exempts that domain:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;list rebind_domain &amp;#39;/plex.direct/&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;the-nas-over-tailscale-at-home-and-away&#34;&gt;The NAS over Tailscale, at home and away&lt;/h3&gt;
&lt;p&gt;Tailscale runs directly on the NAS, since that&amp;rsquo;s the only thing I need remotely. The phone&amp;rsquo;s photo-backup app points at the NAS&amp;rsquo;s &lt;code&gt;ts.net&lt;/code&gt; name, which resolves to a &lt;code&gt;100.x&lt;/code&gt; Tailscale address&lt;sup id=&#34;fnref:13&#34;&gt;&lt;a href=&#34;#fn:13&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;13&lt;/a&gt;&lt;/sup&gt;. That only works with the VPN on, so with it off at home, backups stopped.&lt;/p&gt;
&lt;p&gt;The fix was to have dnsmasq answer for that one name with the NAS&amp;rsquo;s LAN address:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;list address &amp;#39;/nas.&amp;lt;tailnet&amp;gt;.ts.net/10.N.10.x&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
  APP[&amp;#34;Phone backup app&amp;#34;] --&amp;gt; Q{&amp;#34;Tailscale on?&amp;#34;}
  Q -- &amp;#34;yes&amp;#34; --&amp;gt; TS[&amp;#34;Tailscale DNS → 100.x&amp;#34;] --&amp;gt; TUN[&amp;#34;tunnel&amp;#34;] --&amp;gt; NAS[(&amp;#34;NAS&amp;#34;)]
  Q -- &amp;#34;no, at home&amp;#34; --&amp;gt; DM[&amp;#34;dnsmasq → LAN IP&amp;#34;] --&amp;gt; LAN[&amp;#34;direct on main&amp;#34;] --&amp;gt; NAS
&lt;/pre&gt;
&lt;p&gt;Same hostname everywhere, and the app doesn&amp;rsquo;t need to know which network it&amp;rsquo;s on.&lt;/p&gt;
&lt;h3 id=&#34;matter-and-the-ipv6-trap&#34;&gt;Matter and the IPv6 trap&lt;/h3&gt;
&lt;p&gt;Matter only uses IPv6, so the IoT VLAN gets SLAAC&lt;sup id=&#34;fnref:14&#34;&gt;&lt;a href=&#34;#fn:14&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;14&lt;/a&gt;&lt;/sup&gt; for addresses, with DHCPv6 handing out DNS (&lt;code&gt;ra_flags &#39;other-config&#39;&lt;/code&gt;). Thread and Matter stacks expect this, and cheap devices tend to choke on stateful DHCPv6.&lt;/p&gt;
&lt;p&gt;Turning IPv6 on exposed a trap. With every LAN zone set to &lt;code&gt;input REJECT&lt;/code&gt;, IPv6 quietly stopped working while IPv4 was fine. fw4 doesn&amp;rsquo;t let Neighbor Discovery&lt;sup id=&#34;fnref:15&#34;&gt;&lt;a href=&#34;#fn:15&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;15&lt;/a&gt;&lt;/sup&gt; through by default. Stock OpenWrt never runs into this because its &lt;code&gt;lan&lt;/code&gt; zone accepts input. The result is that clients can&amp;rsquo;t resolve the gateway&amp;rsquo;s link-layer address:&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  sequenceDiagram
  participant C as Client
  participant R as Router (fw4)
  C-&amp;gt;&amp;gt;R: Neighbor Solicitation (who is the gateway?)
  R--xC: rejected, zone input is REJECT
  Note over C: no gateway MAC, so IPv6 is dead and IPv4 is fine
&lt;/pre&gt;
&lt;p&gt;The fix is an ICMPv6 rule on each zone that allows the Neighbor Discovery and Router Discovery types&lt;sup id=&#34;fnref:16&#34;&gt;&lt;a href=&#34;#fn:16&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;16&lt;/a&gt;&lt;/sup&gt;. fw4&amp;rsquo;s &lt;code&gt;src&lt;/code&gt; only takes one zone, so it&amp;rsquo;s one rule per zone.&lt;/p&gt;
&lt;h2 id=&#34;the-lab-segment&#34;&gt;The lab segment&lt;/h2&gt;
&lt;p&gt;This is the part I use for work. Devices under test don&amp;rsquo;t sit on VLAN 50 directly. They sit behind the Beryl AX travel router, whose WAN port is on VLAN 50 and which NATs its own LAN:&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
  DUT[&amp;#34;Device under test&amp;#34;] --&amp;gt; BERYL[&amp;#34;Beryl AX · NAT&amp;#34;]
  BERYL -- &amp;#34;VLAN 50&amp;#34; --&amp;gt; FLINT[&amp;#34;Flint 2&amp;#34;]
  FLINT --&amp;gt; NET((&amp;#34;Internet&amp;#34;))
  FLINT -. &amp;#34;blocked&amp;#34; .-&amp;gt; HOUSE[&amp;#34;rest of the house&amp;#34;]
&lt;/pre&gt;
&lt;p&gt;Double NAT here is deliberate. The device under test can reach the internet and nothing else, and the Beryl makes a convenient capture point that allows me to apply traffic shaping rules, packet captures, etc.&lt;br&gt;
The Flint doesn&amp;rsquo;t NAT between VLANs, so the Beryl sees real source addresses, which keeps its admin firewall rule narrow.&lt;/p&gt;
&lt;h2 id=&#34;a-way-back-in&#34;&gt;A way back in&lt;/h2&gt;
&lt;p&gt;Most of this config is stuff you can easily break: the trunks, the UniFi side, the firewall rules between zones. So the Flint has one port, &lt;code&gt;lan4&lt;/code&gt;, that&amp;rsquo;s an untagged access port on mgmt. A laptop plugged in there lands straight on the management network, with full access to the router, and doesn&amp;rsquo;t need the switch, the AP or the controller to be working. The port also bounces whenever the network service restarts, so the laptop re-DHCPs and picks up the new config on its own.&lt;/p&gt;
&lt;p&gt;SSH needed one fix along the way: dropbear binds to a named interface, and the stock config bound it to &lt;code&gt;lan&lt;/code&gt;. Once &lt;code&gt;lan&lt;/code&gt; was replaced by the VLAN interfaces, SSH was refused even though the firewall allowed it. Binding dropbear to &lt;code&gt;mgmt&lt;/code&gt; fixed it.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://openwrt.org/&#34;&gt;OpenWrt Project&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://openwrt.org/docs/guide-user/firewall/firewall_configuration&#34;&gt;OpenWrt: Firewall configuration (&lt;code&gt;/etc/config/firewall&lt;/code&gt;)&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://thermalcircle.de/doku.php?id=blog:linux:nftables_packet_flow_netfilter_hooks_detail&#34;&gt;Nftables - Packet flow and Netfilter hooks in detail (thermalcircle.de)&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://openwrt.org/docs/guide-user/base-system/dhcp&#34;&gt;OpenWrt: DHCP and DNS configuration (&lt;code&gt;/etc/config/dhcp&lt;/code&gt;)&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://openwrt.org/toh/gl.inet/gl-mt6000&#34;&gt;OpenWrt Table of Hardware: GL.iNet GL-MT6000&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:6&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://openwrt.org/docs/guide-user/network/dsa/dsa-mini-tutorial&#34;&gt;OpenWrt: DSA Mini-Tutorial (bridge VLAN filtering)&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:7&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://openwrt.org/docs/guide-user/network/network_configuration&#34;&gt;OpenWrt: Network configuration (&lt;code&gt;/etc/config/network&lt;/code&gt;)&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:7&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:8&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://help.ui.com/hc/en-us/articles/9761080275607&#34;&gt;UniFi: Creating Virtual Networks (VLANs)&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:8&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:9&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://thermalcircle.de/doku.php?id=blog:linux:connection_tracking_1_modules_and_hooks&#34;&gt;Connection tracking (conntrack) - Part 1: Modules and Hooks (thermalcircle.de)&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:9&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:10&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc6762&#34;&gt;RFC 6762 - Multicast DNS&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:10&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:11&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://man.archlinux.org/man/avahi-daemon.conf.5&#34;&gt;avahi-daemon.conf(5) man page&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:11&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:12&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://support.plex.tv/articles/206225077-how-to-use-secure-server-connections/&#34;&gt;Plex: How to Use Secure Server Connections (DNS rebinding)&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:12&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:13&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://tailscale.com/kb/1081/magicdns&#34;&gt;Tailscale: MagicDNS&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:13&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:14&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc4862&#34;&gt;RFC 4862 - IPv6 Stateless Address Autoconfiguration&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:14&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:15&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc4861&#34;&gt;RFC 4861 - Neighbor Discovery for IPv6&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:15&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:16&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc4890&#34;&gt;RFC 4890 - Recommendations for Filtering ICMPv6 Messages in Firewalls&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:16&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </item>
    
  </channel>
</rss>
