为 OpenSUSE 和 UNRAID 开启 IPv6 临时地址优先

IPv6 临时地址和 Privacy Extension

临时地址是 IPv6 Privacy Extension (RFC 4941) 中一项针对 IPv6 地址安全性的改进措施。

在 IPv6 中一般网络设备如路由器分配到的是一个前缀,下级的设备通过特定的算法将自己的 MAC 地址添加在前缀的后面生成一个完整的 IPv6 地址用于访问互联网,由于各种历史原因和技术限制仍然有一些网络设备没有启用临时地址这一特性或是没有将临时地址设置为优先使用的地址。

对于一般使用 PPPoE 拨号的家庭网络 IPv6 虽然前缀可能每次都会更换,但是后缀仍然可能会暴露设备的 MAC 地址,而在没有做特殊处理的情况下设备 MAC 地址是网卡终身唯一的标识,这就意味着在没有使用临时地址和随机 MAC 地址的情况下 IPv6 地址可以用于长期分辨特定的设备,甚至是将网络流量与现实地理位置、个人信息等身份对应起来,如果你不认同 "互联网没有隐私" 这句话,那么你一定不希望这些情况出现。

通过 MAC 地址生成的 IPv6 地址有一个显著的特征是它将会以 FF:FEXX:XXXX 的方式结尾,X 代标任意字母或数字,而 FF:FE 则是固定的。

一句话概括,使用 IPv6 但不适用临时地址或未开启临时地址优先可能会是一个危险的事情。

openSUSE

openSUSE 12 及以上版本默认开启了临时地址,但并没有将临时地址设置为首选,原因是有效期较短可能会影响长连接相关的应用。

openSUSE 默认的网络管理器是 Wicked,如果你的 openSUSE 使用了 NetworkManager 或其他网络管理器,将不会受到影响也无法按照以下方式来设置临时地址优先。

Wicked 在 6 年前 (2014 年) 介绍了通过在 /etc/sysconfig/network/ifsysctl  中配置参数的方式来指定 Privacy Extension 的工作方式,但不幸的是由于 Wicked 代码中的 Bug,这种设置方式从它被添加之后的六年里始终没有按照它的文档中所描述的方式工作过。
Wicked 在 0.6.63 中修复了这个问题,目前 (2020-04-15) 这个版本仅在 openSUSE Leap 15.2 Beta 和更新的版本当中可用,可以使用 sudo wicked --version 来查看当前使用的版本。

如果你使用的是 0.6.63 或更新的版本,可以通过在 /etc/sysconfig/network/ifsysctl 中加入以下内容实现优先使用临时地址:

net.ipv6.conf.$SYSCTL_IF.use_tempaddr = 2

根据修复之前的代码,或许你可以尝试使用以下方式来通过 Wicked 开启这个功能:

net.ipv6.conf.$SYSCTL_IF.privacy = 2

注意: 正确的写法是 use_tempaddr,上面提到的通过讲属性值修改为 privacy 来绕过 Bug 的方式仅通过代码推测并未经过实际测试,且后续升级会导致功能失效!

修改完成后执行 sudo systemctl restart wicked 可以使配置即时生效,你可以通过sudo sysctl -a | grep use_tempaddr 来验证这一点,它不会修改 all 和 default 的值但所有网络接口的值应该均显示为 2。

另外除了使用 Wicked 提供的 ifsysctl 以外,你当然也可以直接修改 sysctl.conf 来实现这个功能 🙂

UNRAID

UNRAID 是 Lime Technology 为 NAS 和家庭媒体服务器定制的付费操作系统,目前 (2012-04-15) 仅能安装在优盘当中,版本为 6.8.3。

根据设计,你可以通过在 Settings -> Network Settings -> IPv6 privacy extensions 中将选项修改为 Enabled 来启用这项功能,但不幸的是这个功能除了在 openSUSE 的 Wicked 中有 Bug 以外在这里也同样出现了 Bug,虽然你可以修改,但保存并不会生效。

你可以通过在 /boot/config/network.cfg 中增加如下内容并重新启动系统来开启这项功能:

PRIVACY6[0]="2"

其中的 "0" 可以参考文件中的其他配置项中的数值来填写,如 PROTOCOL[0]="ipv4+ipv6" 中括号中的值。

注: /boot/ 是启动盘 (优盘) 的挂载位置。

By the way

通过以上方式你可以修改系统在向 IPv6 地址发送请求时优先使用的地址,但以上方式并不能解决如下情况导致的安全问题和 MAC 地址泄露:

  • Bittorrent 软件将本地网卡中的所有地址主动上报给 Tracker
  • 在没有防火墙策略的情况下监听了非临时地址的端口 (可被扫描)

第一种场景可能会存在软件继续将本地路由器分配的基于 MAC 地址或部分 Linux 版本中包含本地网卡 MAC 地址的 mngtmpaddr 上报到 Tracker 服务器的情况。你可以通过禁用局域网当中的 IPv6 DHCP 服务,或仅监听 IPv4 但保留使用 IPv6 主动连出的能力,需要注意的是后者可能会导致一些 Tracker 不再返回 IPv6 客户端。

Leave a Reply

Your email address will not be published. Required fields are marked *