✔️ Docker에서의 Netfilter
Docker에서의 Netfilter가 어떤 역할을 하는지 알아보자
docker0가 있고 172.17.0.2 ip를 가지는 하나의 컨테이너가 연결되어 있다.
docker0는 Netfilter의 NAT 기능을 통해 인터넷 통신을 할 수 있다.
컨테이너가 8.8.8.8 (google DNS 서버)로 접속을 시도한다고 하자
컨테이너의 private ip SRC : 172.17.0.2 에서 → 목적지인 DST : 8.8.8.8로 찾아갈 수 없다.
enp0s3에 설정되어 있는 ip는 10.0.2.15이다. 우리는 가상화를 쓰고 있기 때문에 이 ip도 private ip이며 해당 ip도 또 다시 NAT을 거쳐서 외부로 통신하게 된다.
즉, 출발지를 10.0.2.15 로 목적지를 8.8.8.8로 하여 통신한다.
그리고 Netfilter에서는 172.17.0.2 ip가 10.0.2.15 ip로 바꾸어 나갔다는 것을 NAT 테이블에 기록해둔다.
어딘가에 있는 8.8.8.8이 컨테이너의 요청에 대한 응답을 할 때는 출발지는 8.8.8.8 이며 목적지는 10.0.2.15가 된다.
그 정보를 가지고 Netfilter까지 들어오며 Netfilter는 NAT에 기록해둔 정보를 통해 10.0.2.15를 172.17.0.2로 바꾼다.
✔️ port forwarding에서의 Netfilter
포트 포워딩을 하는 상황까지 고려해보자
Windows의 웹 브라우저에서 192.168.100.100:8080 으로 접속한다고 해보자
docker0가 있고 172.17.0.2 ip를 갖고 80포트가 열려있는 컨테이너가 연결되어 있다.
Netfilter가 있고 윈도우와 연결되어 있는 인터페이스인 enp0s8이 있다.
이 enp0s8 인터페이스의 ip가 192.168.100.100이므로 웹 브라우저에 192.168.100.100:8080 주소를 입력하면
출발지의 ip는 SRC : 192.168.100.1 (Windows virtual box의 ip) 그리고 목적지는 DST : 192.168.100.100이 된다.
enp0s8 인터페이스까지만 접근할 수 있으며 내부의 컨테이너를 찾을 수는 없다.
만약 요청이 TCP의 8080 포트로 들어왔으면 Netfilter에 의해서 즉 DNAT 정책에 의해서 목적지의 ip는 172.17.0.2로 바뀌며 DST의 8080은 80번 포트로 바뀌어 컨테이너에 전달된다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] 이미지 레이어(Layer) (0) | 2022.05.11 |
---|---|
[Docker] docker commit 명령을 이용하여 이미지 빌드하기 (0) | 2022.05.10 |
[Docker] Docker Network - 2 (0) | 2022.05.10 |
[Docker] Docker Network - 1 (0) | 2022.05.10 |
[Docker] Docker Volume (볼륨) (0) | 2022.05.09 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!