<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>网络 on T.本秋的自留地</title><link>https://minortex.github.io/tags/%E7%BD%91%E7%BB%9C/</link><description>Recent content in 网络 on T.本秋的自留地</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Copyright© 2026 T.本秋. Licensed under CC BY-NC-SA 4.0.</copyright><lastBuildDate>Wed, 07 Jan 2026 01:42:21 +0800</lastBuildDate><atom:link href="https://minortex.github.io/tags/%E7%BD%91%E7%BB%9C/index.xml" rel="self" type="application/rss+xml"/><item><title>Immortalwrt：多线多网与 Tailscale</title><link>https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/</link><pubDate>Wed, 07 Jan 2026 01:42:21 +0800</pubDate><guid>https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/</guid><description>
&lt;h2 class="relative group"&gt;配置多线多内网
&lt;div id="配置多线多内网" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%85%8d%e7%bd%ae%e5%a4%9a%e7%ba%bf%e5%a4%9a%e5%86%85%e7%bd%91" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;现在我同时有了两个账号的使用权，一个是运营商账号，有 IPv6，但是速度不算快，不过不断网；另一个是运营商自建的网，卖给学生用的，没有 IPv6，晚上 11 点半还断网，真是花钱做大冤种啊哈哈！&lt;/p&gt;
&lt;p&gt;那么就有了配多内网的想法，之前也划过 VLAN 了，这里就不赘述了，提一嘴怎么给电脑网卡变成 trunk 模式，Win 就是在设备管理器，网卡的高级设置里面填入 ID，Linux 先 modprobe 8021q，用 &lt;code&gt;nmcli&lt;/code&gt; 可以添加子接口，具体看一下 manual。&lt;/p&gt;
&lt;p&gt;在接口 - 设备这里，可以创建 MAC VLAN:&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="macvlan"
width="1309"
height="878"
src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image_hu_a8fb5bf96636b438.webp"
srcset="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image_hu_a8fb5bf96636b438.webp 800w, https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image_hu_21ef3c0d1b31a4c8.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;需要注意的是，在这台京东云上面要求多个 MACVLAN 必须是连续的，否则可能出现设备 CLAIM 失败的报错。&lt;/p&gt;
&lt;p&gt;然后使用 &lt;code&gt;curl --interface &lt;/code&gt;分别给每个接口配置 portal 认证。现在应该有两个接口了：&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="two_interface"
width="1425"
height="377"
src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-1_hu_38d63cae2c2a96c7.webp"
srcset="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-1_hu_38d63cae2c2a96c7.webp 800w, https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-1_hu_e18c60d1d6de1739.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-1.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;这时候会自动把两个 wan 口下发的路由都加到 main 表里面，是什么顺序我没注意，不过，你的设备肯定只走一条出去，另一条是闲置的。&lt;/p&gt;
&lt;p&gt;所以我们要在高级设置里面覆盖 IPv4 路由表，这个的意思是把获取到的路由加到这个表里面。&lt;/p&gt;
&lt;p&gt;表分两种，有名字的和纯数字 ID 的。你这里只能填 ID，填完了可以到 &lt;code&gt;/etc/iproute2/rt_tables&lt;/code&gt; 里面按照 &lt;code&gt;id 名字&lt;/code&gt; 这样写，这时候就更加有可读性。&lt;/p&gt;
&lt;p&gt;/etc/iproute2/rt_tables 必须是连续的，否则可能出现设备 CLAIM 失败的报错。&lt;/p&gt;
&lt;p&gt;然后使用 &lt;code&gt;curl --interface &lt;/code&gt;分别给每个接口配置 portal 认证。现在应该有两个接口了：&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="two_interface"
width="1425"
height="377"
src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-1_hu_38d63cae2c2a96c7.webp"
srcset="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-1_hu_38d63cae2c2a96c7.webp 800w, https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-1_hu_e18c60d1d6de1739.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-1.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;这时候会自动把两个 wan 口下发的路由都加到 main 表里面，是什么顺序我没注意，不过，你的设备肯定只走一条出去，另一条是闲置的。&lt;/p&gt;
&lt;p&gt;所以我们要在高级设置里面覆盖 IPv4 路由表，这个的意思是把获取到的路由加到这个表里面。&lt;/p&gt;
&lt;p&gt;表分两种，有名字的和纯数字 ID 的。你这里只能填 ID，填完了可以到 &lt;code&gt;/etc/iproute2/rt_tables&lt;/code&gt; 里面按照 &lt;code&gt;id 名字&lt;/code&gt; 这样写，这时候就更加有可读性。&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="override_ipv4_table"
width="634"
height="392"
src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-2.webp"
srcset="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-2.webp 800w, https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-2.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-2.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;那么我就把两个路由分到了两个路由表里面，一个 cmcc，另一个 cernet。&lt;/p&gt;
&lt;p&gt;这时候问题来了，你多半发现上不了网了，原因是默认只会查主路由表（main），这时候主路由表里面只有你的内网 local 路由，发往别的网段的数据包就被丢弃了。&lt;/p&gt;
&lt;p&gt;所以我们得手动定制路由规则，其实对应的就是 &lt;code&gt;ip rule&lt;/code&gt; 命令了。&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="routing_rules"
width="1416"
height="283"
src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-3_hu_3076800415bc1a74.webp"
srcset="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-3_hu_3076800415bc1a74.webp 800w, https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-3_hu_2941a70e83e8ac2a.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://minortex.github.io/posts/immortalwrt-2-multiwan-tailscale/image-3.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;按照不同的网段查不同的表，请注意上面两条规则很重要，要不然内网的流量也被发到 wan 口去了，wrt 系不像 routeros，没有靠 MAC 地址连接的办法，自动回滚居然也不生效，没备份的我至少重新弄了三遍。&lt;/p&gt;
&lt;p&gt;然后就可以爽用了。&lt;/p&gt;
&lt;h2 class="relative group"&gt;tailscale 出现的问题
&lt;div id="tailscale-出现的问题" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tailscale-%e5%87%ba%e7%8e%b0%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;配完过了几天发现外部的 tailscale 没法连到内网的设备了，tcpdump 一看，只有访问的包，没有回去的包。我当时以为是 masquerade 的问题，在 ts 接口上面开了动态伪装，然后 dump br-lan.2，发现其实内网有回复，但是发到路由器后就没下文了。&lt;/p&gt;
&lt;p&gt;我立马就知道肯定是路由规则问题了，防火墙没问题。&lt;/p&gt;
&lt;p&gt;于是添加了一条最优先的规则，让目标为 `100.64.0.0/10&amp;rsquo; 的走主路由表，还是不通。&lt;/p&gt;
&lt;p&gt;其实还是先入为主了！ts 自己弄了个 52 的路由表，他的规则全部在里面，根本不在主路由表。高级设置里面表填上 52，收工！&lt;/p&gt;</description></item><item><title>RouterOS 的 IPv6 多网段统一进行 NAPT 转换</title><link>https://minortex.github.io/posts/routeros_ipv6/</link><pubDate>Tue, 23 Sep 2025 21:05:32 +0800</pubDate><guid>https://minortex.github.io/posts/routeros_ipv6/</guid><description>
&lt;h2 class="relative group"&gt;前言
&lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;终于决定给社团的网络修一修了~&lt;/p&gt;
&lt;h2 class="relative group"&gt;实践
&lt;div id="实践" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%ae%9e%e8%b7%b5" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;h3 class="relative group"&gt;内网划分
&lt;div id="内网划分" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%85%e7%bd%91%e5%88%92%e5%88%86" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;对于内网的划分是这样的：&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;ULA&lt;/code&gt;子网：&lt;code&gt;fd11:4514:5a51::/48&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;然后划分四个网段，分别给设施、1-3 楼用户。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fd11:4514:5a51:0::/64&lt;/code&gt;，尽量使用&lt;code&gt;EUI64&lt;/code&gt;分配地址，同时分配公网前缀用于&lt;code&gt;IPv6&lt;/code&gt;访问。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fd11:4514:5a51:[1-3]::/64&lt;/code&gt;，仅仅分配&lt;code&gt;ULA&lt;/code&gt;，不分配公网前缀，使得设备流量分流到三条移动宽带。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class="relative group"&gt;/DNPT 规则
&lt;div id="dnpt-规则" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#dnpt-%e8%a7%84%e5%88%99" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;相比之前使用的&lt;code&gt;fc00-fc03&lt;/code&gt;网段来说，可以少写很多规则，直接转换&lt;code&gt;/60&lt;/code&gt;的前缀即可。&lt;/p&gt;
&lt;p&gt;参考如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="p"&gt;;;;&lt;/span&gt; PCC-1 Output
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prerouting &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mark-packet new-packet-mark&lt;span class="o"&gt;=&lt;/span&gt;PCC-1 &lt;span class="nv"&gt;passthrough&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes src-address&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 dst-address-list&lt;span class="o"&gt;=&lt;/span&gt;!ULAs per-connection-classifier&lt;span class="o"&gt;=&lt;/span&gt;src-address:3/0 &lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no log-prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="p"&gt;;;;&lt;/span&gt; PCC-2 Output
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prerouting &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mark-packet new-packet-mark&lt;span class="o"&gt;=&lt;/span&gt;PCC-2 &lt;span class="nv"&gt;passthrough&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes src-address&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 dst-address-list&lt;span class="o"&gt;=&lt;/span&gt;!ULAs per-connection-classifier&lt;span class="o"&gt;=&lt;/span&gt;src-address:3/1 &lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no log-prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="p"&gt;;;;&lt;/span&gt; PCC-3 Output
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prerouting &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mark-packet new-packet-mark&lt;span class="o"&gt;=&lt;/span&gt;PCC-3 &lt;span class="nv"&gt;passthrough&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes src-address&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 dst-address-list&lt;span class="o"&gt;=&lt;/span&gt;!ULAs per-connection-classifier&lt;span class="o"&gt;=&lt;/span&gt;src-address:3/2 &lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no log-prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;6&lt;/span&gt; &lt;span class="p"&gt;;;;&lt;/span&gt; PCC-1 Output NPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postrouting &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;SNPT src-prefix&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 dst-prefix&lt;span class="o"&gt;=&lt;/span&gt;2409:8a20:ae0:6af0::/60 src-address&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 packet-mark&lt;span class="o"&gt;=&lt;/span&gt;PCC-1 &lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no log-prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;7&lt;/span&gt; &lt;span class="p"&gt;;;;&lt;/span&gt; PCC-2 Output NPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postrouting &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;SNPT src-prefix&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 dst-prefix&lt;span class="o"&gt;=&lt;/span&gt;2409:8a20:ae0:1360::/60 src-address&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 packet-mark&lt;span class="o"&gt;=&lt;/span&gt;PCC-2 &lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no log-prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;8&lt;/span&gt; &lt;span class="p"&gt;;;;&lt;/span&gt; PCC-3 Output NPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postrouting &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;SNPT src-prefix&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 dst-prefix&lt;span class="o"&gt;=&lt;/span&gt;2409:8a20:bc5:c950::/60 src-address&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 packet-mark&lt;span class="o"&gt;=&lt;/span&gt;PCC-3 &lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no log-prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;9&lt;/span&gt; &lt;span class="p"&gt;;;;&lt;/span&gt; PCC-1 Input NPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prerouting &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dnpt src-prefix&lt;span class="o"&gt;=&lt;/span&gt;2409:8a20:ae0:6af0::/60 dst-prefix&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 dst-address&lt;span class="o"&gt;=&lt;/span&gt;2409:8a20:ae0:6af0::/60 &lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no log-prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;10&lt;/span&gt; &lt;span class="p"&gt;;;;&lt;/span&gt; PCC-2 Input NPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prerouting &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dnpt src-prefix&lt;span class="o"&gt;=&lt;/span&gt;2409:8a20:ae0:1360::/60 dst-prefix&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 dst-address&lt;span class="o"&gt;=&lt;/span&gt;2409:8a20:ae0:1360::/60 &lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no log-prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;11&lt;/span&gt; &lt;span class="p"&gt;;;;&lt;/span&gt; PCC-3 Input NPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prerouting &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dnpt src-prefix&lt;span class="o"&gt;=&lt;/span&gt;2409:8a20:bc5:c950::/60 dst-prefix&lt;span class="o"&gt;=&lt;/span&gt;fd11:4514:5a51::/60 dst-address&lt;span class="o"&gt;=&lt;/span&gt;2409:8a20:bc5:c950::/60 &lt;span class="nv"&gt;log&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no log-prefix&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;总共 9 条规则就可以解决，依次是出站 PCC 规则分流，出站规则，入站 DNPT 规则。&lt;/p&gt;
&lt;h2 class="relative group"&gt;问题
&lt;div id="问题" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;h3 class="relative group"&gt;脚本自动更新问题
&lt;div id="脚本自动更新问题" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%84%9a%e6%9c%ac%e8%87%aa%e5%8a%a8%e6%9b%b4%e6%96%b0%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;我真的非常不愿意去看 RouterOS 的脚本，太乱了，沿用了之前的内容，只是修改了其中的网段。&lt;/p&gt;
&lt;h3 class="relative group"&gt;入站问题
&lt;div id="入站问题" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%a5%e7%ab%99%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;按照现有的规则，实际上是无法入站的，需要单独添加一条规则，而且似乎只对&lt;code&gt;EUI64&lt;/code&gt;的地址生效。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; 2 ;;; PCC-1 LAN_Device
chain=prerouting action=accept dst-address=2409:8a20:ae0:6af0::/64 log=no log-prefix=&amp;#34;&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其实，对于隐私地址，防火墙也非常难以匹配规则，因为后缀变，运营商的前缀也跟着变，一般解决方案都是&lt;code&gt;socat&lt;/code&gt;或者反向匹配 (目标地址写&lt;code&gt;::be24:11ff:fe82:8282/::ffff:ffff:ffff:ffff&lt;/code&gt;这样)。&lt;/p&gt;
&lt;h3 class="relative group"&gt;内网访问问题
&lt;div id="内网访问问题" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%85%e7%bd%91%e8%ae%bf%e9%97%ae%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;对于内网 v6 互访 (从 0 网段到 1) 是失败的，我怀疑是 PCC 规则误伤了，但是排查还是挺困难的，因为 RouterOS 的日志调试我根本不会用，不出日志，你说要是有个&lt;code&gt;tcpdump&lt;/code&gt;我就会了&amp;hellip;&lt;/p&gt;
&lt;h2 class="relative group"&gt;补充
&lt;div id="补充" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%a1%a5%e5%85%85" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;h3 class="relative group"&gt;关于 EUI64 和 RFC4291
&lt;div id="关于-eui64-和-rfc4291" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%b3%e4%ba%8e-eui64-%e5%92%8c-rfc4291" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;使用&lt;code&gt;NAPT&lt;/code&gt;，对于&lt;code&gt;EUI64&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2: ens192: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu &lt;span class="m"&gt;1500&lt;/span&gt; qdisc mq state UP group default qlen &lt;span class="m"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; link/ether 00:0c:29:65:43:21 brd ff:ff:ff:ff:ff:ff
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; altname enp11s0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet 192.168.114.39/24 brd 192.168.114.255 scope global dynamic ens192
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft 13117sec preferred_lft 13117sec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet6 fd11:4514:5a51:0:20c:29ff:fe65:4321/64 scope global dynamic mngtmpaddr
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft 6993sec preferred_lft 3393sec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet6 2409:8a20:ae0:6af0:20c:29ff:fe65:4321/64 scope global dynamic mngtmpaddr
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft 7124sec preferred_lft 3524sec
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;开启了隐私拓展后：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4: enp0s20f0u3u4: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu &lt;span class="m"&gt;1500&lt;/span&gt; qdisc fq_codel state UP group default qlen &lt;span class="m"&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; link/ether 01:e0:22:65:43:21 brd ff:ff:ff:ff:ff:ff
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; altname enx00e04c6809ce
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet 192.168.101.80/24 brd 192.168.101.255 scope global dynamic noprefixroute enp0s20f0u3u4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft 8484sec preferred_lft 8484sec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; inet6 fd11:4514:5a51:1:ff9d:d0eb:c4f3:ad54/64 scope global dynamic noprefixroute
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid_lft 7117sec preferred_lft 3517sec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;❯ curl 6.ipw.cn
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2409:8a20:ae0:1361:cfab:d0eb:c4f3:ad543
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中 65-80 的这一段，若不是真实反应 MAC 地址，那么好像在&lt;code&gt;SNPT&lt;/code&gt;的时候不会为你保留。&lt;/p&gt;
&lt;p&gt;有人说，变化是因为要符合校验和，但是对于&lt;code&gt;EUI64&lt;/code&gt;地址好像并不需要啊，这是为什么呢？&lt;/p&gt;
&lt;p&gt;查了下，发现&lt;code&gt;EUI64&lt;/code&gt;并没有强制要求必须保留，所以为了效率和随机性，就找了一个能够唯一标识的地址使用了。&lt;/p&gt;
&lt;h2 class="relative group"&gt;总结
&lt;div id="总结" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%80%bb%e7%bb%93" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;感觉调 RouterOS 完全就是在猜啊，没有 wrt 类那种我理解的感觉，希望以后能找到个大佬浇浇我。&lt;/p&gt;</description></item><item><title>Immortalwrt：IPv6、VLAN 与 NDP 代理</title><link>https://minortex.github.io/posts/immortalwrt-1-ipv6-vlan/</link><pubDate>Sat, 19 Jul 2025 14:15:52 +0800</pubDate><guid>https://minortex.github.io/posts/immortalwrt-1-ipv6-vlan/</guid><description>
&lt;h2 class="relative group"&gt;前言
&lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;早年接触过 wrt，但是那时候用的还是 7621 的设备，使用 mtk 开源驱动后信号会变得非常差，闭源驱动会出现死机的情况。如今入手 7981 的路由器，终于可以研究一下配置以及日用了。&lt;/p&gt;
&lt;h2 class="relative group"&gt;IPv6 上网
&lt;div id="ipv6-上网" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ipv6-%e4%b8%8a%e7%bd%91" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;想让路由器下面的设备上网，无非就这么几种方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;PD(Prefix Delegation): 上级下发 ipv6 的/56 或者/60 的前缀，可以自己划分子网使用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NDP Proxy: 上级通过 SLAAC 分配 ipv6 地址，只开启了 O 标志，获得一个/64 的地址的时候使用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NPTv6: 你有多条宽带，需要做负载均衡。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NAPTv6: 上级只允许通过 DHCPv6 获取地址（一般是学校之类需要强管理或者认证的场景），获得一个/128 的地址。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;欸，这时候有人问，/128 不是也可以使用 ndp 代理吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;理论上确实可行，但是很多 DHCPv6 服务器并不支持代理获取，下面这个&lt;code&gt;tcpdump&lt;/code&gt;结果说明了这一点：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;root@ImmortalWrt:~# tcpdump -i eth1 udp port 546 or udp port 547
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
15:03:40.878466 IP6 fe80::aaaa.546 &amp;gt; ff02::1:2.547: dhcp6 solicit
15:03:40.880132 IP6 fe80::bbbb.547 &amp;gt; fe80::aaaa.546: dhcp6 advertise
15:03:42.905527 IP6 fe80::aaaa.546 &amp;gt; ff02::1:2.547: dhcp6 request
15:03:42.908198 IP6 fe80::bbbb.547 &amp;gt; fe80::aaaa.546: dhcp6 reply
15:04:39.149414 IP6 ImmortalWrt.lan.547 &amp;gt; ff05::1:3.547: dhcp6 relay-fwd
15:04:40.188299 IP6 ImmortalWrt.lan.547 &amp;gt; ff05::1:3.547: dhcp6 relay-fwd
15:04:42.189520 IP6 ImmortalWrt.lan.547 &amp;gt; ff05::1:3.547: dhcp6 relay-fwd
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;使用 ff05 的广播根本就不回你。&lt;/p&gt;
&lt;h3 class="relative group"&gt;NDP 代理
&lt;div id="ndp-代理" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ndp-%e4%bb%a3%e7%90%86" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;在路由器上面这样设置：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;wan6&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DHCP 服务器-IPv6 设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;指定的主接口（打勾）&lt;/li&gt;
&lt;li&gt;RA 服务：中继模式&lt;/li&gt;
&lt;li&gt;DHCPv6 服务：中继模式&lt;/li&gt;
&lt;li&gt;NDP 代理：中继模式&lt;/li&gt;
&lt;li&gt;学习路由（打勾）&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;code&gt;br-lan&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DHCP 服务器-IPv6 设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;指定的主接口（不允许选择了）&lt;/li&gt;
&lt;li&gt;RA 服务：中继模式&lt;/li&gt;
&lt;li&gt;DHCPv6 服务：中继模式&lt;/li&gt;
&lt;li&gt;NDP 代理：中继模式&lt;/li&gt;
&lt;li&gt;学习路由（打勾）&lt;/li&gt;
&lt;li&gt;NDP 代理从属设备（打勾）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样操作相当于透传了上级路由的 RA（路由器通告），上面怎么样配置，你的局域网设备就是怎么样的，没法更改，当然如果你能获取到/64 的前缀，那么下面的设备一般来说也没有问题。&lt;/p&gt;
&lt;h3 class="relative group"&gt;前缀下发
&lt;div id="前缀下发" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e7%bc%80%e4%b8%8b%e5%8f%91" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;这当然是最推荐的方式了。&lt;/p&gt;
&lt;p&gt;在现代的类 wrt 上面，使用&lt;code&gt;PPPoE&lt;/code&gt;在 wan 口上拨号，同时在高级设置里面开启获取 IPv6 地址为自动，如果你的 ISP 有 IPv6 支持，会自动产生一个虚拟动态接口&lt;code&gt;wan_6&lt;/code&gt;。一般这个接口能获取到一个/64 的地址和 IPv6-PD，这是我们能分配的前提条件。&lt;/p&gt;
&lt;p&gt;我的配置是这样的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RA 服务：服务器模式&lt;/li&gt;
&lt;li&gt;DHCPv6 服务：已禁用&lt;/li&gt;
&lt;li&gt;NDP 代理：已禁用&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 class="relative group"&gt;使用简单的路由通告配置
&lt;div id="使用简单的路由通告配置" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bd%bf%e7%94%a8%e7%ae%80%e5%8d%95%e7%9a%84%e8%b7%af%e7%94%b1%e9%80%9a%e5%91%8a%e9%85%8d%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h4&gt;
&lt;p&gt;在家用的小型网络中，完全可以做到不架设 DHCPv6 服务器，只通过 RA 就可以实现基本的配置了，请看这个包：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;root@t-router:~# tcpdump -nvi br-lan ip6&lt;span class="o"&gt;[&lt;/span&gt;40&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;134&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcpdump: listening on br-lan, link-type EN10MB &lt;span class="o"&gt;(&lt;/span&gt;Ethernet&lt;span class="o"&gt;)&lt;/span&gt;, snapshot length &lt;span class="m"&gt;262144&lt;/span&gt; bytes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;10:35:28.476086 IP6 &lt;span class="o"&gt;(&lt;/span&gt;flowlabel 0x4f20d, hlim 255, next-header ICMPv6 &lt;span class="o"&gt;(&lt;/span&gt;58&lt;span class="o"&gt;)&lt;/span&gt; payload length: 144&lt;span class="o"&gt;)&lt;/span&gt; fe80::aaaa &amp;gt; ff02::1: &lt;span class="o"&gt;[&lt;/span&gt;icmp6 sum ok&lt;span class="o"&gt;]&lt;/span&gt; ICMP6, router advertisement, length &lt;span class="m"&gt;144&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hop limit 64, Flags &lt;span class="o"&gt;[&lt;/span&gt;none&lt;span class="o"&gt;]&lt;/span&gt;, pref medium, router lifetime 1800s, reachable &lt;span class="nb"&gt;time&lt;/span&gt; 0ms, retrans timer 0ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;source&lt;/span&gt; link-address option &lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;, length &lt;span class="m"&gt;8&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;: aa:aa:aa:aa:aa:aa
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mtu option &lt;span class="o"&gt;(&lt;/span&gt;5&lt;span class="o"&gt;)&lt;/span&gt;, length &lt;span class="m"&gt;8&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;: &lt;span class="m"&gt;1492&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; prefix info option &lt;span class="o"&gt;(&lt;/span&gt;3&lt;span class="o"&gt;)&lt;/span&gt;, length &lt;span class="m"&gt;32&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;4&lt;span class="o"&gt;)&lt;/span&gt;: 2409:xxxx:xxxx:13a::/64, Flags &lt;span class="o"&gt;[&lt;/span&gt;onlink, auto&lt;span class="o"&gt;]&lt;/span&gt;, valid &lt;span class="nb"&gt;time&lt;/span&gt; 5400s, pref. &lt;span class="nb"&gt;time&lt;/span&gt; 2700s
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; route info option &lt;span class="o"&gt;(&lt;/span&gt;24&lt;span class="o"&gt;)&lt;/span&gt;, length &lt;span class="m"&gt;24&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;3&lt;span class="o"&gt;)&lt;/span&gt;: 2409:xxxx:xxxx:130::/60, &lt;span class="nv"&gt;pref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;medium, &lt;span class="nv"&gt;lifetime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1800s
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; rdnss option &lt;span class="o"&gt;(&lt;/span&gt;25&lt;span class="o"&gt;)&lt;/span&gt;, length &lt;span class="m"&gt;24&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;3&lt;span class="o"&gt;)&lt;/span&gt;: lifetime 1800s, addr: 2409:xxxx:xxxx:13a::1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dnssl option &lt;span class="o"&gt;(&lt;/span&gt;31&lt;span class="o"&gt;)&lt;/span&gt;, length &lt;span class="m"&gt;24&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;3&lt;span class="o"&gt;)&lt;/span&gt;: lifetime 1800s, domain&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;: lan.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; advertisement interval option &lt;span class="o"&gt;(&lt;/span&gt;7&lt;span class="o"&gt;)&lt;/span&gt;, length &lt;span class="m"&gt;8&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;: 600000ms
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;几个重要的信息全部体现在这个里面了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;地址：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;没有配置 Flag，说明是 Stateless，设备自己生成配置，是否开启 RFC4941（隐私地址）由设备自己决定。&lt;/p&gt;
&lt;p&gt;不过无状态自动配置要求地址的前缀必须是/64 以上的，否则会破坏这一行为。&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;网关：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;规定路由通告必须使用 fe80 开头的本地地址来发送路由通告，只要路由存活时间不为 0，那么下面的设备就可以使用这个地址当做默认路由。&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;使用&lt;code&gt;rdnss option&lt;/code&gt;来配置 DNS。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windows 在大概 1709 这个版本之后支持&lt;code&gt;rdnss&lt;/code&gt;了，其他系统应该都支持吧？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用&lt;code&gt;dnssl option&lt;/code&gt;来配置 DNS 搜索域。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个感觉意义不大，因为使用 DHCPv6 才会解析主机名.lan，这个使用 DHCPv4 已经足够了。&lt;/p&gt;
&lt;p&gt;不过注意不要设置成.local，因为 mDNS 会使用这个域名导致冲突，而 mDNS 会自动发现的。&lt;/p&gt;
&lt;p&gt;如果你有/60 的前缀，可以在高级设置里面填写 IPv6 分配提示，4 位正好可以填一位 16 进制数，&lt;code&gt;0-f&lt;/code&gt;，以此类推/56 可以填两位，从而划分多个 IPv6 子网。&lt;/p&gt;
&lt;p&gt;像我就是填了&lt;code&gt;a&lt;/code&gt;。&lt;/p&gt;
&lt;h4 class="relative group"&gt;使用 DHCPv6
&lt;div id="使用-dhcpv6" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bd%bf%e7%94%a8-dhcpv6" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h4&gt;
&lt;p&gt;如果设备比较老，可能还是得开启 DHCPv6，办法就是把 DHCPv6 服务设置成服务器模式。&lt;/p&gt;
&lt;p&gt;这时候就可以在 RA 设置里面的 RA 标记开启几个选项，让设备使用 DHCPv6 服务，这里配置项目已经讲解得很明白，我就不多说了，直接贴上来：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RA 标记
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;受管配置 &lt;span class="o"&gt;(&lt;/span&gt;M&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;受管地址配置 &lt;span class="o"&gt;(&lt;/span&gt;M&lt;span class="o"&gt;)&lt;/span&gt; 标记表明可以通过 DHCPv6 获取 IPv6 地址。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;其他配置 &lt;span class="o"&gt;(&lt;/span&gt;O&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;其他配置 &lt;span class="o"&gt;(&lt;/span&gt;O&lt;span class="o"&gt;)&lt;/span&gt; 标记表明其他信息，如 DNS 服务器，可以通过 DHCPv6 获得。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;移动家乡代理 &lt;span class="o"&gt;(&lt;/span&gt;H&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;移动 IPv6 家乡代理 &lt;span class="o"&gt;(&lt;/span&gt;H&lt;span class="o"&gt;)&lt;/span&gt; 标记表明该设备在此链路上还充当移动 IPv6 家乡代理。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;DHCPv6 还可以配置别的一大堆东西，比如 NTP 之类的，但是 v4 已经干了这一堆了，我觉得除非 v4 被完全替代，否则现阶段完全没有理由用。&lt;/p&gt;
&lt;h3 class="relative group"&gt;NPTv6/NAPTv6
&lt;div id="nptv6naptv6" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#nptv6naptv6" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;如果有多条宽带并且都有 PD，你可以内网分配一个 ULA 地址，然后在路由的时候进行前缀转换，这也是我们学校社团网络的做法。这种办法对于性能要求的不高，本身也算符合 IPv6 的实践。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;但是如果你只能通过 DHCPv6 配到一个/128 的地址，那就没办法了，直接用动态地址伪装（masquerade）吧，一般的路由器都不会有硬件加速，所以网速不太行，但是如果是 IPv6 刚需也没有别的办法了。&lt;/p&gt;
&lt;p&gt;我有点懒得写了，想用的可以参考&lt;a
href="https://blog.creedowl.com/posts/ipv6_and_nat6_in_nuaa/"
target="_blank"
&gt;南航校园网 OpenWRT 配置 IPv6 NAT6&lt;/a&gt;，我自己在学校里面配的过程已经忘记了，不过跟这个应该大差不差。&lt;/p&gt;
&lt;h3 class="relative group"&gt;邻居协议
&lt;div id="邻居协议" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%82%bb%e5%b1%85%e5%8d%8f%e8%ae%ae" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;IPv6 相比 v4 的 b 就是不同，就是邻居协议取代 ARP，RA 实现了 DHCP 的基本功能。&lt;/p&gt;
&lt;p&gt;路由器和客户端使用 NS（Neighbour Solicitation）和 NA（Neighbour Advertisement）来检测地址冲突，探测别的设备。&lt;/p&gt;
&lt;p&gt;一个 SLAAC 的过程具体是这样：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;连接到网络，先生成一个地址，用&lt;code&gt;::&lt;/code&gt;发送到这个地址，看自己生成的&lt;code&gt;fe80::/16&lt;/code&gt;有没有冲突，没有就使用。&lt;/li&gt;
&lt;li&gt;向&lt;code&gt;ff02::&lt;/code&gt;发送 RS，寻找路由器。&lt;/li&gt;
&lt;li&gt;路由器默认会每隔几分钟发送 RA，接收到 RS 后，会尽快回复 RA 消息。&lt;/li&gt;
&lt;li&gt;客户端自己生成一个全球唯一的可路由地址，然后再看有没有冲突，没冲突就开始使用这个地址上网。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class="relative group"&gt;VLAN 划分
&lt;div id="vlan-划分" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#vlan-%e5%88%92%e5%88%86" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;出于管理需要，我决定在路由器上面划分 VLAN 了，不过我其实并没有另一台 VLAN 的交换机，所以说并不是满血的 VLAN。同时由于是新手，对于 VLAN 的理解肯定有不到位之处，请多包涵。&lt;/p&gt;
&lt;h3 class="relative group"&gt;简单的概念
&lt;div id="简单的概念" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%ae%80%e5%8d%95%e7%9a%84%e6%a6%82%e5%bf%b5" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;trunk：在这个通道上面跑的是打上不同 ID 的 VLAN。&lt;/li&gt;
&lt;li&gt;access：某个端口，一般来说一个端口只分配给一个 VLAN ID。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在某个端口上面，选择了 VLAN ID，有不同的标志可以分配：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不属于：这个 VLAN 不分配到这个端口。&lt;/li&gt;
&lt;li&gt;tagged：通过这个端口的数据包，都会被打上这个 VLAN 的 ID。&lt;/li&gt;
&lt;li&gt;untagged：通过这个端口的数据包，如果有 VLAN ID，将会被删除掉。&lt;/li&gt;
&lt;li&gt;是主 VLAN：如果从这个接口进来的数据包没有任何标记，就认为他是这个 VLAN ID 的。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class="relative group"&gt;划分
&lt;div id="划分" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%88%92%e5%88%86" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;我的想法是，&lt;code&gt;.1&lt;/code&gt;的网段分配给熟悉的设备上网，&lt;code&gt;.2&lt;/code&gt;的网段分配给物联网设备，&lt;code&gt;.3&lt;/code&gt;的网段分配给访客网络。&lt;/p&gt;
&lt;p&gt;所以我在设备上的&lt;code&gt;br-lan&lt;/code&gt;的网桥 VLAN 过滤是这么配置的：&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="VLAN Settings"
width="1579"
height="954"
src="https://minortex.github.io/posts/immortalwrt-1-ipv6-vlan/image_hu_ea4d2fcd69c212ee.webp"
srcset="https://minortex.github.io/posts/immortalwrt-1-ipv6-vlan/image_hu_ea4d2fcd69c212ee.webp 800w, https://minortex.github.io/posts/immortalwrt-1-ipv6-vlan/image_hu_978147032300a369.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://minortex.github.io/posts/immortalwrt-1-ipv6-vlan/image.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;这个本地指的是路由器的 CPU 可以识别这个 VLAN 的内容，从而对它进行设置 DHCP 服务器之类的操作。&lt;/p&gt;
&lt;p&gt;路由器有三个口，我全部分配给了 VLAN1，同时设置为主 VLAN 接口（显示为*），这是因为我大概不会在这上面接物联网设备（因为都是 2.4G 的设备）和插入访客的网线。&lt;/p&gt;
&lt;p&gt;这时候在接口里面就可以看到这些虚拟的 VLAN 设备了，为它们设置 DHCP 服务器，防火墙，保存。&lt;/p&gt;
&lt;p&gt;在无线里面，可以创建很多个同频段的 SSID（不会有人才知道吧），但是信道是一样的，接口配置里面可以选择关联的网络，这里选上你设置防火墙的接口，这时候通过这个 SSID 收到的数据就会自动地被交换机打上 VLAN ID 了。&lt;/p&gt;
&lt;p&gt;在防火墙里面可以做更加细致的管理，比如使用&lt;code&gt;conntrack&lt;/code&gt;，只允许 LAN 区段的设备主动发起到 IOT 设备的连接，隔离访客网络和信任网络的区段，非常灵活。&lt;/p&gt;
&lt;p&gt;这时原有配置使用&lt;code&gt;br-lan&lt;/code&gt;的应用，记得修改为&lt;code&gt;br-lan.1&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这里有一个我刚开始不明白的问题：
外部网络根本不识别 VLAN ID，那么转发到 WAN 的流量为什么会自动把 VLAN 头给去掉呢？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其实不是主动去掉的，因为 VLAN 是二层的东西，路由（三层）和 VLAN 是两个相对独立的过程，跨局域网的时候需要换二层封装，所以 VLAN ID 自然没有了。&lt;/p&gt;</description></item></channel></rss>