<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OpenWrt on T.本秋的自留地</title><link>https://minortex.github.io/tags/openwrt/</link><description>Recent content in OpenWrt 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/openwrt/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>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><item><title>中国移动 RAX3000Me USB3.0 版折腾小记</title><link>https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/</link><pubDate>Sat, 12 Jul 2025 13:47:15 +0800</pubDate><guid>https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/</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;这几天在闲鱼蹲路由器，终于让我蹲到了一台 65 的 RAX3000Me，遂开始折腾。&lt;/p&gt;
&lt;p&gt;买之前看了下恩山发现可以免拆，无非就是导出导入配置文件破解 ssh 呗，但是到手之后，发现我大意了。&lt;/p&gt;
&lt;p&gt;这台没法按照&lt;cite&gt;标准流程&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/cite&gt;破解密码，通过爬帖得知，无法导出配置的自己的加密都存在问题，没办法免拆。&lt;/p&gt;
&lt;p&gt;那？！CH340，启动！&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%88%b7%e5%86%99%e6%95%99%e7%a8%8b" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;教程大部分都是参考这篇文章，在此感谢。&lt;/p&gt;
&lt;p&gt;&lt;a
href="https://www.right.com.cn/forum/thread-8408539-1-1.html"
target="_blank"
&gt;CMCC RAX3000Me 可通过 mtk_uartboot 启动刷机，拆机刷 OpenWRT/ImmortalWRT 无障碍！&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="#%e6%8b%86%e6%9c%ba" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;先把贴纸撕下来，拧下两颗螺丝。&lt;/p&gt;
&lt;p&gt;左手握着长边，右手握着短边，像这样：&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="操作手法"
width="1039"
height="841"
src="https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image-3_hu_72df38cb10784c8c.webp"
srcset="https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image-3_hu_72df38cb10784c8c.webp 800w, https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image-3.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image-3.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;用力往下掰，会出现一条缝，用薄点的拆机片或者卡片撬开，小心别把卡扣弄断了。&lt;/p&gt;
&lt;p&gt;拧下 5 颗螺丝，卸下散热片，上面涂有硅脂，要稍微移动一下散热片才好下来，装回去的时候得重新涂一下。&lt;/p&gt;
&lt;p&gt;（其实不卸下也行，但是我探针就太难插了）&lt;/p&gt;
&lt;p&gt;推一下下面和右边的卡扣，把主板撬出来，小心不要弄断天线连接处了。&lt;/p&gt;
&lt;p&gt;你会看到这样：&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="拆机图"
width="1736"
height="923"
src="https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image_hu_850f85c7558569ba.webp"
srcset="https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image_hu_850f85c7558569ba.webp 800w, https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image_hu_a0bc269f80f97c3e.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;电源线左边，分别是&lt;code&gt;GND&lt;/code&gt; &lt;code&gt;TX&lt;/code&gt; &lt;code&gt;3.3v&lt;/code&gt; &lt;code&gt;RX&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="#%e6%96%87%e4%bb%b6%e5%87%86%e5%a4%87" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&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;❯ ls -lah
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;总计 2.3M
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x &lt;span class="m"&gt;1&lt;/span&gt; texsd texsd &lt;span class="m"&gt;148&lt;/span&gt; 7月19日 14:11 .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwx------ &lt;span class="m"&gt;1&lt;/span&gt; texsd texsd 1.3K 7月18日 21:58 ..
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- &lt;span class="m"&gt;1&lt;/span&gt; texsd texsd 248K 7月14日 18:10 mt7981-cmcc_rax3000me-nand-ddr3-fip-fit.bin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rwxrwxr-x &lt;span class="m"&gt;1&lt;/span&gt; texsd texsd 206K 2024年 2月 2日 mt7981-ddr3-bl2.bin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rwxr-xr-x &lt;span class="m"&gt;1&lt;/span&gt; texsd texsd 1.9M 2024年 3月 2日 mtk_uartboot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a
href="https://www.right.com.cn/forum/thread-8400306-1-1.html"
target="_blank"
&gt;天灵的 U-Boot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a
href="https://www.lanzouw.com/ioTYu1pvi23g"
target="_blank"
&gt;bl2&lt;/a&gt; &lt;cite&gt;（预构建，也可自行编译）&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;&lt;a
href="https://github.com/981213/mtk_uartboot/releases/tag/v0.1.1"
target="_blank"
&gt;mtk_uartboot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;打开你的&lt;code&gt;shell&lt;/code&gt;，&lt;code&gt;cd&lt;/code&gt;到此文件夹，连接你的 CH340，你应该能在设备管理器看到对应的串口。我是&lt;code&gt;/dev/ttyUSB0&lt;/code&gt;，如果你使用 Windows，一般是&lt;code&gt;COMX&lt;/code&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;./mtk_uartboot -s /dev/ttyUSB0 -p ./mt7981-ddr3-bl2.bin -f mt7981-cmcc_rax3000me-nand-ddr3-fip-fit.bin --brom-load-baudrate &lt;span class="m"&gt;115200&lt;/span&gt; --bl2-load-baudrate &lt;span class="m"&gt;115200&lt;/span&gt; -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;这里要记得加&lt;code&gt;-a&lt;/code&gt;，否则可能识别成 aarch32 导致超时。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这时候应该会提示：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mtk_uartboot - 0.1.1
Using serial port: /dev/ttyUSB0
Handshake...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;准备完成！&lt;/p&gt;
&lt;h3 class="relative group"&gt;刷入 UBOOT
&lt;div id="刷入-uboot" 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%b7%e5%85%a5-uboot" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;把你的 CH340 插上线，用杜邦线什么的都行，但是最好有带弹簧的测试探针，这是我的工具：&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="CH340"
width="1681"
height="1015"
src="https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image-2_hu_d8edd934ec3918e7.webp"
srcset="https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image-2_hu_d8edd934ec3918e7.webp 800w, https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image-2_hu_2b0be9a9ae98c7f9.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://minortex.github.io/posts/flashing_cmcc_rax3000me_usb/image-2.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;找出 CH340 的&lt;code&gt;GND&lt;/code&gt; &lt;code&gt;RX&lt;/code&gt; &lt;code&gt;TX&lt;/code&gt;，从左往右依次按上主板的触点（不用接 3.3v），这时候右手还可以操作电脑。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你不确定是否插好，可以退出 mtk_uartboot，打开任意串口工具并连接，直接插电启动，应该能看到调试信息。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;确认插好了，就直接上电，大概 30 秒左右，mtk_uartboot 输出以下内容并交还 shell：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mtk_uartboot - 0.1.1
Using serial port: /dev/ttyUSB0
Handshake...
hw code: 0x7981
hw sub code: 0x8a00
hw ver: 0xca00
sw ver: 0x1
Baud rate set to 115200
sending payload to 0x201000...
Checksum: 0x55cf
Setting baudrate back to 115200
Jumping to 0x201000 in aarch64...
Waiting for BL2. Message below:
==================================
NOTICE: BL2: v2.10.0 (release):v2.4-rc0-5845-gbacca82a8-dirty
NOTICE: BL2: Built : 20:18:08, Feb 2 2024
NOTICE: WDT: Cold boot
NOTICE: WDT: disabled
NOTICE: EMI: Using DDR3 settings
NOTICE: EMI: Detected DRAM size: 512MB
NOTICE: EMI: complex R/W mem test passed
NOTICE: CPU: MT7981 (1300MHz)
NOTICE: Starting UART download handshake ...
==================================
BL2 UART DL version: 0x10
Baudrate set to: 115200
FIP sent.
==================================
NOTICE: Received FIP 0x3df58 @ 0x40400000 ...
==================================
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后路由器就会亮起蓝灯（正常进官方系统没联网是红灯），网线插 LAN 口连到电脑，输入&lt;code&gt;192.168.1.1/uboot.html&lt;/code&gt;，上传之前下载的 uboot。&lt;/p&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%b8%80%e4%ba%9b%e9%97%ae%e9%a2%98" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;mtk_uartboot&lt;/code&gt;异常退出，提示 coredump&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这大概率是连接不好/接上了 3.3v。建议不要接 3.3v，否则每次连上都会导致 CH340 断开连接。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;无论怎么尝试，总是提示&lt;code&gt;Timeout waiting for specified message.&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;有下面两种情况：&lt;/p&gt;
&lt;p&gt;第一种：没有加&lt;code&gt;-d&lt;/code&gt;参数。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Jumping to 0x201000 in aarch32...
Waiting for BL2. Message below:
==================================
==================================
Timeout waiting for specified message.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这就是默认使用了&lt;code&gt;aarch32&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="o"&gt;==================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NOTICE: BL2: v2.10.0 &lt;span class="o"&gt;(&lt;/span&gt;release&lt;span class="o"&gt;)&lt;/span&gt;:v2.4-rc0-5845-gbacca82a8-dirty
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NOTICE: BL2: Built : 20:20:25, Feb &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="m"&gt;2024&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NOTICE: WDT: Cold boot
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NOTICE: WDT: disabled
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NOTICE: EMI: Using DDR4 settings
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NOTICE: EMI: Detected DRAM size: &lt;span class="nv"&gt;0MB&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;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你的 bl2 用错了，请确认你的 ddr 类型，或者尝试另外一种 ddr 类型。&lt;/p&gt;
&lt;p&gt;第三种：是&lt;code&gt;aarch64&lt;/code&gt;，但是没有输出。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Jumping to 0x201000 in aarch64...
Waiting for BL2. Message below:
==================================
==================================
Timeout waiting for specified message.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可能是以下情况：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;自己编译的 bl2 没成功。&lt;/li&gt;
&lt;li&gt;下载中出现损坏。&lt;/li&gt;
&lt;li&gt;使用了 immortalwrt 官方的 preloader，此文件我试了很多次都没成功，原因未知。&lt;/li&gt;
&lt;/ol&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%b7%e5%85%a5%e5%9b%ba%e4%bb%b6" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&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="#%e6%96%b0%e7%89%88%e5%9b%ba%e4%bb%b6" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h4&gt;
&lt;p&gt;新版的&lt;code&gt;immortalwrt&lt;/code&gt;（23.05 和我打算用的 24.10）已经在使用一种新的镜像文件&lt;code&gt;*.itb&lt;/code&gt;，这个镜像同时包含&lt;code&gt;dtb&lt;/code&gt; &lt;code&gt;ramdisk&lt;/code&gt; &lt;code&gt;kernel&lt;/code&gt;。想要详细了解的可以参考&lt;a
href="http://www.wowotech.net/u-boot/fit_image_overview.html"
target="_blank"
&gt;u-boot FIT image 介绍&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;直接刷入&lt;code&gt;sysupgrade&lt;/code&gt;的&lt;code&gt;itb&lt;/code&gt;可能会出现不成功的情况，表现为一直闪蓝灯，这里我们需要先刷入&lt;code&gt;initramfs&lt;/code&gt;的&lt;code&gt;itb&lt;/code&gt;，重启进入系统之后，再刷入对应的&lt;code&gt;sysupgrade&lt;/code&gt;镜像。&lt;/p&gt;
&lt;p&gt;请注意&lt;code&gt;uboot&lt;/code&gt;版本可能与固件版本相关，经过测试天灵 25 年 3 月编译的&lt;code&gt;uboot&lt;/code&gt;是可以使用我上面的方法刷入 237 固件。&lt;/p&gt;
&lt;p&gt;&lt;a
href="https://github.com/padavanonly/immortalwrt-mt798x-6.6"
target="_blank"
&gt;padavanonly/immortalwrt-mt798x-6.6&lt;/a&gt;&lt;/p&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="#%e6%97%a7%e7%89%88%e5%9b%ba%e4%bb%b6" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h4&gt;
&lt;p&gt;如果你想使用原汁原味的&lt;a
href="https://cmi.hanwckf.top/p/immortalwrt-mt798x/"
target="_blank"
&gt;immortalwrt-mt798x&lt;/a&gt;，你可能得使用原版的 hanwckf 的&lt;code&gt;uboot&lt;/code&gt;，这个版本没有&lt;code&gt;dhcp&lt;/code&gt;需要手动设置静态地址。建议使用 24.11 的版本，因为尝试了 22 年的版本发现不认复旦微的这颗 NAND，导致&lt;code&gt;uboot&lt;/code&gt;无法启动，只能使用 CH340 重新刷一遍。&lt;/p&gt;
&lt;p&gt;而且，使用最新源码编译出来会导致 wifi 设置中缺少加密方式的问题，此问题亦有在 issues 里面提及，但感觉修复的可能性不大。&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%8f%82%e8%80%83" aria-label="锚点"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a
href="https://github.com/Daniel-Hwang/RAX3000Me"
target="_blank"
&gt;Daniel-Hwang/RAX3000Me: RAX3000Me 路由器开发与固件刷入详细教程&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;&lt;a
href="https://www.cnblogs.com/p123/p/18046679"
target="_blank"
&gt;MediaTek Filogic 系列路由器串口救砖教程 - 暗云 - 博客园&lt;/a&gt;&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item></channel></rss>