MAC address spoofing (Русский) - ArchWiki

# MAC address spoofing (Русский)

В этой статье описываются несколько способов подмены адреса Media Access Control (MAC).

## Вручную

Существует два способа подмены MAC-адреса: используя iproute2 (установленный по умолчанию), и с помощью macchanger (доступный в официальных репозиториях). Оба способа изложены ниже.

### Способ 1: iproute2

Сперва проверьте ваш текущий MAC-адрес при помощи команды:

    # ip link show интерфейс

где `интерфейс` — имя вашего сетевого интерфейса.

Необходимая нам в данный момент информация расположена в строке, начинающейся со слов "link/ether", за которыми следует 6-битный номер. Скорее всего, у вас это будет выглядеть примерно так:

    link/ether 00:1d:98:5a:d1:3a

Первый шаг для подмены MAC-адреса — отключить интерфейс. Это можно сделать, выполнив команду:

    # ip link set dev интерфейс down

Теперь мы переходим собственно к подмене нашего MAC-адреса. Подойдет любое шестнадцатеричное число, однако, некоторые сети могут отказывать в присвоении IP-адресов клиентам, чьи MAC-адреса не соответствуют тем, что устанавливают поставщики. Поэтому, если вы не контролируете сеть(и), к которой вы подключаетесь, желательно использовать реальный префикс MAC (первые три байта), а для для оставшихся трех использовать случайное значение.

Чтобы сменить MAC, необходимо выполнить команду:

    # ip link set dev интерфейс address XX:XX:XX:XX:XX:XX

где вместо `XX:XX:XX:XX:XX:XX` необходимо указать любое 6-битное значение.

Последний шаг — включить интерфейс обратно. Это можно сделать, выполнив команду:

    # ip link set dev интерфейс up

Если вы хотите проверить, произошла ли подмена MAC-адреса, просто еще раз запустите `ip link show интерфейс` и проверьте значение "link/ether". Если подмена сработала, "link/ether" будет иметь то значение, которое вы ему присвоили.

### Способ 2: macchanger

В этом способе используется пакет macchanger (GNU MAC Changer). Он предоставляет множество функций, таких как смена адреса для соответствия конкретному поставщику и присвоение полностью случайного адреса.

Установите пакет macchanger из официальных репозиториев.

Подмена осуществляется для конкретного интерфейса: в каждой из следующих команд заменяйте `интерфейс` на имя вашего сетевого интерфейса.

Вы можете сгенерировать полностью случайный адрес:

    # macchanger -r интерфейс

А чтобы изменить только байты, которые являются уникальными для конкретного устройства (благодаря чему при проверке MAC-адрес будет по-прежнему считаться принадлежащим тому же производителю), необходимо выполнить:

    # macchanger -e интерфейс

Для установки конкретного MAC-адреса выполните:

    # macchanger --mac=XX:XX:XX:XX:XX:XX интерфейс

где `XX:XX:XX:XX:XX:XX` — MAC, который вы хотите присвоить.

Наконец, для восстановления исходного значения MAC-адреса:

    # macchanger -p интерфейс

Обратите внимание: Пока будет происходить смена МАС-адреса, вы не сможете использовать устройство вне зависимости от способа подключения и того, включен ли сетевой интерфейс.

## Автоматически

### Способ 1: systemd-networkd

systemd-networkd поддерживает подмену MAC-адреса при помощи link-файлов (для получения дополнительной информации смотрите `man systemd.link`):

    /etc/systemd/network/00-default.link

    [Match]
    MACAddress=постоянный MAC

    [Link]
    MACAddress=новый MAC
    NamePolicy=kernel database onboard slot path

### Способ 2: systemd-udevd

Udev позволяет подменять MAC-адреса в файлах правил. Атрибут `address` дает возможность udev находить правильное устройство по MAС-адресу производителя, а затем выполняется команда для смены адреса:

    /etc/udev/rules.d/75-mac-spoof.rules

    ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="02:03:09:xx:xx:xx", RUN+="/usr/bin/ip link set dev %k address c8:0a:a9:xx:xx:xx"

где `XX:XX:XX:XX:XX:XX` — оригинальный MAC-адрес, `YY:YY:YY:YY:YY:YY` — новый.

### Способ 3: юнит systemd

#### Создание юнита

Ниже вы найдете пару примеров юнитов systemd для изменения MAC-адреса при загрузе системы: первый устанавливает указанный MAC, используя утилиту ip, а второй использует macchanger для присвоения случайного адреса. Зависимость `network-pre.target` используется для того, чтобы смена MAC происходила перед тем, как запустятся сетевые программы вроде Netctl, NetworkManager, systemd-networkd или dhcpcd.

##### iproute2

Юнит systemd, устанавливающий указанный MAC-адрес:

    /etc/systemd/system/macspoof@.service

    [Unit]
    Description=MAC Address Change %I
    Wants=network-pre.target
    Before=network-pre.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/ip link set dev %i address 36:aa:88:c8:75:3a
    ExecStart=/usr/bin/ip link set dev %i up

    [Install]
    WantedBy=multi-user.target

##### macchanger

Юнит systemd, устанавливающий случайный адрес (префикс производителя остается тем же). Удостоверьтесь, что у вас установлен пакет macchanger):

    /etc/systemd/system/macspoof@.service

    [Unit]
    Description=macchanger on %I
    Wants=network-pre.target
    Before=network-pre.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device

    [Service]
    ExecStart=/usr/bin/macchanger -e %I
    Type=oneshot

    [Install]
    WantedBy=multi-user.target

Если вы хотите, чтобы адрес измнялся целиком, включая префикс производителя (первые три байта), используйте опцию `-r` вместо `-e` (смотрите также #Способ 2: macchanger).

#### Включение службы

Включите службу, добавив требуемое имя интерфейса (например, `eth0`) к:

    # systemctl enable macspoof@eth0.service

Перезагрузитесь либо перезапустите необходимые службы в правильном порядке.

## Решение проблем

### Не удается подключиться к сети DHCPv4

Если вы не можете подключиться к сети DHCPv4 и используете dhcpcd, который по умолчанию используется NetworkManager, необходимо изменить настройки dhcpcd, чтобы арендовать адрес.

## Смотрите также

- Страница Macchanger на GitHub
- Статья на debianadmin.com с большим количеством опций для macchanger

Categories:

- Networking (Русский)
- Security (Русский)
- Русский