Docker가 네트워크에 연결하는 방식을 더 잘 이해하려고 노력 중인데 이 문제가 발생했습니다. 참고: 나는 이것이 Docker 자체와 관련이 없다고 생각하며 Docker가 나타나는 차량일 뿐입니다. 이것이 나의 오해라면, 자유롭게 정정해주세요!
Docker가 Swarm 모드에서 실행되면 다음 iptables 명령이 실행됩니다.
> iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
ACCEPT udp -- anywhere anywhere udp dpt:bootps
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-ISOLATION all -- anywhere anywhere
DOCKER all -- anywhere (1) anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere (2) anywhere
ACCEPT all -- anywhere (3) anywhere
DOCKER all -- anywhere (4) anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
출력에 1,2,3,4 숫자를 추가했습니다. 1번과 4번은 중복된 것 같습니다. 마찬가지로 2와 3은 서로 동일한 복사본처럼 보입니다. 이것들의 목적은 무엇입니까? 정말 중복인가요? 그렇지 않은 경우 이를 식별하기 위해 다음 정보 계층을 어떻게 볼 수 있습니까?
그리고 첫 번째 부분에서 누군가 dpt:domain
vs를 설명할 수 있다면 dpt:bootps
그것도 좋을 것 같아요!
답변1
발견한 규칙은 "쌍" 1-4 및 2-3에 대해 중복되지 않을 가능성이 높지만 사용한 명령의 출력에는 차이가 없습니다. 를 사용하면 iptables -L -v
차이점을 드러낼 수 있는 추가 출력을 얻게 됩니다. 이는 규칙이 다른 인터페이스에서 실행될 때 (내 경험상) 자주 발생합니다.
대상 포트 사양이 다릅니다 dpt:domain
. 대상 포트는 53(도메인 또는 DNS)이지만 대상 포트는 67(DHCP) 입니다 .dpt:bootps
dpt:domain
dpt:bootps
편집: 맞습니다. 이 상황은 Docker와 직접적인 관련이 없습니다. 이는 Docker가 사용자 환경에 노출되는 비교적 일반적인 상황이지만 Docker 환경 외부에서도 자주 발생합니다.
답변2
두 번째 질문에 대한 추가 대답: 이 실행은 iptables -L -n
IP 주소와 포트를 호스트 이름과 서비스 이름으로 변환하는 대신 숫자 형식으로 반환합니다. 따라서 dpt:domain
and 는 and dpt:bootps
로 인쇄됩니다 . 이는 뒤에 있는 서비스 이름을 모르는 모든 호스트/포트에 대해 작동합니다.dpt:53
dpt:67