[Network] docker network ๊ตฌ์ฑ
์ด์ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ผ ๋ ์ผ์ด๋๋ ์ผ ์์ ๋์ ์์ค์์ ๋คํธ์ํฌ ํธ๋ํฝ์ด ์ด๋ป๊ฒ ๋์ํ๋ ์ง ์์๋ดค์๋ค. ์ด๋ฒ์๋ docker๋ก ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํด๋ณด๊ณ ์ข ๋ ๋ฎ์ ์ปค๋ ์์ค์์ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํ๋ ๊ณผ์ ์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ๊ทธ ์์์ ์ฐ์ด๋ ์ฉ์ด/ ๋ช ๋ น์ด์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค.
red ์ blue container ๊ฐ ์๋ก ํธ๋ํฝ์ ์ฃผ๊ณ ๋ฐ์ ์ ์์๊น ?
์ฒซ๋ฒ์งธ๋ก ์ค์ตํด๋ณผ ๋ด์ฉ์, host pc ๋ด์ red/blue container๋ฅผ ์์ฑํ๊ณ 2๊ฐ์ network๊ฐ ์๋ก ํต์ ํ ์ ์๋์ง ํ ์คํธ ํด๋ณด๋ ๊ฒ์ด๋ค.
๋์ปค๋ก๋ ์ด๋ฅผ ๊ฐ๋จํ๊ฒ ๊ตฌ์ถํ ์ ์๋ค. ๋์ปค ๋ธ๋ฆฟ์ง๋ฅผ ์์ฑํ๊ณ , ํด๋น ๋คํธ์ํฌ์ ์ปจํ ์ด๋๊ฐ ์ฐ๊ฒฐ๋๋๋ก ํด์ฃผ๋ฉด ๋๋ค.
|
|
์ ๊ณผ์ ์ ๋๋ฌด ์ถ์ํ๋์ด ์๋ค. ๋ง์ฝ ์ปจํ ์ด๋๊ฐ ํน์ ๋คํธ์ํฌ์ ํ ๋น๋์ง ์๊ณ ์์ฑ๋์์ ๊ฒฝ์ฐ, ๋ ์ปจํ ์ด๋๊ฐ ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ๋๋ ์ง ์์๋ณด์. ์ฐ์ , ๋คํธ์ํฌ๋ฅผ ํ ๋น๋ฐ์ง ์์ 2๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋๋ก ํ๋ค.
|
|
ํ์ฌ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด, ํธ๋ํฝ์ ์๋ก ๊ตํํ ์ ์๋ ์ํ์ด๋ค. red ์ปจํ ์ด๋๊ฐ ๋ค๋ฅธ ์ปจํ ์ด๋์ ํต์ ์ ํ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ํด์ผ๋ ๊น? ์ฌ๊ธฐ์ ๋ฑ์ฅํ๋ ๊ฐ๋ ์ด ์ค์์น์ด๋ค. (docker network ํ๊ฒฝ์์๋ switch์ bridge๋ฅผ ํผ์ฉํด์ ์ฌ์ฉํ๊ณค ํ๋ค. ๊ฐ๋ ์ ์ผ๋ก๋ ๋ค๋ฅด๋ค.)
- ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ๋ชฉ์ ๋ธ๋ฆฌ์ง(Bridge): ๋ธ๋ฆฌ์ง๋ ๋ ๊ฐ ์ด์์ ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฐ๊ฒฐํ์ฌ ํ๋์ ํตํฉ๋ ๋คํธ์ํฌ์ฒ๋ผ ์๋ํ๋๋ก ๋์ต๋๋ค. ์ฃผ๋ก ๋คํธ์ํฌ ํธ๋ํฝ์ ์์ ์ค์ด๊ณ , ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ ๊ธฐ์ ์ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ค์์น(Switch): ์ค์์น๋ ๋คํธ์ํฌ ๋ด์ ์ฌ๋ฌ ์ฅ์น๋ค ์ฌ์ด์์ ๋ฐ์ดํฐ ํจํท์ ์ ๋ฌํ๋ ์ฅ์น๋ก, ๊ฐ ์ฅ์น์ ๋ํ ํฌํธ๋ฅผ ๊ฐ์ง๊ณ ์์ด ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค. ์ค์์น๋ ๋ธ๋ฆฌ์ง์ ๊ธฐ๋ฅ์ ํฌํจํ๋ฉฐ, ๋ ๋ง์ ๊ธฐ๋ฅ๊ณผ ๋ ๋์ ํจ์จ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- ์๋ ๋ฐฉ์ ๋ธ๋ฆฌ์ง: ๋ธ๋ฆฌ์ง๋ MAC ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ํฝ์ ํํฐ๋งํ๊ณ , ํ์ํ ๊ฒฝ์ฐ์๋ง ํธ๋ํฝ์ ๋ค๋ฅธ ์ธ๊ทธ๋จผํธ๋ก ์ ๋ฌํฉ๋๋ค. ์ด๋ ๋คํธ์ํฌ์ ์ถฉ๋ ๋๋ฉ์ธ์ ์ค์ด๊ณ ํจ์จ์ฑ์ ๋์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ค์์น: ์ค์์น ์ญ์ MAC ์ฃผ์๋ฅผ ์ฌ์ฉํ์ง๋ง, ๊ฐ ์ฐ๊ฒฐ๋ ์ฅ์น๋ฅผ ์ํ ํฌํธ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ ๋ธ๋ฆฌ์ง๋ณด๋ค ๋ ๋ง์ ๋์ ์ฐ๊ฒฐ๊ณผ ๋ ๋์ ํธ๋ํฝ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ค์์น๋ ๊ฐ ํฌํธ๊ฐ ๋ ๋ฆฝ์ ์ธ ์ถฉ๋ ๋๋ฉ์ธ์ ํ์ฑํ๋ฏ๋ก ๋คํธ์ํฌ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
- ์ฉ๋ ๋ฐ ํ์ฉ ๋ธ๋ฆฌ์ง: ์์ ๋คํธ์ํฌ ๋๋ ๋ ๊ฐ์ ๋ถ๋ฆฌ๋ ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ธ๋ฆฌ์ง๋ ๋คํธ์ํฌ์ ๊ฐ๋จํ ํ์ฅ์ด ํ์ํ ๋ ์ ์ฉํฉ๋๋ค. ์ค์์น: ํ๋์ ๋คํธ์ํฌ ํ๊ฒฝ์์ ์ค์์น๋ ๋ธ๋ฆฌ์ง๋ณด๋ค ํจ์ฌ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ์ค์์น๋ ๊ทธ ์์ฒด๋ก ๋ง์ ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ์ฌ ๋๊ท๋ชจ ๋คํธ์ํฌ ํ๊ฒฝ์์ ์ค์ถ์ ์ธ ์ญํ ์ ํฉ๋๋ค.
๊ทธ๋ผ ์ด๋ฒ์ ์ค์์น(๋ธ๋ฆฟ์ง)๋ฅผ ์์ฑํ๊ณ , 2๊ฐ์ container๊ฐ ์๋ก ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ํด๋ณด์.
์ค์์น ์์ฑ
|
|
์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์, dockerbr0๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง bridge
๋ฅผ ์์ฑํ๊ณ , 172.28.0.1/16 ์ ์์ดํผ ๋์ญ์ ๊ฐ์ง๋๋ก ํ๋ค.
ํ์ฌ๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ํ๊ฐ ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ red <-> blue container ๊ฐ ํต์ ์ด ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น ?
red container์์ ๋๊ฐ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ bridge์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ์ฐ๊ฒฐ์ด ๋์ด์ผ ํ๊ณ , ์ถ๊ฐ๋ก blue container์์ ๋๊ฐ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ bridge ๋คํธ์ํฌ ์ธํฐํ์ด์ค๊ฐ ์ฐ๊ฒฐ์ด ๋๋๋ก ๊ตฌ์ฑํด์ผ ํ๋ค.
์ฐ์ red container์์ ํธ๋ํฝ์ด ๋๊ฐ๋ ํต๋ก์ธ veth-red
, blue container์์ ํธ๋ํฝ์ด ๋๊ฐ๋ veth-blue
๋ฅผ ์ ์ํ๊ณ ๊ฐ๊ฐ์ ์ธํฐํ์ด์ค๊ฐ bridge ์ ์ธํฐํ์ด์ค์ธ veth-red-br
/ veth-blue-br
๊ณผ ์ฐ๊ฒฐ์ด ๋๋๋ก ํด๋ณด์.
veth pair ์์ฑ ๊ทธ๋ฆฌ๊ณ ๋ธ๋ฆฟ์ง ์ฐ๊ฒฐ
|
|
์์ ๊ฐ์ด ๊ตฌ์ฑ์ ํ๊ฒ ๋๊ณ ๋์๋๋ฅผ ๊ทธ๋ ค๋ณด๋ฉด ์๋์ ๊ฐ๋ค. container red ๋ veth-red(172.28.0.2)์ ์ธํฐํ์ด์ค๋ฅผ ํตํด bridge ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐํ๊ณ , container blue ๋ veth-blue(172.28.0.3) ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด bridge์ ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐํ๋ค.
ํต์ ํ ์คํธ
์์ ๊ฐ์ด ๊ตฌ์ฑ์ ํ๊ณ red์์ blue ๋ก ํ์ ๋ ๋ ค๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฑ๊ณต์ ์ผ๋ก ํต์ ์ด ๊ฐ๋ฅํด์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
์๋ก ๋ค๋ฅธ LAN์ ์ํ ์ปจํ ์ด๋๊ฐ ํต์ ์ ํ๊ธฐ ์ํด์
์์ ์์ ์ ๋น์ทํ๊ฒ, green, orange container๋ฅผ ์์ฑํด์ dockerbr1 ๋ธ๋ฆฟ์ง์ ์ฐ๊ฒฐ์์ผ๋์ ์ํ์ด๋ค. ์ฌ๊ธฐ์ dockerbr0์ ์ํ red container์์ dockerbr1์ ์ํ green container์ ์์ฒญ์ ๋ณด๋ด๊ณ ์ถ์ผ๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ ์ ์๋ค.
- routing table
- ๊ฐ์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ ๋ธ๋ฆฟ์ง ์ฐ๊ฒฐ
- ip tunneling
- ํน์ bridge์ ๋ชจ๋ ์ปจํ ์ด๋ ์ฐ๊ฒฐํ๊ธฐ
์ด๋ฒ ์ค์ต์์ ํด๋ณผ ๊ฒ์, ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด router๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ์ ์ํ ์ปจํ ์ด๋๊ฐ ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ค๊ณ ํ๋ค.
๋ผ์ฐํ ์ปจํ ์ด๋ ์์ฑ ํ ๋ธ๋ฆฟ์ง์ ์ฐ๊ฒฐ
|
|
router ์ญํ ์ ์ํํ๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ , ๋ผ์ฐํฐ๋ก ๋ค์ด์ค๋ ํธ๋ํฝ์ ๋ค๋ฅธ ๋คํธ์ํฌ๋ก ์ ๋ฌํ ์ ์๋๋ก IP ํฌ์๋ฉ ์ค์ ์ ํด์ฃผ์๋ค.
๋ผ์ฐํ ๊ท์น ์ค์
|
|
NAT ์ค์ ์ ํ์ฌ, ์ธ๋ถ ๋คํธ์ํฌ์ ํต์ ํ ์ ์๋๋ก ๊ตฌ์ฑํ๋ค. NAT ์ค์ ์ ํ๋ ์ด์ ๋ ์ปจํ ์ด๋๊ฐ ๋ค๋ฅธ ๋คํธ์ํฌ(์: ์ธํฐ๋ท ๋๋ ๋ค๋ฅธ ์ฌ์ค ๋คํธ์ํฌ)์ ํต์ ํ ๋ ์๋ณธ IP ์ฃผ์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด, ๋ชฉ์ ์ง ๋คํธ์ํฌ์์ ํด๋น IP ์ฃผ์๋ฅผ ๋ผ์ฐํ ํ ์ ์๊ฑฐ๋ ๋ณด์ ์ ์ฑ ์ ์ํด ์ฐจ๋จ๋ ์ ์๋ค. MASQUERADE๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ์ธ๋ถ ๋คํธ์ํฌ์์ ์๋ต์ ํด๋น ์ปจํ ์ด๋๋ก ์ ํํ ๋ผ์ฐํ ํ ์ ์๊ฒ ํ๋ค. ๋ํ ์๋ณธ IP ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๋ฏ๋ก, DHCP ์๋ฒ์ ์ํด IP๋ฅผ ๋์ ์ผ๋ก ํ ๋น๋ฐ๋ ํ๊ฒฝ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
๊ฐ ์ปจํ ์ด๋์์ ๋ผ์ฐํฐ๋ฅผ ํตํด ๋ค๋ฅธ ๋คํธ์ํฌ๋ก ๋ผ์ฐํ ์ด ๊ฐ๋ฅํ๋๋ก ๊ฒ์ดํธ์จ์ด ์ค์
|
|
์ ๋ช ๋ น์ด๋, ํน์ container์์ ์ธ๋ถ์ ip๋ก ์์ฒญ์ ๋ณด๋์ ๋, routing table์ ์ ์๋์์ง ์์ ๊ฒฝ์ฐ, ํด๋น ํธ๋ํฝ์ router๋ก ์ด๋ํ๋ผ๊ณ routing table์ ์ถ๊ฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ router ์ ip๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ ์ ์๋ค.
|
|
|
|
routing table ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์๋ค.
|
|
์์ ๊ฐ์ด ๊ตฌ์ฑ์ ํ๊ณ ๋๋ฉด, ์๋ก ๋ค๋ฅธ LAN ์ ์์นํ ์ปจํ ์ด๋๋ค์ด ์๋ก ํต์ ์ ํ ์ ์๊ฒ ๋๋ค.
DNS :
๋ค์์ผ๋ก ํด๋ณผ ๊ฒ์ dns ์๋ฒ๋ฅผ ๊ตฌ์ฑํ์ฌ docker exec red ping green
์ฒ๋ผ green ip๋ฅผ ํตํด ํต์ ์ ํ๋ ๊ฒ์ด ์๋, domain ์ด๋ฆ์ ์ฌ์ฉํด์ ํต์ ์ ํ๋ ค๊ณ ํ๋ค.
dns์ ๋ํ ์ค๋ช
์ ์ฌ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
red -> green ์ผ๋ก ์์ฒญ์ ๋ณด๋ผ ๋, red ๋ green์ด๋ ๋๋ฉ์ธ์ ip๋ก ๋ฐ๊พธ๊ธฐ ์ํด /etc/hosts ํ์ผ์ ์ฐธ์กฐํ์ฌ ip๋ก ๋ณํํ๋ ์์ ์ ์ํํ ๊ฒ์ด๋ค. ํ์ง๋ง, red๋ green์ ํด์ํ ์ ์์ด, ping ์์ฒญ์ ์คํจํ ๊ฒ์ด๋ค.
red container์ /etc/hosts ํ์ผ์ green 172.29.0.2 ๋ฅผ ์ ๊ณ , ping ์์ฒญ์ ํ๋ฉด ์ฑ๊ณต์ ์ผ๋ก ์๋ต์ด ๋จ์ด์ง๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ํ์ง๋ง, ์ฐ๋ฆฌ๊ฐ ํต์ ํด์ผ ๋๋ ip ๋ค์ด ๋ง์์ง๊ฒ ๋๋ฉด, ๊ด๋ฆฌํ๊ธฐ๊ฐ ํ๋ค๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ค์์์ ์ ์ดํด์ฃผ๋ ์๋ฒ๋ฅผ dns server๋ผ๊ณ ํ๋ค.
dns server์ ์ญํ ์ ๋๋ฉ์ธ์ ip๋ก ๋ณํํด์ฃผ๊ฑฐ๋, ip๋ฅผ ๋๋ฉ์ธ์ผ๋ก ๋ณํ(PTR), ์บ์ฑ, ๋ถํ ๋ถ์ฐ, ๋ณด์, ๋๋ฉ์ธ๊ด๋ฆฌ๋ฑ์ด ์๋ค. ๋๋ฉ์ธ์ ip๋ก ๋ณํํด์ฃผ๋ ๊ฐ๋จํ dns server๋ฅผ ์์ฑํ๋ ์ค์ต์ ํด๋ณด๊ณ ์ ํ๋ค.
|
|
|
|
dns ์๋ฒ ์ค์ ํ์ผ์ ๊ฐ๊ฐ์ ํธ์คํธ๊ฐ ์ด๋ค ip๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ์ ์ํ๊ณ dns-server๋ฅผ ์คํ์์ผ์ค ํ ๊ธฐ์กด์ ์ด์์ค์ธ red,green,blue,orange ์ dns_server ip๋ฅผ ์ ์ฉ์ํค๊ธฐ ์ํด ๋ชจ๋ ์ค์งํ๊ณ ์ฌ์คํ ์์ผ์คฌ๋ค.
์์ ๊ฐ์ด ๊ตฌ์ฑ์ ํ๊ฒ ๋๋ฉด, ์๋ก ๋ค๋ฅธ LAN ์ ์ํด์๋ red->green, green->blue .. ๋ก ์์ฒญ์ ๋ณด๋ผ ๋ ip๋ฅผ ์ฐ์ง์๊ณ ๋๋ฉ์ธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ๋ณด๋ด๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
docker exec red traceroute green
๋ช
๋ น์ ํธ์ถํ ๋, ์ ๋ง๋ก dns server ์์ ์๋ต์ ๋ฐ๋์ง ํ์ธํ๊ธฐ ์ํด, tcpdump
ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ, dns ์ฟผ๋ฆฌ๋ฅผ ์บก์ณํด๋ณด์.
|
|
์์ ๊ฐ์ด 53๋ฒ port๋ก ๋ฆฌ์ค๋ํ๊ณ ์๋ ์๋ฒ๋ฅผ ๊ทธ๋๋ก ๋๊ณ , ์๋ก์ด ํญ์ ์ด์ด `docker exec red traceroute green` ํ๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ด dns server๋ก ๋ถํฐ ์ ์ ํ ์๋ต์ ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
- AAAA ๋ฐ A ์ฟผ๋ฆฌ: red ์ปจํ ์ด๋๊ฐ green์ IP ์ฃผ์๋ฅผ ์ป๊ธฐ ์ํด DNS ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋.
- ์๋ต: DNS ์๋ฒ๊ฐ IPv4 ์ฃผ์์ ๋ํด์๋ง ์๋ต์ ์ ๊ณตํ๊ณ , IPv6 ์ฃผ์์ ๋ํด์๋ ์๋ตํ์ง ์์.
- PTR ์ฟผ๋ฆฌ: IP ์ฃผ์๋ก๋ถํฐ ํธ์คํธ ์ด๋ฆ์ ์ป๊ธฐ ์ํ ์์ฒญ์ด ์์์ผ๋, ์ ์ ํ ์๋ต์ ๋ฐ์ง ๋ชปํจ (NXDomain).
- ๋ก์ปฌํธ์คํธ DNS ์บ์: 127.0.0.11๋ ๋์ปค ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ก์ปฌ DNS ์บ์ ์ฃผ์๋ก, ์ปจํ ์ด๋ ๋ด๋ถ์ DNS ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๋ด๋น.