IPv6 포트 80/443을 Podman 컨테이너로 전달하려면 어떻게 해야 합니까?

IPv6 포트 80/443을 Podman 컨테이너로 전달하려면 어떻게 해야 합니까?

최근에 개인 웹서버를 컨테이너화했습니다. 그러나 이제 더 이상 IPv6를 통해 액세스할 수 없다는 것을 확인했습니다. 포트 매핑( -p 80:80 -p 443:443)은 IPv4에서만 작동합니다.https://github.com/containers/podman/issues/4323.

지금까지 나는 다음을 추가하여 포드에 자체 IPv6 ULA 주소를 가져왔습니다.

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

/etc/cni/net.d/87-podman-bridge.conflist로. 이제 curl 'http://[fc01::1]'호스트 자체에서 할 수 있습니다. 하지만 ip6tables공용 IP에 대한 요청을 컨테이너로 전달하는 마법을 이해할 수 없습니다 . 기반https://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/ch18s04.html, 난 노력 했어

# 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

그리고 해당 명령의 다양한 하위 집합이 있지만 시간 초과 또는 "호스트에 대한 경로 없음"이 표시됩니다.

내 주소는 다음과 같습니다.

$ 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

답변1

아니요, 포트 전달이 필요하지 않습니다. 컨테이너는 고유한 IP 주소를 얻습니다. 목적지는~ 아니다주인.

예를 들면 다음과 같습니다.

  • 당신의무작위로 생성된 ULA 네트워크 ~였다fdab:9bac:936f::/48
  • fdab:9bac:936f:0ca2::/64컨테이너용 호스트에 제공
  • 라우팅 테이블은 컨테이너 서브넷을 적절한 호스트로 전달합니다.
  • fdab:9bac:936f:0ca2::443이 웹 서버 컨테이너에 할당됨 (고정 주소 지정을 통한 가상 IP)
  • 호스트에 fdab:9bac:936f:1292::359 (다른 서브넷) 의 IP가 있습니다.

그런 다음 에서 웹 서버 컨테이너에 액세스합니다 fdab:9bac:936f:0ca2::443. 컨테이너에서 실행되는 유일한 것이 웹 서버라면 해당 포트만 열려 있는 포트(80 및 443)입니다.


최근에는 NAT를 건너뛰는 정상적인 IPv6 구성을 컨테이너 네트워킹이 활성화했습니다. 내가 읽은 문제포드맨과 IPv6그게CNI 플러그인IP 주소 할당을 정의하고 경로를 푸시하는 기능이 있습니다. 그런 방식으로 컨테이너 네트워킹을 선택하는 경우.


ULA는 이상적이지 않습니다. 인터넷을 통해 라우팅되지 않습니다. 주소 선택 정책은 IPv4보다 우선순위가 낮습니다.

인터넷 라우팅이 더 좋습니다. 안타깝게도 귀하는 귀하의 IP 주소를 난독화했습니다.

관련 정보