Est-il possible (comment?) D'acheminer les paquets UDP entrants avec une cible IP vers une adresse IP de destination qui est résolue via une requête DNS pour une URL statique?

J'ai un ensemble de périphériques mobiles configurés pour envoyer des messages UDP à une adresse IP définie dans leur SRAM. Ils n'ont pas la capacité de stocker une URL ou de résoudre une URL vers une adresse IP. Le trafic vers l'IP de destination auquel les appareils envoient doit passer par un routeur de passerelle sous contrôle. Le routeur de la passerelle exécute OpenWRT linux. J'aimerais acheminer ces paquets UDP vers Amazon Elastic Load Balancing (un service AWS). Une contrainte de Elastic Load Balancing est que (dans la mesure où j'ai pu déterminer) DNS doit être utilisé pour résoudre l'IP de l'équilibreur de charge (car à tout moment il peut y avoir plus d'un loadbalancer utilisé par AWS et Le choix de l'utilisation est défini sur le contrôle DNS sous Amazonas). C'est la longue histoire.

La brève histoire est «Comment puis-je diriger les paquets UDP routés via un routeur OpenWRT vers une adresse résolue via DNS à ce routeur?

Je recherche une solution à travers les chaînes / tables IP, les règles du pare-feu, etc. (ou au moins des «plugins» avec de l'histoire) plutôt que du code généré personnalisé.

Merci tout d'avance pour votre aide!

Je recherche une solution à travers les chaînes / tables IP, les règles du pare-feu, etc. (ou au moins des «plugins» avec de l'histoire) plutôt que du code généré personnalisé.

Ne va pas arriver, désolé. Les moteurs de pare-feu et de routage résolvent généralement l'enregistrement DNS à une adresse IP lorsque la politique est activée, et Linux ne fait pas exception à cela. Le noyau n'effectuera pas de recherche DNS supplémentaire pour rechercher l'enregistrement DNS.

La page de manuel pour iptables rend ce point assez clair, l'accent est mis:

L'adresse peut être un nom de réseau, un nom d'hôte, une adresse IP réseau (avec / masque) ou une adresse IP simple. Les noms d'hôte seront résolus une seule fois, avant que la règle ne soit soumise au noyau. Veuillez noter que la spécification de tout nom à résoudre avec une requête distante, comme DNS, est une très mauvaise idée.

Le DNS traditionnellement n'a pas de rôle dans ces types de piles parce qu'ils essaient de maintenir l'opération aussi déterministe que possible. En ignorant la complexité que mettrait en œuvre ce code ajouterait à l'image globale, c'est aussi un risque de sécurité car vous délisez essentiellement le contrôle de votre politique de sécurité à quiconque contrôle l'enregistrement DNS. Même si vous êtes à 100% sûr que vous faites confiance à l'opérateur du serveur distant, le DNS basé sur UDP est intrinsèquement un protocole falsifié (DNSSEC protège contre la falsification en amont, mais n'offre aucune protection entre le client et le récapitulateur alias "le dernier kilomètre"), rendant cela terrible Idée à travers le tableau. Si vous trouvez un produit qui prend en charge cela, vous ne devriez probablement pas les supporter!

Vous devez supprimer le DNS de cette équation. C'est le mauvais outil pour le travail dans la couche que vous utilisez.