На точке доступа w-fi и нескольких промежуточных свитчах пробросил 7 vlan до сервера dhcp. MAC адрес клиента виден в 7 vlan на нужных портах. Но почему-то в логах сервера видно, что запросы на получения адреса приходят сразу на два интерфейса: на eth0 и на vlan7.
Код:
Dec 2 11:38:33 dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 2 11:38:33 dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via eth0
Dec 2 11:38:33 dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 2 11:38:33 dhcpd: DHCPOFFER on 192.168.0.248 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via eth0
Из-за чего такая штука понять не могу. Снял дамп трафика с обеих интерфейсов. Там вроде бы всё верно: на интерфейсе eth0 пакеты с меткой 802.1q, на интерфейсе vlan7 пакет такой же и метки нет.
что запросы на получения адреса приходят сразу на два интерфейса: на eth0 и на vlan7.
откуда клиент знает, какой ему дадут адрес? Вот и просит 255.255.255.255
Настраивайте клиенты, других путей нет. Делить на ноль нельзя, пока не попросите адрес, вам его не дадут. Единственный вариант, просить не "просто IP", а IP из диапазона 192.168.1/24.
Вот если-бы у вас была отдельная сетевая eth1, то тогда можн было-бы заставить dhcpd слушать только её(но IP всё равно любой просился-бы. Просто eth0 об этом не узнала-бы)
что запросы на получения адреса приходят сразу на два интерфейса: на eth0 и на vlan7.
откуда клиент знает, какой ему дадут адрес? Вот и просит 255.255.255.255
Настраивайте клиенты, других путей нет. Делить на ноль нельзя, пока не попросите адрес, вам его не дадут. Единственный вариант, просить не "просто IP", а IP из диапазона 192.168.1/24.
Вот если-бы у вас была отдельная сетевая eth1, то тогда можн было-бы заставить dhcpd слушать только её(но IP всё равно любой просился-бы. Просто eth0 об этом не узнала-бы)
Согласен, клиент не знает какой ему дадут адрес. Но я подталкиваю к этому оборудование, загнав толпу клиентов в один VLAN и сказав DHCP серверу, что клиентам из этого VLAN выдавать адреса только из данного диапазона. Как в принципе заставить клиента предполагать из какой подсети брать адрес? Помнится мне, что единственное что может клиент так это запросить последний адрес, который ему выдавали. Вдруг он свободен.
Чем отдельная сетевая карта eth1 отличается от vlan7?
Весь трафик от wi-fi клиента, в том числе и dhcp запросы на получение адреса, тегируется и передаётся в сеть. Пакет приходящий без тега должен обрабатываться eth0, а с тегированного снимается метка и он должен попасть на интерфейс vlan7. dhcpd должен отдать адрес или из одной подсети или из другой
Чем отдельная сетевая карта eth1 отличается от vlan7?
тем, что физически eth1 изолированна от eth0. А вот vlan у вас, как я понял, является фактически псевдонимом eth0. Вот тут я могу ошибаться конечно. Может как-то можно сделать...
Вы можете настройки сети подробно описать? DHCPD не должен хватать нетегированный трафик, т.к. до него он тупо не должен дойти. Тег снимается несколько раньше, чем пакет прилетает на светящийся наружу udp-порт.
Схема сети такова: клиенты включены в порты, на которых прописаны PVID (или подключаются по wi-fi в сеть, трафик которой тегируется). Через транковые аплинки трафик доходит до dhcp сервера, он слушает трафик на нескольких интерфейсах и он уже исходя из интерфейса (и как я понимаю номера VLAN) выдаёт клиентам адрес из той или иной подсети.
У меня получалось создать подобную схему, но только с одним коммутатором, компьютером подключенным физически в него и подсетью внутри 192.168.0.0/24. На одном порту прописал 7 PVID. Конфиг сервера DHCP был аналогичен тому, что представлен выше. И клиент получал адрес из нужной подсети.
Почитал в интернете о настройки dhcpd и реализации vlan - там все используют возможность коммутатора DHCP Relay. Но у меня не все коммутаторы поддерживают данный сервис.
Вы можете настройки сети подробно описать? DHCPD не должен хватать нетегированный трафик, т.к. до него он тупо не должен дойти. Тег снимается несколько раньше, чем пакет прилетает на светящийся наружу udp-порт.
Несколько встречных вопросов и комментариев:
1. Что-та я не помню параметра interface в man dhcpd.conf.
2. Зачем используете shared-network ? Чем не устраивает просто subnet ... netmask ...
3. не включен ли у вас форвардинг пакетов между интерфейсами? (хотя я не уверен, что это может играть роль)
4. сейчас, еще подумаю и пришлю вопросы )
4. DHCP Relay стоит использовать только если подсети разделяет роутер ( в случае с коммутаторами все должно работать).
5. По идее, vlan должен ограничивать DHCPDISCOVER запросы, поэтому я склоняюсь к тому, что, либо а) бродкаст каким-то чудным образом расходится на оба интерфейса уже в Linux. покажите cat /proc/sys/net/ipv4/ip_forward и на всякий случай таблицу маршрутизации ubuntu и настройки сетевых интерфейсов ip a sh, ip ro sh. б) где-то на границе свича идет перемешивание трафика. С учетом следующего пункта, можно от этого избавиться.
6. Еще, мне не совсем понятно, как Linux в вашем случае одним интерфейсом смотрит и в тегированную сеть и не в тегированную... ИМХО, это не совсем правильно чтоли... В вашем случае я бы рекомендовал создать 2 VLAN, для различных клиентов, чтобы на сетевую карту приходил только трафик с определенным тегом. Это гарантированно разделит broadcast домены в свичах.
7...
Несколько встречных вопросов и комментариев:
1. Что-та я не помню параметра interface в man dhcpd.conf.
2. Зачем используете shared-network ? Чем не устраивает просто subnet ... netmask ...
3. не включен ли у вас форвардинг пакетов между интерфейсами? (хотя я не уверен, что это может играть роль)
4. сейчас, еще подумаю и пришлю вопросы )
1. Я и сам нашёл его не в мане а в каком-то примере.... к сожалению даже не вспомню где. В мане его и правда нет. Упоминания о интерфейсах есть в /etc/default/isc-dhcp-server. Там можно установить какие интерфейсы должен слушать демон. У меня прописаны оба.
2. По-моему именно из-за того что interface был применим к shared-network
3.
~$ cat /proc/sys/net/ipv4/ip_forward
1
4. DHCP Relay стоит использовать только если подсети разделяет роутер ( в случае с коммутаторами все должно работать).
5. По идее, vlan должен ограничивать DHCPDISCOVER запросы, поэтому я склоняюсь к тому, что, либо а) бродкаст каким-то чудным образом расходится на оба интерфейса уже в Linux. покажите cat /proc/sys/net/ipv4/ip_forward и на всякий случай таблицу маршрутизации ubuntu и настройки сетевых интерфейсов ip a sh, ip ro sh. б) где-то на границе свича идет перемешивание трафика. С учетом следующего пункта, можно от этого избавиться.
6. Еще, мне не совсем понятно, как Linux в вашем случае одним интерфейсом смотрит и в тегированную сеть и не в тегированную... ИМХО, это не совсем правильно чтоли... В вашем случае я бы рекомендовал создать 2 VLAN, для различных клиентов, чтобы на сетевую карту приходил только трафик с определенным тегом. Это гарантированно разделит broadcast домены в свичах.
7...
5. Согласен. В теории именно так.
5-а. Мне тоже так какжется но пока не могу понять почему. На выходных попробую исключить wi-fi и сделать тегирование трафика с порта.
~$ cat /proc/sys/net/ipv4/ip_forward
1
таблица маршрутизации громоздка и скучна.
5-b т.к. от wi-fi точки до сервера dhcp есть два коммутатора, и на каждом из них mac адрес беспроводного устройства светится в нужном vlan-e мне кажется косяк (или наше непонимание) кроется в linux
6. Такое бывает и не только в Linux (в терминах CISCO: access, trunk, hybrid). Просто он на eth0 принимает и не тегированный трафик а на vlan7 тегированный. Много v-lan в моём случае не совсем уместно т.к. именно этот компьютер будет обрабатывать межсетевые информационые потоки (будет маршрутизировать трафик между vlan). Мне нужно при помощи vlan скрыть от посторонних глаз клиентов подсети и выпустить их в интернет.
Попробую поставить тестовый стенд и на нём развернуть физический интерфейс только с тегированным трафиком.
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.10
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.0.10
auto vlan7
iface vlan7 inet static
address 192.168.1.1
netmask 255.255.255.128
network 192.168.1.0
broadcast 192.168.1.127
vlan_raw_device eth2
hwaddress ether 00:20:55:8b:b9:40
auto vlan8
iface vlan8 inet static
address 192.168.1.129
netmask 255.255.255.128
network 192.168.1.128
broadcast 192.168.1.255
vlan_raw_device eth2
hwaddress ether 00:20:55:8b:b9:41
dhcp сервер слушает только порты vlan7 vlan8. На порт сервера приходит тотлько тегированный трафик. Если поставить в настройках порта ноутбука 7-й vlan он получает нужный адрес
Код:
Dec 10 09:23:04 testSrv dhcpd: DHCPDISCOVER from 00:00:39:21:35:a4 via vlan7
Dec 10 09:23:05 testSrv dhcpd: DHCPOFFER on 192.168.1.5 to 00:00:39:21:35:a4 (microsof-6df05e) via vlan7
Dec 10 09:23:05 testSrv dhcpd: DHCPOFFER on 192.168.1.3 to 00:00:39:21:35:a4 (microsof-6df05e) via vlan7
Dec 10 09:23:05 testSrv dhcpd: DHCPREQUEST for 192.168.1.5 (192.168.1.1) from 00:00:39:21:35:a4 (microsof-6df05e) via vlan7
Dec 10 09:23:05 testSrv dhcpd: DHCPACK on 192.168.1.5 to 00:00:39:21:35:a4 (microsof-6df05e) via vlan7
меняем настройки порта на vlan7 - снова получаем правильный адрес:
Код:
Dec 10 09:27:22 testSrv dhcpd: DHCPDISCOVER from 00:00:39:21:35:a4 via vlan8
Dec 10 09:27:23 testSrv dhcpd: DHCPOFFER on 192.168.1.131 to 00:00:39:21:35:a4 (microsof-6df05e) via vlan8
Dec 10 09:27:23 testSrv dhcpd: DHCPOFFER on 192.168.1.131 to 00:00:39:21:35:a4 (microsof-6df05e) via vlan8
Dec 10 09:27:23 testSrv dhcpd: DHCPREQUEST for 192.168.1.131 (192.168.1.129) from 00:00:39:21:35:a4 (microsof-6df05e) via vlan8
Dec 10 09:27:23 testSrv dhcpd: DHCPACK on 192.168.1.131 to 00:00:39:21:35:a4 (microsof-6df05e) via vlan8
Но если изменть схему включения на:
isc-dhcp сервер под ubuntu server ---- свитч DGS-3120-24TC ---- wi-fi AP DAP-2690 ------ планшет
На точке доступа настроить тегирование пакетов wi-fi из определённой сети. На dhcp сервер приходят только такие запросы и ответы:
Код:
Dec 10 09:25:27 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:27 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPOFFER on 192.168.1.4 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:38 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:38 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Понятно что проблемы с настройкой либо точки либо свитча. С dhcpd вроде разобрался.
Почему бы не настроить порт свича как НЕтранковый (в Д-Линк это называется вроде Port-based VLANs). Чтобы тегирование трафика происходило на потру коммутатора. Точку доступа воткнуть в этот порт.
Это упростит конфигурирование точки доступа.
Если, конечно, на точке доступа не планируется запустить несколько сетей в разные vlan. Хотя, я соменваюсь, что AP DAP-2690 такое умеет.
Но если изменть схему включения на:
isc-dhcp сервер под ubuntu server ---- свитч DGS-3120-24TC ---- wi-fi AP DAP-2690 ------ планшет
На точке доступа настроить тегирование пакетов wi-fi из определённой сети. На dhcp сервер приходят только такие запросы и ответы:
Код:
Dec 10 09:25:27 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:27 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPOFFER on 192.168.1.4 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:38 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:38 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Понятно что проблемы с настройкой либо точки либо свитча. С dhcpd вроде разобрался.
Кстати, в этом логе я вижу, что трафик не перемешивается между vlan и неvlan. При этом, по какой-то причине, android-8985a6491b6b43e0 не получает ответ DHCPOFFER. Какие настройки на точке доступа?
Почему бы не настроить порт свича как НЕтранковый. Чтобы тегирование трафика происходило на потру коммутатора. Точку доступа воткнуть в этот порт.
Если, конечно, на точке доступа не планируется запустить несколько сетей в разные vlan. Хотя, я соменваюсь, что AP DAP-2690 такое умеет.
В том то и дело, что точка умеет это делать. Я хочу клиентов гостевой сети пускать только в интернет и не пускать к локальным ресурсам. Гостей запихиваю в отдельную сеть и отдельный vlan.
Но если изменть схему включения на:
isc-dhcp сервер под ubuntu server ---- свитч DGS-3120-24TC ---- wi-fi AP DAP-2690 ------ планшет
На точке доступа настроить тегирование пакетов wi-fi из определённой сети. На dhcp сервер приходят только такие запросы и ответы:
Код:
Dec 10 09:25:27 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:27 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPOFFER on 192.168.1.4 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:30 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:38 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 09:25:38 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Понятно что проблемы с настройкой либо точки либо свитча. С dhcpd вроде разобрался.
Кстати, в этом логе я вижу, что трафик не перемешивается между vlan и неvlan. При этом, по какой-то причине, android-8985a6491b6b43e0 не получает ответ DHCPOFFER. Какие настройки на точке доступа?
Тут нет трафика не в vlan - это тестовый стенд. Там только тегированные порты и только тегированный трафик. Почему не получает я не знаю. Воткнул точку напрямую там такая же беда. Сейчас ставлю на точку бета-версию прошивки. Последнюю.
На точке была добавлена ещё одна сеть и настроено тегирование трафика из wi-fi сети. Всё остальное не трогал ради чистоты эксперимента.
Бета версия прошивки помогла. Теперь клиенты из разных сетей получают правильные адреса.
Spoiler
Код:
Dec 10 10:38:33 testSrv dhcpd: DHCPREQUEST for 192.168.1.130 (192.168.1.129) from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:38:33 testSrv dhcpd: DHCPACK on 192.168.1.130 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:43:21 testSrv dhcpd: DHCPREQUEST for 192.168.1.130 from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:43:21 testSrv dhcpd: DHCPACK on 192.168.1.130 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:43:21 testSrv dhcpd: DHCPREQUEST for 192.168.1.130 from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:43:21 testSrv dhcpd: DHCPACK on 192.168.1.130 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:48:10 testSrv dhcpd: DHCPREQUEST for 192.168.1.130 from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:48:10 testSrv dhcpd: DHCPACK on 192.168.1.130 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:48:10 testSrv dhcpd: DHCPREQUEST for 192.168.1.130 from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:48:10 testSrv dhcpd: DHCPACK on 192.168.1.130 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:59:44 testSrv dhcpd: DHCPREQUEST for 192.168.1.130 from 30:85:a9:d7:86:79 via vlan8
Dec 10 10:59:44 testSrv dhcpd: DHCPACK on 192.168.1.130 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:59:44 testSrv dhcpd: DHCPREQUEST for 192.168.1.130 from 30:85:a9:d7:86:79 via vlan8
Dec 10 10:59:44 testSrv dhcpd: DHCPACK on 192.168.1.130 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan8
Dec 10 10:59:56 testSrv dhcpd: DHCPREQUEST for 192.168.1.130 from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7: wrong network.
Dec 10 10:59:56 testSrv dhcpd: DHCPNAK on 192.168.1.130 to 30:85:a9:d7:86:79 via vlan7
Dec 10 10:59:56 testSrv dhcpd: DHCPREQUEST for 192.168.1.130 from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7: wrong network.
Dec 10 10:59:56 testSrv dhcpd: DHCPNAK on 192.168.1.130 to 30:85:a9:d7:86:79 via vlan7
Dec 10 10:59:57 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 10:59:57 testSrv dhcpd: DHCPDISCOVER from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 10:59:58 testSrv dhcpd: DHCPOFFER on 192.168.1.4 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 10:59:58 testSrv dhcpd: DHCPOFFER on 192.168.1.2 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 10:59:58 testSrv dhcpd: uid lease 192.168.1.2 for client 30:85:a9:d7:86:79 is duplicate on 192.168.1.0/25
Dec 10 10:59:58 testSrv dhcpd: DHCPREQUEST for 192.168.1.4 (192.168.1.1) from 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 10:59:58 testSrv dhcpd: DHCPACK on 192.168.1.4 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7
Dec 10 10:59:58 testSrv dhcpd: DHCPREQUEST for 192.168.1.4 (192.168.1.1) from 30:85:a9:d7:86:79 via vlan7
Dec 10 10:59:58 testSrv dhcpd: DHCPACK on 192.168.1.4 to 30:85:a9:d7:86:79 (android-8985a6491b6b43e0) via vlan7