banner
约 2,400 字
8 分钟

飞牛开启EUI64功能,实现主路由IPv6防火墙单设备放行

摘要

家中主路由开启 IPv6 防火墙、关闭下级设备防火墙时,远程通过 IPv6+DDNS 访问内网会因地址变化难以放行。开启飞牛的 EUI-64 功能可固定 IPv6 地址后四段,从而在主路由防火墙添加单设备放行规则。文章给出飞牛设置步骤,以及 Windows、Linux、macOS 通过命令行禁用临时地址/随机标识符以启用 EUI-64 的方法,并附验证命令。

前言

先交代一下我的网络环境:家里主路由开着防火墙,下级设备(比如 NAS)是关掉自己防火墙的。这样做的优点是结构简单、易操作,同时能有效避免一些智能设备意外暴露到公网。

但这也带来一个难题:远程访问家里飞牛上的服务时,由于没有公网 IPv4,只能靠 IPv6 通过 DDNS 访问内网。问题来了——IPv6 地址前缀会变,主路由的防火墙到底该怎么设置才能精准放行,就成了一个麻烦事。

其实很好解决:只要开启 EUI-64 功能,就能把 IPv6 地址的后缀固定下来。后缀固定了,防火墙规则就能写得非常精准。这篇文章就完整讲一遍:飞牛怎么开 EUI-64、主路由怎么放行、其他系统(Win/Linux/macOS)怎么通过命令行实现同样效果。

先弄明白:IPv6 地址为什么"变来变去"

这个问题的根源在于 IPv6 地址的构成方式。一个典型的公网 IPv6 地址是 128 位,分成两半看:

部分

位数

内容

会不会变

前缀(Prefix)

前 64 位

由运营商分配给你的网络号

会变(重新拨号/重连可能换)

接口标识符(IID)

后 64 位

标识这是哪台设备

默认也会变

前缀为什么会变? 因为家用宽带拿到的通常是运营商动态分配的地址段。路由器重新拨号、光猫重启、运营商侧调整,前缀都可能换一批。这也是必须用 DDNS 的原因——地址变了,得有个机制把新地址同步到域名上

后缀为什么会变? 这是出于隐私考虑的设计。早期 IPv6 的标准做法(EUI-64)是把网卡 MAC 地址编码进后 64 位——问题是 MAC 地址全球唯一且固定,等于给每台设备烙了个永久身份证号,走到哪都能被追踪。所以后来的系统默认启用了"隐私扩展"(RFC 4941):地址后缀随机生成,还会定期更换。

于是就出现了这个局面:前缀会变、后缀也会变,地址完全不固定。DDNS 能解决前缀变化(把新地址写到域名上),但防火墙规则没法跟着变——你不能给防火墙配一条"放行飞牛"的抽象规则,它只认具体的地址或地址段。

EUI-64 的作用就是把"会变的后缀"变成"固定值":主动关掉隐私扩展,让后缀基于 MAC 计算出来,从此稳定不变。这样:

  • 前缀变 → 交给 DDNS 处理(域名始终指向最新地址)

  • 后缀不变 → 防火墙规则可以写死,一次配好长期有效

两条腿走路,远程访问才稳。 这是理解整篇文章的关键。

一、在飞牛 NAS 上开启 EUI-64

  1. 开启飞牛的 EUI-64 功能。开启后,设备 IPv6 地址的后四段(接口标识符)会被固定,不再随每次连接变化。飞牛上这一步很简单,只要在对应设置里勾选即可。

blog image
  1. 配置 DDNS 服务,实现外网访问。这里的服务不设限:可以用飞牛自带的,也可以安装 ddns-go 之类的工具。我自己习惯用 lucky

blog image

DDNS 这一环的关键是取址方式:它要能正确读取到这台设备的公网 IPv6 地址(而不是 fe80:: 开头的链路本地地址、也不是内网私有地址)。判断办法很简单:DDNS 更新后,去 DNS 解析记录里看结果,如果解析出来的是 fe80:: 开头,那就是取错了地址类型,需要调整取址方式(一般选"通过接口获取"或"通过 API 获取")。

  1. 在主路由上开启 IPv6 防火墙。路由器型号不限——OpenWrt 软路由或品牌硬路由,只要有防火墙功能都可以。我的主路由是华硕,开启 IPv6 防火墙后,先从外网试访问,发现无法访问,说明防火墙已生效。

blog image

"先确认打不通,再开规则"是个很好的习惯。 如果不先验证这一步,你后面加了规则还是访问不了,就分不清到底是"规则写错了"还是"防火墙压根没拦住、问题在别处"。先制造一个确定的失败状态,再加规则把它变成功——这是排查网络问题最省时间的方法。

  1. 添加精准放行规则。因为 IPv6 后缀已固定,防火墙规则可以这样写:

  • 本地 IP:填写 ::飞牛IPv6后四段/::ffff:ffff:ffff:ffff::飞牛IPv6后四段/-64

  • 通信端口:填你外网映射的端口,我的是 6677

blog image

这两串看起来像乱码的东西,含义其实很简单:IPv6 地址可以缩写成 :: 省略前面连续的 0。所以 ::abcd:ef01:2345:6789/::ffff:ffff:ffff:ffff 的意思是——前缀部分随便是什么(:: 全 0),后 64 位必须精确等于 abcd:ef01:2345:6789。后面那个 /::ffff:ffff:ffff:ffff 是掩码,ffff 代表"这 16 位要精确匹配",四个 ffff 就是后 64 位全精确匹配。/-64 则是另一种简写形式,表达的意图一致。

换句话说,规则匹配的是"设备身份"而不是"当前地址"——这正是 EUI-64 带来的好处:前缀换了,这条规则照样命中。

这样,即使 IPv6 前缀变化,只要后四段固定,规则依然精准命中,不会误伤其他设备,也不用频繁改防火墙。

二、其他系统设备通过 EUI-64 固定 IPv6 后缀

飞牛上勾选最省事。但像异地组网、远程操控电脑、串流游戏等场景,其他设备(Windows 电脑、Linux 服务器、Mac)也有固定 IPv6 后缀的需求。这些系统默认会随机化接口标识符,需要手动关闭才能用上 EUI-64。下面按系统给出命令。

Windows 11

管理员权限打开 PowerShell,先查看当前配置:

纯文本
PS C:\Users\sukipai> Get-NetIPv6Protocol

DefaultHopLimit               : 128
......
RandomizeIdentifiers          : Enabled
AddressMaskReply              : Disabled
UseTemporaryAddresses         : Enabled
......

注意两个关键参数:

  • RandomizeIdentifiers:控制 Windows 生成接口标识符(IID)时是否使用随机值。

  • UseTemporaryAddresses:是否使用临时地址。

要改成 EUI-64(后缀固定、基于网卡 MAC),执行:

纯文本
Set-NetIPv6Protocol -RandomizeIdentifiers Disabled
Set-NetIPv6Protocol -UseTemporaryAddresses Disabled

⚠️ 执行后,IP 可能会瞬间变化导致断连,建议做好充分准备(比如提前确认重连方式)再操作。变化后的 IPv6 后缀会包含你网卡的 MAC 地址。

如果你是通过远程桌面/串流连着这台机器操作的,务必先准备好"后路":确认机器有本地显示器可用、或者你有内网 Web 管理入口能远程重启网卡。我自己的习惯是先设一个恢复计划再动手——网络类改动一旦改错,代价往往是"人不在现场,进不去机器"。

Linux

Linux 下通过 sysctl 禁用随机化标识符和临时地址:

纯文本
# 查看当前配置
sysctl net.ipv6.conf.all.use_tempaddr
sysctl net.ipv6.conf.default.use_tempaddr
sysctl net.ipv6.conf.eth0.use_tempaddr

# 禁用临时地址和随机化标识符
sudo sysctl -w net.ipv6.conf.all.use_tempaddr=0
sudo sysctl -w net.ipv6.conf.default.use_tempaddr=0
sudo sysctl -w net.ipv6.conf.eth0.use_tempaddr=0

# 永久生效(以 Ubuntu/Debian 为例)
echo "net.ipv6.conf.all.use_tempaddr = 0" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.default.use_tempaddr = 0" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.eth0.use_tempaddr = 0" | sudo tee -a /etc/sysctl.conf

# 应用配置
sudo sysctl -p

重启网络服务或重新连接网络后,系统就会使用基于 MAC 地址的 EUI-64 标识符了。

all / default / 具体网卡名三个都要设,不是重复劳动default 是给"以后新建的网卡"用的默认值,all 是给所有现有网卡用的,eth0 是明确指定某一块网卡。只改 eth0 的话,将来你插了新网卡、或者系统把网卡重命名成 enp3s0,配置就失效了。写全三条最省心。

另外注意把 eth0 换成你实际的网卡名——用 ip linkip -6 addr show 看一下,现在很多发行版用的是 enpXsY 这种可预测命名。

macOS

macOS 下可以通过 networksetupsysctl 配置:

纯文本
# 查看当前网络接口配置
networksetup -listallnetworkservices

# 对每个网络接口(如 Wi-Fi、Ethernet)关闭隐私扩展
sudo networksetup -setv6privacy Wi-Fi off

# 验证配置
networksetup -getv6privacy Wi-Fi

或者使用 sysctl 方法:

纯文本
# 临时禁用
sudo sysctl -w net.inet6.ip6.use_tempaddr=0

# 永久生效
echo "net.inet6.ip6.use_tempaddr=0" | sudo tee -a /etc/sysctl.conf

三、验证配置

配置完成后,用命令验证 IPv6 地址是否已变为 EUI-64 格式:

纯文本
# Windows
ipconfig /all

# Linux
ip -6 addr show

# macOS
ifconfig en0 | grep inet6

在输出里查找包含网卡 MAC 地址信息的 IPv6 地址(通常是以 fe80:: 开头的链路本地地址和全局单播地址)。如果找到了带 MAC 特征的后缀,说明 EUI-64 已生效。

怎么一眼认出 EUI-64 后缀? 有个很实用的小技巧:EUI-64 是把 MAC 地址(48 位)中间插进 ff:fe 拼成 64 位的,所以后缀中间一段通常是 ff:fe。比如 MAC 是 00:11:22:33:44:55,对应的后缀大致是 0211:22ff:fe33:4455(第 7 位还会做一次翻转,所以开头不是 00 而是 02)。看到 ff:fe 出现在地址中间,基本就能确定是 EUI-64 生效了。

⚠️ 反过来看,这个特征也是"隐私代价":任何人看到你的 IPv6 地址,就能反推出你的网卡 MAC 地址,进而识别出网卡厂商。所以固定后缀是一种用隐私换稳定的取舍——这也是下面这条建议的原因。

安全提醒:固定后缀之后,别忘了这几点

固定后缀让远程访问变稳了,但也降低了设备在公网上的"隐蔽性"。几条要配合做的事:

1. 别裸奔,一定要有防火墙白名单。 固定后缀意味着攻击者只要知道你这一台设备的地址,就能长期盯着它。放行规则里除了限地址,还要限端口——只开你真正需要暴露的那几个服务端口,别图省事放行整台设备的所有端口。

2. 关掉不需要对外暴露的服务。 常见的问题是把 NAS 的管理后台、SSH、数据库端口一起映射出去了。管理后台和 SSH 尽量只在内网访问,需要在外网用时走一层反代 + 二次验证(比如给服务加一层登录验证后再暴露)。

3. 别用默认端口。 虽然 IPv6 地址空间极大(靠扫描穷举整个网段不现实),但已知目标的针对性扫描是常态。把 22、3389、5000 这类"一眼就知道是什么"的默认端口换掉,能挡掉大量自动化探测。

4. 定期看一眼日志。 反代或服务本身通常都有访问日志。出现大量来自陌生地址的失败登录尝试时,说明服务已经被扫到了,该收紧规则或加限速了。

小结

用 EUI-64 固定 IPv6 后缀,本质是把"会变的后缀"变成"可预期的固定值",配合防火墙精准放行 + DDNS 动态更新前缀,就能稳定地远程访问家里服务,又不至于把整段内网暴露到公网。飞牛用户勾选即可,其他设备按上面的命令稍作配置也能实现同样效果。需要提醒的是:固定后缀意味着设备在局域网内更容易被定位,建议配合防火墙白名单使用,别把固定了后缀的设备直接裸奔到公网。

常见问题

Q:改完设置后网络断了,怎么办?

这正是前面提醒过的风险。恢复方式取决于你的接入方式:如果人在现场,直接接显示器/键盘本地登录改回来即可;如果是远程操作,给机器插上网线通常能让它重新拿到一个地址(有线网卡和无线网卡的 IID 是各自独立的)。实在不行就重启设备——大多数系统的网络配置在下次启动时会重新计算地址。

Q:EUI-64 已经开了,为什么外网还是访问不了?

按这个顺序排查:① DDNS 解析出来的地址对不对(不能是 fe80:: 开头);② 防火墙规则是否命中(有的路由器需要把规则放在"允许"链的最前面,被默认拒绝规则抢先了就没用);③ 服务本身是否监听 IPv6(很多服务的配置默认只听 IPv4 的 0.0.0.0,需要改成监听 :: 或同时监听);④ 运营商是否封了端口——家用宽带常封 80/443,这也是我外网端口用 6677 这种非标准端口的原因。

Q:前缀变了之后要手动做什么吗?

不需要。DDNS 会自动把新前缀同步到域名上,而防火墙规则因为只匹配后 64 位,前缀变化不影响命中。这正是"前缀交给 DDNS、后缀交给 EUI-64"这套分工的好处——日常零维护。

Q:用手机流量能访问吗?

可以,前提是你的手机运营商网络支持 IPv6(目前主流运营商都已支持)。判断方法:把手机 Wi-Fi 关掉、只用流量,去 IPv6 测试站点看一眼有没有拿到 IPv6 地址。如果你的访问环境只有 IPv4,那 IPv6 直连是走不通的——这属于访问侧的环境限制,跟家里的配置无关。

Q:为什么不用 IPv4 端口映射?

因为大多数家用宽带拿不到公网 IPv4 地址(运营商普遍做了 NAT 共享),你能"映射"的只是运营商那层内网的端口,外网访问不到。这十几年 IPv6 的普及,恰恰让家用远程访问重新变得可行——所以现在家里要远程访问,IPv6 + DDNS + 精准防火墙这条路线几乎是首选方案。

END