Wie kann ich den IPv6-Port 80/443 an einen Podman-Container weiterleiten?

Wie kann ich den IPv6-Port 80/443 an einen Podman-Container weiterleiten?

Ich habe vor kurzem meinen persönlichen Webserver in einen Container gepackt. Allerdings habe ich jetzt festgestellt, dass er nicht mehr über IPv6 erreichbar ist. Portmapping ( -p 80:80 -p 443:443) funktioniert nur für IPv4:https://github.com/containers/podman/issues/4323.

Bisher habe ich es geschafft, dem Pod eine eigene IPv6-ULA-Adresse zuzuweisen, indem ich

          [
            {
              "subnet": "fc01::/48",
              "gateway": "fc01::1"
            }
          ]

in /etc/cni/net.d/87-podman-bridge.conflist. Jetzt kann ich also curl 'http://[fc01::1]'vom Host selbst aus. Aber ich kann nicht herausfinden, ip6tableswie ich Anfragen an die öffentliche IP-Adresse an den Container weiterleiten kann. Basierend aufhttps://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/ch18s04.html, Ich habe es versucht

# ip6tables -t nat -A POSTROUTING -o eth0 -s fc01::1/48 -j MASQUERADE
# ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination '[fc01::1]:80'
# ip6tables -A FORWARD -i eth0 -o cni-podman0 -p tcp --dport 80 -j ACCEPT

und verschiedene Untermengen dieser Befehle, aber ich erhalte entweder Timeouts oder „Keine Route zum Host“.

Meine Adressen sehen folgendermaßen aus:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether f2:3c:91:c8:5b:d9 brd ff:ff:ff:ff:ff:ff
    inet <PUBLIC IPv4>/24 brd <BROADCAST> scope global eth0
       valid_lft forever preferred_lft forever
    inet6 <PUBLIC IPv6>/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 2591999sec preferred_lft 604799sec
    inet6 fe80::f03c:91ff:fec8:5bd9/64 scope link 
       valid_lft forever preferred_lft forever
3: cni-podman0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether b6:58:df:4b:b9:71 brd ff:ff:ff:ff:ff:ff
    inet 10.88.0.1/16 brd 10.88.255.255 scope global cni-podman0
       valid_lft forever preferred_lft forever
    inet6 fc01::1/48 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::b458:dfff:fe4b:b971/64 scope link 
       valid_lft forever preferred_lft forever
4: vethb4059020@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master cni-podman0 state UP group default 
    link/ether d6:5d:37:f2:0c:48 brd ff:ff:ff:ff:ff:ff link-netns cni-26c430c8-c816-8962-b2f2-b3bbb5274f93
    inet6 fe80::d45d:37ff:fef2:c48/64 scope link 
       valid_lft forever preferred_lft forever

Antwort1

Nein, Sie benötigen keine Portweiterleitung. Der Container erhält eine eindeutige IP-Adresse; das Ziel istnichtder Gastgeber.

Sagen Sie zum Beispiel:

  • Deinzufällig generiertes ULA-Netzwerk Warfdab:9bac:936f::/48
  • fdab:9bac:936f:0ca2::/64Einem Gastgeber für Container gegeben
  • Ihre Routentabellen leiten das Container-Subnetz an den richtigen Host weiter.
  • fdab:9bac:936f:0ca2::443Diesem Webserver-Container zugewiesen (Vanity-IP über statische Adressierung)
  • Der Host hat zufällig eine IP von fdab:9bac:936f:1292::359 (anderes Subnetz)

Greifen Sie dann unter auf den Webserver-Container zu fdab:9bac:936f:0ca2::443. Wenn im Container nur ein Webserver ausgeführt wird, sind dies die einzigen offenen Ports (80 und 443).


Erst seit kurzem ermöglicht Container-Networking vernünftige IPv6-Konfigurationen, die NAT überspringen. Meine Interpretation des ProblemsPodman und IPv6ist dasCNI-Pluginsverfügen über die Funktionen zum Definieren der IP-Adresszuweisung und zum Pushen von Routen. Wenn Sie sich für diese Art der Containervernetzung entscheiden.


ULA ist nicht ideal. Es wird nicht über das Internet geroutet. Adressauswahlrichtlinien haben eine niedrigere Priorität als IPv4.

Über das Internet routbar ist besser. Leider haben Sie Ihre IP-Adresse verschleiert.

verwandte Informationen