终极指南:为 Armbian NAS 配置永久固定的 IPv6 访问 (全管理器攻略) 本教程的最终目标是:
- 让你的 Armbian NAS 拥有一个永久固定的 IPv6 接口标识符 (IID)。
- 配置你的路由器防火墙,使其无视 ISP 公网前缀的变化,实现“一劳永逸”的端口转发。
本教程涵盖所有主流的网络管理方式。
第〇部分:(必做) 先行检查:识别你的系统环境
在开始之前,我们必须了解你的系统是如何管理网络的。请在你的 Armbian 终端中执行以下命令。
步骤 0.1:查找你的主网卡接口名 你需要找到你连接到路由器的物理网卡名称。执行:
Bash
ip a
如何读取: 查找 state UP 的接口。
eth0 (或 enpXsX, ensX): 这是你的目标。
lo: 这是环回接口,忽略。
docker0, br-XXXX, vethXXXX: 这些是 Docker 或虚拟网桥,忽略。
请记下你的接口名,在本教程中我们将以 eth0 为例。
步骤 0.2:确定你的网络管理器 你需要知道是哪个服务在管理你的网络。请依次执行以下两个命令:
Bash
systemctl status NetworkManager
Bash
systemctl status systemd-networkd
如何判断:
如果 NetworkManager 的输出显示 Active: active (running):你的系统由 NetworkManager 管理。请跳转到 第二部分 并选择 路径 A 来执行。
如果 systemd-networkd 的输出显示 Active: active (running):你的系统由 systemd-networkd 管理。请跳转到 第二部分 并选择 路径 B 来执行。
如果两者都是 inactive 或 not-found:你的系统很可能使用传统的 ifupdown (/etc/network/interfaces)。请跳转到 第二部分 并选择 路径 C 来执行。
第一部分:固定 NAS 的 IID (三选一)
你的目标是让 NAS 的 IPv6 地址后 64 位(IID)永久不变。这里有三种策略,请选择一种,然后根据你在 第〇部分 中确定的路径来执行。
策略 1 (推荐): RFC7217 (稳定隐私地址)
优点: IID 永久稳定,且无法通过 IID 反推出你的 MAC 地址,隐私性高。
策略 2 (经典): EUI-64 (基于 MAC 地址)
优点: IID 永久稳定,且是根据你的 MAC 地址“计算”出来的,可预测。
策略 3 (手动): 静态 IID
优点: IID 永久稳定,且可以自定义为你喜欢的简短数字 (如 ::1234)。
第二部分:执行 IID 固定 (根据你的路径操作)
根据你在第〇部分确定的结果,只看属于你的那一条路径。
路径 A:使用 NetworkManager (nmcli) [推荐]
(如果你的 NetworkManager 是 active)
1. 查找连接名称: 执行以下命令,找到 DEVICE 列为 eth0 (或你的接口名) 的那一行,并记下其 NAME 列的名称(例如 Wired connection 1)。
Bash
nmcli connection show
2. 执行策略 (三选一): 注意: 将下面的 <连接名> 替换为你的实际名称 (例如 "Wired connection 1")。
执行策略 1 (RFC7217):
Bash
sudo nmcli connection modify "<连接名>" ipv6.addr-gen-mode stable-privacy
执行策略 2 (EUI-64):
Bash
sudo nmcli connection modify "<连接名>" ipv6.addr-gen-mode eui64
执行策略 3 (手动): (假设你想要 ::1234 作为 IID)
Bash
sudo nmcli connection modify "<连接名>" ipv6.token "::1234"
3. 应用更改并跳转: 执行以下命令使配置立即生效。
Bash
sudo nmcli connection up "<连接名>"
4. 跳转到 第三部分。
路径 B:使用 systemd-networkd
(如果你的 systemd-networkd 是 active)
1. 创建/编辑配置文件: 你需要创建一个 .network 文件来管理你的接口。 (将 eth0 替换为你的实际接口名,例如 10-enp3s0.network)
Bash
sudo nano /etc/systemd/network/10-eth0.network
2. 编辑文件内容 (三选一): 将以下三块内容之一完整复制并粘贴到 nano 编辑器中。(注意: 记得将文件中的 eth0 替换为你的实际接口名!)
执行策略 1 (RFC7217):
Ini, TOML
[Match]
Name=eth0
[Network] IPv6AcceptRA=yes IPv6AddressGenerationMode=stable-privacy
执行策略 2 (EUI-64):
Ini, TOML
[Match]
Name=eth0
[Network] IPv6AcceptRA=yes IPv6AddressGenerationMode=eui64
执行策略 3 (手动): (假设你想要 ::1234 作为 IID)
Ini, TOML
[Match]
Name=eth0
[Network] IPv6AcceptRA=yes Token=::1234
3. 重启服务使其生效: (在 nano 中,按 Ctrl+O 保存, Enter 确认, Ctrl+X 退出)。 然后执行:
Bash
sudo systemctl restart systemd-networkd
4. 跳转到 第三部分。
路径 C:使用 ifupdown / sysctl (传统方法)
(如果 NetworkManager 和 systemd-networkd 都是 inactive)
此路径稍微复杂,需要同时配置 sysctl (内核参数) 和 interfaces (接口)。
1. 配置 sysctl (关闭临时地址): 创建或编辑 /etc/sysctl.d/99-ipv6-custom.conf:
Bash
sudo nano /etc/sysctl.d/99-ipv6-custom.conf
添加以下内容 (将 eth0 替换为你的接口):
Ini, TOML
# 禁用临时 (隐私) 地址
net.ipv6.conf.eth0.use_tempaddr = 0
# 确保开启 SLAAC
net.ipv6.conf.eth0.accept_ra = 1
net.ipv6.conf.eth0.autoconf = 1
2. 执行策略 (三选一):
执行策略 1 (RFC7217): 在刚才的 99-ipv6-custom.conf 文件中再添加一行:
Ini, TOML
net.ipv6.conf.eth0.addr_gen_mode = 3
执行策略 2 (EUI-64): 在刚才的 99-ipv6-custom.conf 文件中再添加一行:
Ini, TOML
net.ipv6.conf.eth0.addr_gen_mode = 0
执行策略 3 (手动): (假设你想要 ::1234 作为 IID) 编辑 /etc/network/interfaces (或 /etc/network/interfaces.d/eth0):
Bash
sudo nano /etc/network/interfaces
在 eth0 的配置块中 (寻找 iface eth0 inet6 auto 这一行),在它下面添加 up 命令:
iface eth0 inet6 auto
up ip token set ::1234 dev $IFACE
(如果 iface eth0 inet6 auto 不存在, 请添加这两行)
3. 应用所有更改: (如果你编辑了 nano,请按 Ctrl+O 保存, Enter 确认, Ctrl+X 退出)。 执行以下命令以应用所有更改:
Bash
# 应用 sysctl 内核参数
sudo sysctl -p /etc/sysctl.d/99-ipv6-custom.conf
# 重启网络接口 (将 eth0 替换为你的接口)
sudo ifdown eth0 && sudo ifup eth0
4. 跳转到 第三部分。
第三部分:验证并获取你的稳定 IID
无论你用了哪条路径,现在都来验证结果。
在 NAS 上运行命令 (将 eth0 替换为你的接口):
Bash
ip -6 addr show dev eth0
在输出中,找到那行 scope global 的地址。它看起来像: inet6 2a01:c23:4567:89ab:021a:2bff:fe3c:4d5e/64 scope global ...
这就是你的结果! 请复制地址的最后 64 位 (最后 4 个块)。
策略 1 (RFC7217) 示例: 8a1b:2c3d:4e5f:6789 (一个看起来随机但固定的值)
策略 2 (EUI-64) 示例: 021a:2bff:fe3c:4d5e (基于你 MAC 00:1A:2B:3C:4D:5E 计算的值)
策略 3 (手动) 示例: 1234 (它会自动补全为 0000:0000:0000:1234)
请将你复制的 IID 字符串保存好,下一步防火墙要用。
第四部分:(核心) 在路由器上配置“掩码”防火墙
理念: 我们将使用 ::/::ffff:ffff:ffff:ffff 格式,它告诉防火墙:“请只匹配 IPv6 地址的后 64 位 (即 IID),完全忽略前 64 位 (即会变化的网络前缀)”。
步骤 4.1:组合你的防火墙目标字符串
目标地址: :: + 你刚复制的IID
目标掩码: ::ffff:ffff:ffff:ffff
最终完整字符串: [目标地址]/[目标掩码]
请根据你的 IID 组合出这个字符串:
策略 1 (RFC7217) 示例: ::8a1b:2c3d:4e5f:6789/::ffff:ffff:ffff:ffff
策略 2 (EUI-64) 示例: ::021a:2bff:fe3c:4d5e/::ffff:ffff:ffff:ffff
策略 3 (手动) 示例: ::1234/::ffff:ffff:ffff:ffff
步骤 4.2:在 OpenWrt (或类似路由器) 上配置端口转发 (这部分在路由器 Web 界面操作,无需 Armbian 命令)
登录你的 OpenWrt 路由器。
导航至 “网络” -> “防火墙” -> “端口转发”。
点击 “添加” 来创建一条新规则。
填写规则详情:
名称: Allow-NAS-IPv6 (或任何描述性名称)
协议: TCP (或根据你的服务选择)
源区域: wan
外部端口: 443 (你希望对外开放的端口)
目标区域: lan
内部 IP 地址: ( 关键步骤 )
选择“自定义”或直接在输入框中,粘贴你在 步骤 4.1 中组合的“最终完整字符串”。
内部端口: 443 (或你的服务在 NAS 上的实际端口,如 8096)
点击 “保存” 并 “保存并应用”。
第五部分:收尾工作 (DDNS 的角色)
恭喜你,防火墙规则已配置完毕。但你仍然需要 DDNS (如 ddns-go)。
为什么?
你的防火墙现在只认“IID”,不认“前缀”。
但外界的 DNS 系统必须知道你的完整地址 (包含前缀) 才能找到你的路由器。
完整工作流程:
ISP 变更了你的公网前缀。
你的 NAS (运行 ddns-go) 检测到它的新公网地址 (例如 新前缀::稳定IID)。
ddns-go 立刻更新 Cloudflare,将 nas.yourdomain.com 指向这个新地址。
外部用户访问 nas.yourdomain.com。
请求到达你的 OpenWrt 路由器。
OpenWrt 防火墙检查该请求的目标地址 ( 新前缀::稳定IID ),并将其与你的规则 ( ::稳定IID/::ffff... ) 进行“掩码”匹配。
匹配成功。 请求被转发到你的 NAS。
你已成功实现了一个包含所有系统分支、并使用掩码方法的终极 IPv6 访问策略。

