banner
约 1,800 字
6 分钟

飞牛开启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)怎么通过命令行实现同样效果。

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

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

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

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

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

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

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

    blog image

    这样,即使 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 地址。

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 标识符了。

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

END