도커 및 쇼어 월


16

내가 사용하고 Shorewall를 간단하게 내 서버에 독립 방화벽 및 사용하고자하는 도커을 잘한다.

Docker 컨테이너와 포트 리디렉션 을 사용하여 docker 는 자체 IP 테이블 규칙 / 체인을 설정하여 ShoreWall이 다시 시작되면 종료됩니다. 따라서 컨테이너에 접근 할 수 없게 됩니다.

누구나 해안을 다시 시작할 때 도커 규칙을 저장 / 복원했거나 다른 해결 방법이 있습니까?

또한보십시오:

답변:


19

다음 구성 변경은 Docker와 Shorewall 호스트 사이의 트래픽 흐름을 보장해야합니다. Shorewall 4.5.21.9에서 테스트되었지만 최신 버전에 적용되어야합니다.

/etc/shorewall/shorewall.conf

IP 전달이 활성화되어 있는지 확인하십시오 (대부분의 구성 항목은 예 / 아니오이지만이 항목은 "켜기"입니다).

IP_FORWARDING=On

/ etc / shorewall / masq

개인 Docker 네트워크에 대해 마스 쿼 레이 딩 (NAT)을 활성화합니다 (다른 네트워크를 사용하는 경우 (예 :로 도커를 --bip=#.#.#.#/#시작한 다음 적절하게 변경)). eth0외부 연결이 가능한 호스트 시스템의 인터페이스로 변경하십시오 .

#INTERFACE:DEST         SOURCE
eth0                    172.17.0.0/16

/ etc / shorewall / 인터페이스

Shorewall이 dock영역과 관련된 인터페이스를 알 수 있도록 인터페이스 항목을 추가하십시오 .

#ZONE           INTERFACE               OPTIONS
dock            docker0

/ etc / shorewall / zones

새 영역을 만듭니다. 참고, docker너무 길어서 "잘못된 영역 이름"오류가 발생합니다.

#ZONE   INTERFACE
dock    ipv4

/ etc / shorewall / 정책

Docker 컨테이너가 호스트 컴퓨터 인터넷 통신하도록 할 수 있으므로 다음 같이 시작하는 것이 좋습니다.

#SOURCE         DEST            POLICY
# ...(other policies)...
dock            all             ACCEPT
# ...(other policies, catch-all)...

또한 비슷한해야 할 수도 있습니다 ACCEPT트래픽에 대한 정책 fwdock당신이 이미 그것을 열어하지 않은 경우 fwall.

필요 에 따라 정책 또는 규칙 파일 에서이를 더욱 강화할 수 있습니다 . 예를 들어, 위의 내용은 외부 트래픽이 Docker 컨테이너에 도달하는 것을 명시 적으로 허용하지 않습니다. 다른 지역 / 정책 / 규칙을 확인하십시오.


1
IP_FORWARDING=YesIP_FORWARDING=True작업뿐만 아니라. 여러 프로덕션 라우터에 있지만 귀하의 대답은 내 것보다 훨씬 명확합니다. 훌륭한 일.
Aaron C. de Bruyn

내 무지를 용서하십시오-주어진 규칙을 추가 한 후 해안 벽을 다시 시작할 때 도크가 "빈 인터페이스"라는 경고가 표시됩니다. 172.17 주소 및 영역 'dock'. Shorewall 작동 방식에 대한 명확한 정보가 누락 되었습니까?
John Clements

죄송합니다. 인터페이스 파일의 변경 사항을 놓쳤습니다. 답변을 편집했습니다 /etc/shorewall/interfaces. 새 섹션을 참조하십시오 .
fazy

감사합니다. 호스트가 컨테이너에 연결되도록 도커를 인식하는 shorewall 5 와도 잘 작동합니다.
Drasill

masq 설정은 매우 중요합니다. 그렇지 않으면 도커 컨테이너가 외부 IP를 사용하여 다른 컨테이너에 액세스 할 수 없습니다. 차단됩니다
Eugen Mayer

6

Docker가 네트워크 격리 기능을 도입했기 때문에 여기에 언급 된 다른 솔루션으로는 더 이상 사용자 정의 네트워크를 사용하기에 충분하지 않습니다. Shorewall 5.0.6은 Docker 네트워크를 포함하여 Docker를 지원합니다 . 이:

  • 쇼어 월 및 도커를 임의의 순서로 시작 / 중지 / 다시 시작 가능
  • 확장 스크립트를 유지할 필요가 없습니다.

2

그냥 내 상자에서 알아 냈어 /etc/shorewall.conf에 다음이 있는지 확인하십시오.

IP_FORWARDING=Yes

Docker는 전달에 의존하며 모든 서버에서 'puppet'이 'No'로 설정되어 있습니다.

업데이트 : 아마도 도커에서 들어오는 트래픽을 WAN 인터페이스로 위장해야 할 수도 있습니다.

편집 /etc/shorewall/masq하면 다음과 비슷한 줄이 필요합니다.

br0 172.17.0.0/12

이 경우 내 WAN 인터페이스는 실제로 br0 (브리지)이지만, 아마도 eth0과 비슷할 것입니다. ( ifconfig인터페이스 및 해당 IP 주소를 보는 데 사용 하십시오). 내 컴퓨터 도커에서 RFC1918 개인 주소 범위 인 172.17.0.0/24를 사용합니다. 다른 시스템에서는 다를 수 있지만 ifconfig인터페이스를 찾기 위해 다시 한 번 사용하여 범위 를 볼 수 있습니다 docker0.


2

다시 시작 DOCKER하기 전에 체인 을 저장 한 다음 나중에 다시 복원하는 확장 스크립트를 작성하여 Docker 규칙 세트가 쇼어 월 다시 시작에서 유지되도록 할 수 있습니다 . 방금 가능한 방법과는 거리가 멀지 만이 작업을 수행하는 방법에 대한 예제를 게시 했습니다.


0

도커 서비스는 실행중인 컨테이너에 영향을주지 않고 다시 시작할 수 있으며 Shorewall을 다시 시작한 후 실행하여 도커 특정 규칙을 다시로드 할 수 있습니다. 컨테이너와의 네트워킹이 중단되는 시간은 분명히있을 것입니다.

이것은 적어도 소수의 Archlinux 설치에서 사실입니다.


0

새로 고침 작업은 iptable을 제거하지 않으므로 규칙이나 정책을 새로 고치려면 다시 시작 대신 새로 고침을 실행할 수 있습니다.

sudo shorewall refresh

확실히, 당신이 실제로 벽을 다시 시작 해야하는 경우 문제는 여전히 남아 있습니다. 그런 다음 docker를 다시 시작하고 컨테이너를 다시 시작해야합니다.


0

가능한 옵션 중 하나는 --net = host 옵션과 함께 Docker를 실행하여 IP 전달 및 NAT없이 컨테이너화 된 응용 프로그램 액세스 호스트 네트워크를 허용하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.