У меня есть набор мобильных устройств, которые настроены для отправки сообщений UDP на IP-адрес, установленный в их SRAM. У них нет возможности хранить URL-адрес или преобразовывать URL-адрес в IP-адрес. Трафик, идущий на IP-адрес назначения, на который отправляются устройства, должен проходить через маршрутизатор шлюза, находящийся под моим контролем. Маршрутизатор шлюза работает под управлением OpenWRT linux. Я хотел бы направить эти UDP-пакеты в Amazon Elastic Load Balancing (сервис AWS). Одним из ограничений эластичной балансировки нагрузки является то, что (насколько я смог определить) DNS должен использоваться для разрешения IP-адреса балансировщика нагрузки (поскольку в любое время AWS может использовать более одного балансировщика нагрузки, и выбор того, что использовать, устанавливается в DNS под управлением Amazons). Это долгая история.
Краткий рассказ: «Как я могу направить UDP-пакеты, маршрутизируемые через маршрутизатор OpenWRT, на адрес, разрешенный через DNS на этом маршрутизаторе?»
Я ищу решение через IP-цепочки / таблицы, правила брандмауэра и т.д. (или, по крайней мере, «плагины» с некоторой историей), а не сгенерированный пользователем код.
Заранее всем спасибо за помощь!
Я ищу решение через IP-цепочки / таблицы, правила брандмауэра и т.д. (или, по крайней мере, «плагины» с некоторой историей), а не сгенерированный пользователем код.
Этого не произойдет, извините. Брандмауэр и механизмы маршрутизации обычно разрешают DNS-запись в IP-адрес, когда политика активирована, и Linux не является исключением. Ядро не будет выполнять дополнительные поиски DNS для поиска изменений записи DNS.
Справочная страница для iptables
делает это довольно ясным, акцент мой:
Адрес может быть либо сетевым именем, либо именем хоста, либо сетевым IP-адресом (с / mask), либо обычным IP-адресом. Имена хостов будут разрешены только один раз, прежде чем правило будет отправлено ядру. Обратите внимание, что указывать любое имя, которое будет разрешено удаленным запросом, например DNS, - действительно плохая идея.
DNS традиционно не играет роли в таких стеках, потому что они стараются сделать операцию как можно более детерминированной. Игнорируя сложность, которую реализация этого кода добавила бы к общей картине, это также угроза безопасности, потому что вы по сути делегируете контроль над своей политикой безопасности тому, кто контролирует запись DNS. Даже если вы на 100% уверены, что доверяете оператору удаленного сервера, DNS на основе UDP по своей сути является поддельным протоколом (DNSSEC защищает от подделки восходящего потока, но не обеспечивает защиты между клиентом и рекурсором, также называемым «последней милей»), что делает это ужасным идея по всем направлениям. Если вы найдете продукт, который поддерживает это, вам, вероятно, не следует поддерживать их!
Вам необходимо удалить DNS из этого уравнения. Это неподходящий инструмент для работы на том уровне, на котором вы работаете.