dnsmasq: сопоставление 2 MAC-адресов с одним и тем же IP-адресом

17

Можно ли сопоставить 2 разных MAC-адреса одному и тому же IP-адресу?

Для резервного копирования мне нужно подключиться обратно с сервера к портативному устройству, и я хотел бы иметь один и тот же IP-адрес как для беспроводного, так и для проводного интерфейса.

Веб-интерфейс openwrt не принимает несколько записей DHCP с одним и тем же IP-адресом, но, возможно, есть обходной путь?

Пояснение добавлено 23 мая :

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

Извините за путаницу.

sleepyMonad
источник
Я уверен, что махинации начнутся, если вы попытаетесь это сделать.
Голокриптик
ОС на клиенте (и, возможно, на сервере) также может быть здесь
Germaine

Ответы:

29

(случайный полуобдуманный комментарий: такое высокое количество неконструктивных и простых неточных ответов и комментариев к вопросу редко можно увидеть)

В отличие от других здесь, я утверждаю, что ваш запрос на самом деле довольно элементарный и поддерживается в dnsmasq начиная с версии 2.46 , IIRC. Это была единственная причина, по которой я перешел с dd-wrt . После года работы OpenWRT я теперь знаю, что на самом деле есть еще много причин для перехода, но это не относится к делу.

Я использую Backfire 10.04-rc4 :

May 23 17:45:16 gateway dnsmasq[1925]: started, version 2.55 cachesize 150

Моя конфигурация:

$ cat /etc/config/dhcp

config 'dnsmasq'
    option 'domainneeded' '1'
    option 'boguspriv' '1'
    option 'localise_queries' '1'
    option 'rebind_protection' '1'
    option 'rebind_localhost' '1'
    option 'expandhosts' '1'
    option 'authoritative' '1'
    option 'readethers' '1'
    option 'leasefile' '/tmp/dhcp.leases'
    option 'resolvfile' '/tmp/resolv.conf.auto'
    option 'enable_tftp' '1'
    option 'domain' 'domain.net'
    option 'local' '/domain.net/'

config 'dhcp' 'lan'
    option 'interface' 'lan'
    option 'start' '100'
    option 'limit' '150'
    option 'leasetime' 'infinite'

config 'dhcp' 'wan'
    option 'interface' 'wan'
    option 'ignore' '1'
    option 'dynamicdhcp' '0'

config 'dhcp'
    option 'interface' 'dmz'
    option 'start' '100'
    option 'limit' '150'
    option 'leasetime' '12h'

config 'host'
    option 'name' 'travelmate'
    option 'mac' '00:11:22:33:44:55 aa:bb:cc:dd:ee:ff'
    option 'ip' '192.168.1.111'

config 'host'
    option 'name' 'mobilitymac'
    option 'mac' '99:88:77:66:55:44 ff:ee:dd:cc:bb:aa'
    option 'ip' '192.168.1.104'

Наслаждайтесь плавным переходом, который обеспечивает эта настройка, все существующие сеансы остаются живыми, если вы не слишком долго пользуетесь коммутатором.

lkraav
источник
4
Буду одобрять этот ответ, потому что он отвечает на мой вопрос очень подробно, но пока не имеет кармы.
sleepyMonad
И дополнительные пункты брауни, поскольку luci (веб-интерфейс), кажется, фактически поддерживает этот формат.
sleepyMonad
1
Прошлой ночью у меня случилась ситуация, когда я не знал, что wlan0 все еще подключен (при подключении eth0 подготовка brcm80211 может быть незначительной). У dnsmasq не было с этим особых проблем, он просто назначил новый IP для eth0. Плохо то, что вам нужно зайти в маршрутизатор, остановить dnsmasq и отредактировать / kill /tmp/dhcp.leases, перезапустить dnsmasq, чтобы вещи вернулись в нужный режим работы.
Икра
2
Чтобы понять, что я считаю важной частью этого, вы можете включить несколько MAC-адресов в одну запись (в этом файле или в интерфейсе luci). Таким образом, вместо того, чтобы делать строку с, ab:cd:ef:01:02:03а с другим 04:05:06:07:08:09, просто введите одну запись с одним пробелом, разделяющим два, например ab:cd:ef:01:02:03 04:05:06:07:08:09.
teeks99
6

Я провел небольшое исследование.

Первое, что я узнал, это то, что можно назначать аренду DHCP на основе критериев, отличных от MAC-адреса.

Из dhcp FAQ :

Что такое идентификатор клиента?

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

Затем, хотя он, очевидно, не поддерживается веб-интерфейсом luci в openWRT, сам dnsmasq поддерживает client_id и несколько MAC-адресов (с некоторыми предостережениями).

Со страницы руководства dnsmasq :

-G, --dhcp-host = [hwaddr] [, id: client_id | *] [, установить: тег] [, ipaddr] [, имя хоста] [, lease_time] [, игнорировать] Указать параметры каждого хоста для сервера DHCP , Это позволяет машине с определенным аппаратным адресом всегда назначать одно и то же имя хоста, IP-адрес и время аренды. Указанное здесь имя хоста переопределяет любое имя, предоставленное клиентом DHCP на компьютере. Также допустимо пропускать аппаратный адрес и включать имя хоста, и в этом случае IP-адрес и время аренды будут применяться к любой машине, претендующей на это имя. Например, --dhcp-host = 00: 20: e0: 3b: 13: af, wap, infinite сообщает dnsmasq дать компьютеру с аппаратным адресом 00: 20: e0: 3b: 13: af имя wap и бесконечный Аренда DHCP. --dhcp-host = lap, 192.168.0.199 указывает dnsmasq всегда выделять машине круг IP-адрес 192.168.0.199.

(...)

Разрешается использовать идентификаторы клиентов, а не аппаратные адреса, чтобы идентифицировать хосты, используя префикс «id:». Таким образом: --dhcp-host = id: 01: 02: 03: 04, ..... ссылается на хост с идентификатором клиента 01: 02: 03: 04. Также можно указывать идентификатор клиента в виде текста, например: --dhcp-host = id: clientidastext, .....

(...)

В качестве особого случая можно включить более одного аппаратного адреса. Например: --dhcp-host = 11: 22: 33: 44: 55: 66,12: 34: 56: 78: 90: 12 192.168.0.2. Это позволяет IP-адресу связываться с несколькими аппаратными адресами и дает разрешение dnsmasq. отказаться от аренды DHCP на один из аппаратных адресов, когда другой запрашивает аренду. Помните, что это опасная вещь, она будет надежно работать только в том случае, если в любой момент активен только один из аппаратных адресов, и dnsmasq не сможет применить это. Например, полезно выделить стабильный IP-адрес для ноутбука, который имеет как проводной, так и беспроводной интерфейсы.

Я выбрал решение для Multi-Mac (потому что я не пытался выяснить, как я могу указать идентификатор клиента на стороне клиента, что необходимо сделать для каждого отдельного клиента, и альтернатива для Multi-Mac одно решение для всех портативных компьютеров в доме.)

Я обошел интерфейс luci и добавил в /etc/dnsmasq.conf следующую строку:

DHCP-hostsfile = / и т.д. / Dnsmasq-dhcphosts.conf

и /etc/dnsmasq-dhcphosts.conf содержит строки следующего формата:

mac1, mac2, ф

(Я храню этот конфиг в отдельном файле, чтобы предотвратить его перезапись при следующем обновлении.)

Работает отлично.

sleepyMonad
источник
1

Ваша цель: чтобы постоянное имя хоста ноутбука всегда указывало на (активный IP-адрес / интерфейс) ноутбука? Я бы подумал, что объединенная служба DNS-и-DHCP в dnsmasq сделает это, то есть когда клиент выполняет DHCPDISCOVER / DHCPREQUEST, он сообщает свое имя хоста, а dnsmasq связывает имя хоста с любым назначенным IP-адресом. Это был мой опыт, однако я должен признать, что я не пытался соединиться с одной сетью i / f, затем отключить (не делая явного выпуска) и соединиться снова с другой.

Предполагая имя хоста «ноутбук», что происходит, когда вы запрашиваете у устройства OpenWRT «ноутбук» после переключения с одного интерфейса на другой?

Norky
источник
1

Зачем использовать DHCP?

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

Massimo
источник
Ну, потому что это самый простой метод, тот, который подходит для всех сетей, к которым я подключаюсь (или, как я надеялся, по крайней мере).
sleepyMonad
0

Я был бы очень удивлен, если ваш коммутатор может поддержать это. Возможно, вам больше повезет, если оба сетевых интерфейса будут иметь одинаковый MAC-адрес.

Сказав это, я определенно согласен с Голокриптом, будь здесь драконы.

happyhairydude
источник
спасибо за предложение использовать тот же MAC; хотя я не уверен, как это сделать. Возможно, это то, что я могу настроить из BIOS ...
sleepyMonad
Обычно проще всего установить его в ОС, в Windows это в свойствах сетевого интерфейса (установить MAC-адрес вручную).
happyhairydude
0

Нет, это невозможно. Но большинство сетевых адаптеров позволяют вам административно устанавливать MAC, и вы можете установить оба сетевых адаптера на один и тот же MAC.

На большинстве * nix boxen вы обычно можете сделать это, а затем настроить отказоустойчивый интерфейс LAGG для обоих (с предпочтением для проводного), чтобы разрешить горячее подключение проводного соединения без отключения сеансов TCP.

Крис С
источник