Centos 7에서는 Docker 컨테이너가 호스트 시스템에 액세스할 수 있기를 원하므로 신뢰할 수 있는 영역에 docker0을 추가해 보았습니다.
# firewall-cmd --permanent --zone=trusted --add-interface=docker0
The interface is under control of NetworkManager and already bound to 'trusted'
The interface is under control of NetworkManager, setting zone to 'trusted'.
success
# firewall-cmd --get-zone-of-interface=docker0
no zone
예전에는 작동했지만 어떤 이유로 이 서버에서는 작동하지 않습니다. 나도 그것을 시도했지만 firewall-cmd --reload
아무것도 아닙니다. Firewalld 명령이 완전히 무시되는 것과 같습니다. 이 NetworkManager 메시지는 의심스러운 것 같습니다. 방화벽과 NetworkManager 사이에 일종의 충돌이 있을 수 있습니까?
필사적으로 nmcli connection modify docker0 connection.zone trusted
인터페이스 구성에서 올바르게 설정했지만 ZONE=trusted
방화벽에서는 여전히 인터페이스가 신뢰할 수 있는 영역에 있지 않다고 표시됩니다.
여기서 무슨 일이 일어나고 있는 걸까요?
답변1
내가 아는 한, Firewalld(예: eth0)에서 직접 인식하는 신뢰 영역을 사용하는 인터페이스가 없으면 신뢰 영역은 활성으로 표시되지 않습니다. 이 문제를 해결하려면 다음 명령을 사용하여 iptables 규칙을 명시적으로 설정할 수 있습니다.
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 3 -i docker0 -j ACCEPT
firewall-cmd --reload
systemctl restart docker
여기서 "3"은 입력 체인에 규칙을 삽입하는 위치이며 마일리지는 다를 수 있습니다. 이 명령을 실행한 후 컨테이너에서 호스트 포트에 액세스할 수 있습니다.
답변2
trusted
영역 에 포트나 서비스를 추가 하고 방화벽 구성을 다시 로드해야 합니다.
예가 있습니다:
내부 영역에서 포트 443/tcp를 일시적으로 허용하려면 다음을 입력합니다.
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --zone=trusted --add-port=443/tcp
firewall-cmd --reload
확인하다:
firewall-cmd --get-active-zones
포트가 지속되도록 허용합니다.
firewall-cmd --permanent --zone=trusted --add-port=443/tcp
또한 다음 명령이 반환되어야 합니다.
firewall-cmd --get-zone-of-interface=docker0
trusted