최근에 개인 웹서버를 컨테이너화했습니다. 그러나 이제 더 이상 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 주소를 난독화했습니다.