得之我幸 失之我命

when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.

NetworkManager 随机生成 MAC 地址

当下只要有个 Wi-Fi,你就有了全世界。但现在的 Wi-Fi 尤其是公共 Wi-Fi,大多不会是靠着善心发射的,基本都是各怀鬼胎,每张网卡都对应唯一的 MAC 地址,通过它,Wi-Fi 背后的 “阴谋家们” 可以追踪你的设备顺便也追踪了你

下面就来看一下避免被追踪的一个思路,因为固定的 MAC 地址能被轻易地追踪到,所以应该定时进行更换,随机的 MAC 地址是一个好的方法,由于 MAC 地址一般只在局域网内使用,因此随机的 MAC 地址也不大会产生冲突。至于实现,在 debian 上可以直接用 NetworkManager 自带的功能实现

NetworkManager 简介

NM 由一个管理系统网络连接、并且将其状态通过 D-BUS(一个提供简单的应用程序互相通讯的途径的自由软件项目,它是做为 freedesktoporg 项目的一部分来开发的)进行报告的后台服务,以及一个允许用户管理网络连接的客户端程序

NetworkManager 优点

简化网络连接的工作,让桌面本身和其他应用程序能感知网络

NetworkManager 新版本的改进和新功能

  1. 新版本支持更多的的网络设备。从 0.8.1 开始增加了用于 GSM、UMTS 和 CDMA 卡等移动宽带设备ModemManager的支持。使用 ModemManager也有新的功能,比如信号强度显示和选择2G/3G模式的功能。还可以关掉漫游功能以避免产生额外的连接费用

  2. 0.8.1 后还支持使用蓝牙,不仅支持个人区域网络 (PAN) 上网,也支持老的蓝牙拨号网络 (DUN) 协议。所有(或者说最多)支持的设备可以在 wiki 上找到

  3. 支持 IPv6 的自动配置和静态 IP,新版本还会带来 IPv6 的 DHCP 支持

  4. 增强设备以及协议的支持,最新版有一个全新的漂亮的客户端界面

  5. 有自己的CLI工具:nmcli,使用 nmcli 用户可以查询网络连接的状态,也可以用来管理。优点:原始,语法相对简单,容易掌握

介绍完开始通过配置 NetworkManager 来实现随机 MAC 地址吧

  1. 要将随机的 MAC 地址默认地用于所有的 Wi-Fi 连接,需要创建 /etc/NetworkManager/conf.d/00-macrandomize.conf 这个文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [device]
    wifi.scan-rand-mac-address=yes

    [connection]
    wifi.cloned-mac-address=stable
    ethernet.cloned-mac-address=stable
    connection.stable-id=CONNECTION/CONNECTION/{BOOT}

    # 将 cloned-mac-address 的值设置为 stable 就可以在每次 NetworkManager 激活连接的时候都生成相同的 MAC 地址,但连接时使用不同的 MAC 地址。如果要在每次激活连接时也获得随机的 MAC 地址,需要将 cloned-mac-address 的值设置为 random

    # 设置为 stable 可以从 DHCP 获取相同的 IP 地址,也可以让 Wi-Fi 的 强制主页 (captive portal) 根据 MAC 地址记住你的登录状态。如果设置为 random ,在每次连接的时候都需要重新认证(或者点击“我同意”),在使用机场 Wi-Fi 的时候会需要到这种 random 模式
  2. 重启 NetworkManager

  3. 验证,使用 ip link 命令可以查看当前的 MAC 地址

那什么时候不能随机化 MAC 地址呢?

在某些情况下确实需要能被追踪到。例如在家用网络中,可能需要将路由器配置为对电脑分配一致的 IP 地址以进行端口转发;再例如公司的雇主可能需要根据 MAC 地址来提供 Wi-Fi 服务,这时候就需要进行追踪

使用 nmcli 查看 NetworkManager 连接并显示当前设置:

1
2
3
4
5
6
7
8
9
10
11
12
$ nmcli c | grep wifi
Amtrak_WiFi 5f4b9f75-9e41-47f8-8bac-25dae779cd87 wifi –
StaplesHotspot de57940c-32c2-468b-8f96-0a3b9a9b0a5e wifi –
MyHome e8c79829-1848-4563-8e44-466e14a3223d wifi wlp1s0

$ nmcli c show 5f4b9f75-9e41-47f8-8bac-25dae779cd87 | grep cloned
802-11-wireless.cloned-mac-address: –

$ nmcli c show e8c79829-1848-4563-8e44-466e14a3223d | grep cloned
802-11-wireless.cloned-mac-address: stable

# 上述例子在 Amtrak 使用完全随机 MAC 地址(使用默认配置)和 MyHome 的永久 MAC 地址(使用 stable 配置)。永久 MAC 地址是在硬件生产的时候分配到网络接口上的,网络管理员能够根据永久 MAC 地址来查看 设备的制造商 ID

更改配置并重新连接活动的接口:

1
2
3
4
5
6
7
8
9
$ nmcli c modify 5f4b9f75-9e41-47f8-8bac-25dae779cd87 802-11-wireless.cloned-mac-address random

$ nmcli c modify e8c79829-1848-4563-8e44-466e14a3223d 802-11-wireless.cloned-mac-address permanent

$ nmcli c down e8c79829-1848-4563-8e44-466e14a3223d

$ nmcli c up e8c79829-1848-4563-8e44-466e14a3223d

$ ip link

either I will find a way, or I will make one.