Перейти к содержанию

DHCP. Классификация клиентов и индивидуальные возможности.

Материал из OpenWrt Wiki

Можно ли настроить DHCP в OpenWrt так, чтобы он динамически назначал IP-адрес шлюза в зависимости от MAC-адреса?


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

Вот моя ситуация (и почему мне это нужно):

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

Думал, что будет просто настроить мой шлюзовой роутер OpenWrt как OpenVPN-клиент, а дальше уже разбираться. Все прошло хорошо, за исключением того, что мой шлюзовой роутер оказался слишком старым и слабым, чтобы справиться с трафиком и шифрованием. Скачки до 90% загрузки процессора при наличии трафика, и скорость была слишком низкой, чтобы быть пригодной для использования.

ОК, подумал я, у меня есть другой роутер в моей локальной сети, который используется для объединения двух подсетей, и я решил, что этот роутер можно использовать вместо шлюзового роутера, чтобы стать OpenVPN-клиентом в дополнение к тому, что он уже делает. Бинго. Проблема (почти) решена.

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

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

Используйте tagклассификатор для создания помеченной группы.

Назначьте отдельные параметры DHCP хостам, помеченным tag1. Укажите пользовательский DNS и, возможно, другие параметры DHCP .

uci set dhcp.tag1="tag"
uci set dhcp.tag1.dhcp_option="6,8.8.8.8,8.8.4.4"
uci add dhcp host
uci set dhcp.@host[-1].name="j400"
uci set dhcp.@host[-1].mac="00:21:63:75:aa:17"
uci set dhcp.@host[-1].ip="10.11.12.14"
uci set dhcp.@host[-1].tag="tag1"
uci add dhcp host
uci set dhcp.@host[-1].name="j500"
uci set dhcp.@host[-1].mac="01:22:64:76:bb:18"
uci set dhcp.@host[-1].ip="10.11.12.15"
uci set dhcp.@host[-1].tag="tag1"
uci commit dhcp
service dnsmasq restart

Используйте macклассификатор для создания помеченной группы. Назначьте различные параметры DHCP хостам с соответствующими MAC-адресами. Отключите шлюз по умолчанию и укажите пользовательский DNS .

uci set dhcp.mac1="mac"
uci set dhcp.mac1.mac="00:FF:*:*:*:*"
uci set dhcp.mac1.networkid="vpn"
uci add_list dhcp.mac1.dhcp_option="3"
uci add_list dhcp.mac1.dhcp_option="6,192.168.1.3"
uci commit dhcp
service dnsmasq restart
  • dhcp-option=3,192.168.1.1: Опция 3 в DHCP используется для указания шлюза по умолчанию для клиента. Когда клиент получает IP-адрес от этого DHCP-сервера, ему также сообщат, что 192.168.1.1 — его шлюз по умолчанию.
  • dhcp-option=6,192.168.1.1: Опция 6 в DHCP используется для указания DNS-сервера(ов) для клиента. В этом случае клиент будет проинформирован о том, что 192.168.1.1 является его DNS-сервером.

пример установки шлюза и DNS: "3,192.168.1.1 6,192.168.1.1"

Классификация клиентов и назначение индивидуальных опций

DHCP может предоставить клиенту множество параметров, таких как доменное имя, серверы NTP , параметры сетевой загрузки и т. д. В то время как некоторые параметры применимы ко всем хостам в сегменте сети, другие более специфичны и относятся только к группе хостов или даже только к одному хосту. dnsmasq предлагает группировать параметры DHCP и их значения по tag, имеющему внутреннее имя networkid, которое является буквенно-цифровым идентификатором, и отправлять параметры только тем хостам, которые были помечены этим networkid.

В OpenWrt вы можете помечать хосты по диапазону DHCP , в котором они находятся (раздел dhcp), или по ряду опций, которые клиент может отправить со своим запросом DHCP . В каждом из этих разделов вы можете использовать dhcp_optionсписок для добавления опций DHCP , которые будут отправлены хостам с этим тегом (или networkid).

Вы можете использовать следующие классификационные разделы:

Имя Описание
mac Аппаратный адрес клиента.
tag Буквенно-цифровая метка, обозначающая сеть.
vendorclass Строка, отправленная клиентом, представляющая поставщика клиента. dnsmasq выполняет сопоставление подстроки в строке класса поставщика, используя это значение.
userclass Строка, отправленная клиентом, представляющая пользователя клиента. dnsmasq выполняет сопоставление подстроки со строкой класса пользователя, используя это значение.
circuitid Соответствует идентификатору цепи, отправленному агентом ретрансляции, как определено в RFC3046.
remoteid Соответствует удаленному идентификатору, отправленному агентом ретрансляции, как определено в RFC3046.
subscrid Соответствует идентификатору абонента, отправленному агентом ретрансляции, как определено в RFC3993.

Каждый классифицирующий раздел (кроме tag) имеет одну опцию конфигурации: какой тег ему будет присвоен.

Например, macраздел с macзаписью, которая точно соответствует вашему MAC-адресу Ethernet, и тегом (он же networkid) greenбудет помечен green.

Имя Тип Необходимый По умолчанию Описание
<classifier> нить да (никто) Используйте тип раздела в качестве имени параметра, а классифицирующий фильтр — в качестве значения параметра.
networkid нить да (никто) Тег, который будет присвоен соответствующим клиентам.
force бул нет ЛОЖЬ Отправлять ли дополнительные опции из dhcp_optionсписка клиентам, которые их не запрашивали.

tagРазделы классификации имеют одну опцию конфигурации: значения опций DHCP для назначения этому тегу.

Например, продолжая предыдущий пример, greenпомеченные DHCP- клиенты могут быть выборочно принудительно получены, dhcp_optionесли есть tagзапись со tagзначением green, где также указан список dhcp_optionи forceустановлен .

Имя Тип Необходимый По умолчанию Описание
<classifier> нить да (никто) Используйте тип раздела в качестве имени параметра, а классифицирующий фильтр — в качестве значения параметра.
dhcp_option список строк нет (никто) Для этого тега, также известного как networkid, необходимо добавить дополнительные параметры.
force бул нет ЛОЖЬ Отправлять ли дополнительные опции из dhcp_optionсписка клиентам, которые их не запрашивали.