本文最后更新于2 天前,其中的信息可能已经过时,如有错误请发送邮件到123@1day.vip
前言
我家里的网络是开启主路由的防火墙,关闭下级设备防火墙的策略,好处是结构简单易操作,同时可以有效控制一些智能设备暴露到公网。于是会衍生出一个问题,远程访问家里飞牛上的服务,由于没有公网IPv4,所以常用IPv6通过ddns访问内网,但IPv6会变,主路由的防火墙怎么设置就成为了困难,其实很好解决,只需开启EUI64功能,就可以固定IPv6地址后缀。
如何设置
- 开启飞牛的EUI-64功能,开启后IPv6地址的后四段会被固定
- 设置DDNS服务,实现外网访问
这里服务不限,可以用飞牛自己的,也可安装ddns-go等工具实现,我自己习惯用lucky。
- 主路由开启IPv6防火墙,路由器型号不限,OpenWrt软路由或品牌硬路由只要有防火墙功能就可以。
我的主路由是华硕,开启IPv6防火墙后,外网无法访问,说明防火墙已生效。
- 添加放行规则,本地IP填写
::飞牛IPv6后四段/::ffff:ffff:ffff:ffff或::飞牛IPv6后四段/-64,通信端口写外网映射端口,我的是6677
各系统设备通过 EUI-64 固定 IPv6 后缀
飞牛设置仅需勾选是最简单的,当然其他设备也有相同的需求,比如异地组网、远程操控电脑、串流游戏等,只是要麻烦一点需要通过命令行的形式开启EUI-64功能。
Windows 11
用管理员权限打开 PowerShell,输入 Get-NetIPv6Protocol。
PS C:\Users\sukipai> Get-NetIPv6Protocol
DefaultHopLimit : 128
......
RandomizeIdentifiers : Enabled
AddressMaskReply : Disabled
UseTemporaryAddresses : Enabled
......
注意到以下两个参数
RandomizeIdentifiers:网络配置参数,用于控制 Windows 操作系统在生成接口标识符(Interface Identifier,IID)时是否使用随机值。
UseTemporaryAddresses:设置使用临时地址。
输入以下命令使用 EUI-64 固定 IPv6 后缀
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 中,可以通过以下命令配置:
# 查看当前网络接口配置
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::开头的链路本地地址和全局单播地址)。













