none
Docker Container - Durchreichen von UDP und TCP Port 53 (DNS) RRS feed

  • Allgemeine Diskussion

  • Hallo,

    Habe einen Azure Container mit einem YAML Script erstellt.
    In dem Container läuft ein ACME-DNS Server.
    Der DNS Server muss sowohl per Port 53 TCP als auch Port 53 UDP erreichbar sein.
    Da es ein DNS Server ist lässt sich das nicht ändern und TCP+UDP auf Port 53 mit der gleichen IP ist pflicht!

    Leider erlaubt mir Azure aber nicht diesen Dienst so anzulegen.
    Duplicate ports '53' found in container group 'acme-dns-instance-test' container 'acme-dns'.

    Gibt es hierfür eine Lösung?

    Mein YAML File:

    apiVersion: '2018-10-01'
    location: westeurope
    name: acme-dns-instance-test
    properties:
      containers:
      - name: acme-dns
        properties:
          environmentVariables: []
          image: joohoi/acme-dns
          ports:
          - protocol: TCP
            port: 80
          - protocol: UDP
            port: 53
          - protocol: TCP
            port: 53
          - protocol: TCP
            port: 443
          resources:
            requests:
              cpu: 1.0
              memoryInGB: 0.5
          volumeMounts:
             - mountPath: /etc/acme-dns
               name: acmednsconfig
             - mountPath: /var/lib/acme-dns
               name: acmednsdata
      osType: Linux
      restartPolicy: Always
      ipAddress:
        type: Public
        ports:
          - protocol: TCP
            port: 80
          - protocol: UDP
            port: 53
          - protocol: TCP
            port: 53
          - protocol: TCP
            port: 443
        dnsNameLabel: xxxx
      volumes:
      - name: acmednsconfig
        azureFile:
          sharename: acme-dns-config
          readonly: true
          storageAccountName: xxxxx
          storageAccountKey: xxxxx
      - name: acmednsdata
        azureFile:
          sharename: acme-dns-data
          readonly: false
          storageAccountName: xxxx
          storageAccountKey: xxxx
    tags: {}
    type: Microsoft.ContainerInstance/containerGroups


    Freitag, 27. Dezember 2019 16:19

Alle Antworten

  • Habe ich auch schon überlegt...einfach einem Hostname mehrere IP Adressen verpassen.
    Das halte ich aber für DNS für keine gute Idee. --> siehe hierzu bereits die von mir oben formulierte Anforderung

    Bei DNS müssen alle Server gleich erreichbar sein, sonst kann es zu Problemen führen.
    Da manche Client dann nur den TCP Docker erreichen würden und manche nur den UDP Docker erreichen ist die Verfügbarkeit des Dienstes wie ein Lotteriespiel.

    Vergleiche auch hierzu RFC 2182:

    4. Unreachable servers

    Another class of problems is caused by listing servers that cannot be reached from large parts of the network. The names of servers listed in NS records should resolve to addresses which are reachable from the region to which the NS records are being returned. Including addresses which most of the network cannot reach does not add any reliability, and causes several problems, which may, in the end, lower the reliability of the zone.

    Freitag, 27. Dezember 2019 18:13
  • Vielen dank für deine Idee, aber genau das ist ja die Frage:
    Gibt es eine Möglichkeit auf der gleichen IP mit dem gleichen Port TCP+UDP in einem Azure Docker Container laufen zu lassen.
    Docker selbst kann das wohl.
    Wie ich bereits in meinem ersten Beitrag geschrieben habe bekomme ich die Meldung, dass der Port mehrfach definiert wurde. --> Hierfür bin ich um jeden Workaround, der nicht mit mehreren IP Adressen zu tun hat, sehr dankbar.

    Die ganze Thematik eine IP kommt _nicht_ von mir, sondern sind im Protokollstandard in den RFCs festgeschrieben. Somit bringen mir zwei IPs hier nichts.

    Die Lösung mit zwei IP funktioniert aus meiner Sicht nicht da:
    1. Der Server die gesamte DNS Zone hält und das über eine IP per TCP+UDP erreichbar sein muss
    2. Eine Lösung, die nicht dem Standard entspricht ist keine gute Lösung
    3. Wir hier von keinem Windows DNS Server oder Client reden, sondern die DNS Server am ende des Tages von den Let´s Encrypt Servern abgefragt werden, die sich vermutlich an den Standards orientieren
    4. Dein beschriebenes Failover auch nicht gut ist, da die einzelnen Instanzen per ICMP erreichbar sind und die Clients selbst aktiv prüfen müssten ob der Server, den sie gerade abfragen auf TCP antwortet oder auf UDP antwortet --> das macht meines Wissens nach keine Anwendung

    Hoffe wir können somit das Thema "mehrere IP Adressen" nun abschließen.

    Freitag, 27. Dezember 2019 18:40
  • Bitte die RFCs lesen!!!
    DNS lauscht sowohl auf TCP als auch UDP weil dahinter der gleiche Dienst sitzt.
    Siehe: 
    https://de.wikipedia.org/wiki/Domain_Name_System#Protokoll
    https://tools.ietf.org/html/rfc1035

    Selbst dein Link auf tech-faq.net zeigt schön, dass der DNS auf der IP sitzt.
    Du muss hier berücksichtigen, dass ein DNS selbstverständlich auf merheren IPs lauschen kann.
    Aber er muss auf allen IPs per TCP als auch UDP antworten.
    Bei NAT in Firewalls gibt es sehr wohl die Typen TCP oder UDP oder TCP+UDP

    Auch Microsoft beschreibt dieses verhalten hier: https://support.microsoft.com/de-de/help/556000

    Auch Docker selbst kann TCP und UDP gleichzeitig NATen: https://docs.docker.com/config/containers/container-networking/

    Bei DNS wird in der Regel per UDP eine normale Abfrage ohne DNSSEC gemacht.
    Per TCP wird in der Regel der Zonentransfer oder auch DNSSEC abfragen durchgeführt (sobald diese die größe von 512 Bytes überschreiten)

    Also bitte nicht mehr um den Sachverhalt eines korrekten DNS Servers diskutieren sondern bitte wieder auf die Ursprüngliche Frage zurück kommen: Docker Port soll per UDP und TCP gleichzeitig erreichbar sein.

    Samstag, 28. Dezember 2019 09:24
  • Die IP ist dein Haus, also der PC und die Tür ist der Port.
    Auf einem Port kann nur ein sog. Listener lauschen. Ein 2. Listener ist da halt nicht zulässig.

    Öhm. Natürlich kann man auf derselben IP für unterschiedliche Protokolle an denselben Port binden. Nur kann man das anscheinend bei Azure nicht über die Config einstellen.

    Unter Umständen und je nach OS kann man sogar mehrere Listener an denselben Port derselben IP binden, aber das war ja hier nicht die Frage.

    Der DNS-Server mapt ja nur den Namen zu einer IP. Somit brauchst du doch nur die entsprechenden Namen und Adressen auf deinem 1. DNS-Server eintragen. Ein 2. DNS-Server auf der selben IP kann es halt rein technisch nicht geben.

    Ich denke mal, dass Du da etwas völlig falsch verstanden hast. Es geht weder um einen zweiten DNS Server noch um mehrere IPs, ... sondern nur um einen einzigen DNS Server, der unter Azure so laufen soll wie er es im Rest des Internets auch macht und sowohl per UDP als auch per TCP Protokoll erreichbar sein soll.

    Weiteres siehe hier:
    https://www.tech-faq.net/dns-server-einrichten/#Forward-Lookupzone_erstellen

    Was auch immer das mit der Fragestellung zu tun haben sollte.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 28. Dezember 2019 10:38
  • Leider erlaubt mir Azure aber nicht diesen Dienst so anzulegen.

    Duplicate ports '53' found in container group 'acme-dns-instance-test' container 'acme-dns'.

    Soweit ich das in der Doku sehe, ist "protocol" optional. Was passiert denn, wenn Du die Angabe weglässt und nur einmal Port 53 angibst?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 28. Dezember 2019 10:51
  • Das war auch meine ursprüngliche Konfiguration.
    Dann ist der Dienst leider nur über TCP erreichbar.
    Samstag, 28. Dezember 2019 11:03
  • Das war auch meine ursprüngliche Konfiguration.
    Dann ist der Dienst leider nur über TCP erreichbar.

    In dem Fall würde ich mal eine Anfrage an den Azure Support stellen. Ich sehe das wie Du, dass das Szenario möglich sein muss. Aber wie man das mit Azure nun anstellen könnte, kann ich dir im Moment leider auch nicht sagen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 28. Dezember 2019 11:27
  • Da nun mal ein DNS-Dienst für UDP und TCP für diese IP verbraten ist, kann eben eben auf derselben IP nicht einen 2. DNS-Dienst per Weiterleitung zulassen.

    @bfuerchau: Danke für deine Bemühung, aber genau TCP und UDP geht ja nicht gleichzeitig. Das Thema war ja deshalb von Anfang an 1 Docker Container in dem 1 Service läuft der unter 1 IP Adresse erreichbar ist soll sowohl auf TCP als auch UDP antworten. --> und das gleichzeitig geht eben nicht
    Das mit zwei IP Adressen (oder gar 2 DNS Server???) kommt ausschließlich von dir und ist explizit nicht gefragt worden, weil nicht Standardkonform und so nicht funktionieren kann.

    @Stefan: Danke für den Tipp, werde ein Ticket öffnen.

    Samstag, 28. Dezember 2019 15:45
  • 1. "Natürlich kann man auf derselben IP für unterschiedliche Protokolle an denselben Port binden"
    2. Docker Port soll per UDP und TCP gleichzeitig erreichbar sein.

    @bfuerchau: Sorry, dass ich das so sagen muss aber Du hast echt keinen Plan von dem Thema. Es bringt daher IMHO rein gar nichts, wenn Du dich da weiter "einbringst".

    Das Ganze hat zudem mit DNS nichts zu tun, das betrifft jeden beliebigen Port, der sowohl per UDP (Protokoll) als auch per TCP (ebenfalls ein Protokoll) erreichbar sein soll. DNS ist in dem Sinne lediglich eine Besonderheit, da sowohl die Bereitstellung per UDP als auch per TCP auf Port 53 gefordert ist. Bei den meisten anderen Diensten ist das nicht der Fall, die lauschen entweder auf UDP oder TCP.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 28. Dezember 2019 16:23
  • Die Bestätigung warum was nicht geht steht doch da eben oben.
    DNS ist an UDP/TCP Port 53 gebunden, diesen belegt aber bereits ein Dienst mit beiden Protokollen weshalb eine Weiterleitung an Docker eben scheitern muss.

    Ich weiß ehrlich nicht, woran das Verständnis hier scheitert.

    Das geht nur deswegen nicht, weil die Prüfung der Config das anscheinend nicht zulässt.

    - protocol: UDP
      port: 53
    - protocol: TCP
      port: 53

    Duplicate ports '53' found in container group 'acme-dns-instance-test' container 'acme-dns'.

    Die Meldung (wenn man sie denn mal gelesen hätte) ist recht eindeutig.

    @OP: Ich nehme mal an, es geht problemlos, wenn Du nur einen Eintrag auf Port 53 in der Config hast, nur dann halt eben nur für ein Protokoll, nicht für beide?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 28. Dezember 2019 18:26
  • Und was hat das eine mit dem anderen zu tun?

    Der OP will keinen (DNS) Namen seines Containers, ... mit irgendeiner IP versehen, sondern einen stinknormalen DNS Server bereitstellen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Sonntag, 29. Dezember 2019 14:49
  • Dann such doch eben selber weiter blind in der Gegend rum.
    Wer lesen kann ist klar im Vorteil;-).

    https://docs.microsoft.com/bs-latn-ba/azure/container-instances/container-instances-reference-yaml#Port

    Port object

    Name Type Required Value
    protocol enum No The protocol associated with the port. - TCP or UDP
    port integer Yes

    The port number.


    Montag, 30. Dezember 2019 08:12
  • Name Type Required Value
    protocol enum No The protocol associated with the port. - TCP or UDP
    port integer Yes

    The port number.


    Kerl (Oder Frau, kenn dich ja nicht)! Lass es endlich gut sein. Du redest immer weiter am Thema vorbei, wiederholst Zeugs, was schon x Posts früher imThread steht, überliest geflissentlich alle relevanten Antworten, ...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Montag, 30. Dezember 2019 08:42
  • Warum?

    Die Meldung besagt, dass Port 53 doppelt genannt wurde.
    Da die Angabe des Protokolls optional ist, reicht die Definition des Ports ohne Protokoll.
    Somit ist die Anforderung für den Port 53 erfüllt.

    Man braucht auch keine Meldung an Microsoft schreiben, da die Angabe des Protokolls explizit mit "oder" definiert ist.

    Montag, 30. Dezember 2019 10:15
  • Da die Angabe des Protokolls optional ist, reicht die Definition des Ports ohne Protokoll.

    Somit ist die Anforderung für den Port 53 erfüllt.

    a) hab ich das schon geschrieben

    b) hat der OP darauf geantwortet, dass dann automatisch nur TCP aktiviert wird.

    c) Ist die Anforderung nicht erfüllt.

    Aber das ist bei dir leider vergebene Liebesmüh, du willst das IMHO gar nicht verstehen. Zugeben, dass man keinen Plan und sich total verrannt hat, ist nicht so dein Ding, oder?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Montag, 30. Dezember 2019 10:59
  • "I also found that you cannot forward both a TCP and UDP port from the same Docker container.

    Only 1 protocol is supported at a time across all open ports."

    Echt jetzt?

    Nuja, egal: Ja, genau darum geht es hier die ganze Zeit und der OP hat das auch schon rausgefunden. Dass das seitens Azure dennoch falsch ist und es eigentlich gehen sollte, haben wir auch schon festgestellt. Da es aber über die aktuell möglichen Einstellungen nicht geht, ist eine Anfrage an MS wohl die einzige Option, denn nur die können das ändern/korrigieren.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Montag, 30. Dezember 2019 11:50
  • Schade. Dachte eigentlich, Du hättest es. Aber wohl doch nicht. Daher denk ich mir jetzt meins (so ca dasselbe wie der OP) und lass dich alleine hier weiter machen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Montag, 30. Dezember 2019 12:13
  • Das sollte von mir keine Beleidigung sein. Für mich ist das was ich geschrieben habe fakt. Wenn Du es als Beleidigung auffasst, solltest Du etwas daran ändern.

    Mir kann es letztlich egal sein wer Du bist oder was Du bist. Aber eins sollte dir sicherlich wichtig sein, ich denke nicht das dich hier irgendjemand im Forum der dich erlebt hat für irgendeinen Auftrag buchen würde. Auch denke ich nicht das Du eine Empfehlung bekommen würdest.

    Guten rutsch

    Gruß Thomas

     
    Dienstag, 31. Dezember 2019 16:04
  • Als ITler sollte man aber wissen das man bei 0 anfängt zu zählen ;)

    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Dienstag, 31. Dezember 2019 16:58
  • Der Fehler liegt bei dir da Du immer versuchst nur eine Wahrheit zu sehen und zwar immer nur deine. Es gibt aber eben nicht nur die eine Wahrheit und das eine richtig.

    Logisch muss auch nicht immer logisch sein. Das hängt davon ab welches wissen man selbst besitzt und anwenden kann.

    Für mich ist es logisch das erst das Ei da ist und erst dann das Huhn. Andere sehen das anders. Jeder kann und darf denke was er will und man sollte niemals seinen Glauben anderen aufzwingen.

    Ehrlich ich würde dich nicht mal rufen wenn mein Klo verstopft wäre. Ich könnte auch niemandem empfehlen dich an diese sache ran zu lassen.

    Das ist auch keine Beleidigung, nicht falsch versehen


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings


    Dienstag, 31. Dezember 2019 18:33
    Dienstag, 31. Dezember 2019 19:07
  • Sehr schön, kann man das irgendwo liken?
    Dienstag, 31. Dezember 2019 19:22
  • Hallo Ra-pro,
    Danke für den Tipp, werde ein Ticket öffnen.
    Hast Du mithilfe der von Stefan empfohlenen Anfrage die Bereitstellung sowohl per UDP als auch per TCP eingestellt? Wenn es gelungen ist, wäre es nett von Dir (und auch für andere hilfreich), wenn Du die gewonnenen Erkenntnisse mitteilen würdest.

    Gruß,
    Dimitar

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 10. Januar 2020 13:39
    Moderator