일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c언어
- git
- HTML
- 구조체
- 플러터
- Unity
- C++
- vim
- 다트 언어
- docker
- 포인터
- c# winform
- 유니티
- c# 윈폼
- Python
- Houdini
- gitlab
- C언어 포인터
- c#
- 도커
- Data Structure
- jupyter lab
- c# 추상 클래스
- github
- Flutter
- jupyter
- Algorithm
- 깃
- dart 언어
- C# delegate
- Today
- Total
nomad-programmer
[DevOps/Docker] 네트워크 구성 (가상 브릿지/가상 NIC) 본문
Linux는 Docker를 설치하면 서버의 물리 NIC가 docker0 이라는 가상 브릿지 네트워크로 연결된다. 이 docker0 은 Docker를 실행시킨 후에 디폴트로 만들어진다. Docker 컨테이너가 실행되면 컨테이너에 172.17.0.0/16이라는 서브넷 마스크를 가진 프라이빗 IP 주소가 eth0으로 자동으로 할당된다. 이 가상 NIC는 OSI 참조 모델의 레이어 2인 가상 네트워크 인터페이스로, 페어인 NIC와 터널링 통신을 한다.
가상 NIC (vethxxx)는 컨테이너에서는 eth0으로 보인다.
Docker 컨테이너와 외부 네트워크가 통신을 할 때는 가상 브릿지 docker0과 호스트 OS의 물리 NIC에서 패킷을 전송하는 장치가 필요하다. Docker에서는 NAPT 기능을 사용하여 연결한다.
NAPT (Network Address Port Translation) 란?
하나의 IP 주소를 여러 컴퓨터가 공유하는 기술로, IP 주소와 port 번호를 변환하는 기능이다. 프라이빗 IP 주소와 글로벌 IP 주소를 투과적으로 상호 변환하는 기술로, TCP/IP의 포트 번호까지 동적으로 변환하기 때문에 하나의 글로벌 IP 주소로 여러 대의 머신이 동시에 연결할 수 있다. Docker에서는 NAPT에 Linux의 iptables를 사용하고 있다.
Docker에서 이 기능을 사용할 때는 컨테이너 시작 시에 컨테이너 안에서 사용하고 있는 포트를 가상 브릿지인 docker0에 대해 개방한다. 예를 들어 컨테이너 시작 시에 컨테이너 안의 웹 서버가 사용하는 80번 포트를 호스트 OS의 8080번 포트로 전송하도록 설정한다. 그러면 외부 네트워크에서 호스트 OS의 8080번 포트에 액세스하면 컨테이너 안의 80번 포트로 연결된다.
NAT 와 NAPT (IP mascarade) 의 차이
프라이빗 IP주소와 글로벌 IP주소를 변환하여 프라이빗 IP 주소가 할당된 컴퓨터에 대해 인터넷 액세스를 가능하게 할 때 사용하는 기술로는 NAT와 NAPT (IP 마스커레이드)가 있다.
NAT (Network Address Translation)
프라이빗 IP 주소가 할당된 클라이언트가 인터넷상에 있는 서버에 액세스할 때 NAT 라우터는 클라이언트의 프라이빗 IP 주소 (예: 192.168.0.1) 를 NAT가 갖고 있는 글로벌 IP 주소 (예: 55.xxx.xxx.xxx) 로 변환하여 요청을 송신한다. 응답은 NAT 라우터가 송신처를 클라이언트의 프라이빗 IP 주소로 변환하여 송신한다.
이러한 주소 변환에 의해 프라이빗 네트워크 상의 컴퓨터와 인터넷상의 서버 간의 통신이 성립된다. 그런데 NAT의 경우 글로벌 IP 주소와 프라이빗 IP 주소를 1:1로 변환하기 때문에 동시에 여러 클라이언트가 액세스할 수가 없다.
NAT는 프라이빗 IP 주소와 글로벌 IP 주소를 1:1 로 변환한다.
NAPT (Netwrok Address Port Translation)
NAPT는 프라이빗 IP 주소와 함께 포트 번호도 같이 변환하는 기술이다. 프라이빗 IP 주소를 글로벌 IP 주소로 변환할 때 프라이빗 IP 주소별로 서로 다른 포트 번호로 변환한다.
예를 들어 클라이언트 A가 보낸 요청은 포트 번호가 1500이고, 클라이언트 B가 보내온 요청은 포트 번호 1600이라고 해보자. 인터넷상의 서버로부터 NAPT의 글로벌 IP 주소의 서로 다른 포트 번호 앞으로 응답이 되돌아 온다. NAPT는 포트 번호를 바탕으로 프라이빗 IP 주소로 변환할 수 있다. 이로써 하나의 글로벌 IP 주소와 여러 개의 프라이빗 IP 주소를 변환할 수 있는 것이다.
NAPT는 프라이빗 IP 주소와 글로벌 IP 주소뿐만 아니라 포트 번호도 변환한다.
또한 NAPT는 이러한 기술의 이름으로, Linux에서 NAPT를 구축하는 것을 IP 마스커레이드라고 부른다. 마스커레이드(mascarade)란 영어로 '가면무도회' 를 의미힌다. 이것은 많은 가면을 쓴 IP 패킷이 포트 번호의 가면을 붙여 변환되는 모습을 나타낸 것이다.
'DevOps > Docker' 카테고리의 다른 글
[DevOps/Docker] 도커로 Nginx 웹 서버 구동하기 (0) | 2020.11.19 |
---|---|
[DevOps/Docker] Docker에서 'Hello World' (0) | 2020.11.19 |
[DevOps/Docker] 릴리스 관리 장치 (cgroups) (0) | 2020.11.18 |
[DevOps/Docker] 컨테이너를 구획화하는 장치 (namespace) (0) | 2020.11.17 |
[DevOps/Docker] 컴포넌트 (0) | 2020.11.17 |