์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- graphQL
- API
- CSS
- REACT
- useState
- Props
- Interface
- node.js
- SSR
- HTML
- tailwindcss
- nextJS
- hardhat
- typeScript
- bitcoin
- solidity
- evm
- concept
- CLASS
- middleware
- Ethereum
- express.js
- built in object
- blockchain
- error
- ์ถ
- web
- JavaScript
- ๊ธฐ์ค
- Redux
- Today
- Total
ReasonJun
Docker ํน์ ํฌํธ๋ง ์ธ๋ถ ์ ์์ด ์ ๋ ๋: iptables NAT ๋ฌดํ ๋ฃจํ ํด๊ฒฐ๊ธฐ ๋ณธ๋ฌธ
Docker ํน์ ํฌํธ๋ง ์ธ๋ถ ์ ์์ด ์ ๋ ๋: iptables NAT ๋ฌดํ ๋ฃจํ ํด๊ฒฐ๊ธฐ
ReasonJun 2025. 7. 5. 21:19๐จ ๋ฌธ์ ์ํฉ
Docker๋ก ์๋น์ค๋ฅผ ์ด์ํ๋ ์ค ๊ธฐ๋ฌํ ํ์์ ๋ฐ๊ฒฌํ๋ค:
- 43001, 43030 ํฌํธ: ์ธ๋ถ ์ ์ โ ์ ์
- 43000 ํฌํธ: ์ธ๋ถ ์ ์ โ ๋ถ๊ฐ๋ฅ
- localhost:43000: ๋ด๋ถ ์ ์ โ ์ ์
๋ ์ด์ํ ๊ฑด, Docker ์ปจํ ์ด๋๋ ์ ์ ์คํ ์ค์ด๊ณ , ํฌํธ๋ ์ ๋๋ก ๋ฆฌ์ค๋ํ๊ณ ์์๋ค๋ ์ ์ด๋ค.
๐ ์ง๋จ ๊ณผ์
1. ๊ธฐ๋ณธ ์ํ ํ์ธ
# ํฌํธ ๋ฆฌ์ค๋ ์ํ ํ์ธ
$ netstat -tuln | grep 43000
tcp6 0 0 :::43000 :::* LISTEN
# Docker ์ปจํ
์ด๋ ์ํ ํ์ธ
$ docker ps | grep 43000
8a5bce7ee59f aimfuse-web "docker-entrypoint.s…" Up 5 days (unhealthy) 0.0.0.0:43000->3000/tcp
# ๋ด๋ถ ์ ์ ํ
์คํธ
$ curl -v http://localhost:43000/api/public/health
< HTTP/1.1 200 OK
{"status":"ok"}
์ปจํ ์ด๋๋ unhealthy ์ํ์์ง๋ง, API๋ ์ ์ ์๋ตํ๋ค. ๐ค
2. ๋ฐฉํ๋ฒฝ ๊ท์น ํ์ธ
# UFW ์ํ ํ์ธ
$ sudo ufw status verbose
Status: active
Default: allow (incoming), allow (outgoing), allow (routed)
# iptables ํ์ธ
$ sudo iptables -L -n -v | grep 43000
# ํน๋ณํ ์ฐจ๋จ ๊ท์น ์์
UFW๋ ๊ธฐ๋ณธ ์ ์ฑ ์ด allow๋ผ์ ๋ฌธ์ ๊ฐ ์์ด ๋ณด์๋ค.
3. NAT ํ ์ด๋ธ ํ์ธ - ๋ฌธ์ ๋ฐ๊ฒฌ! ๐ฏ
$ sudo iptables -t nat -L -n -v --line-numbers | grep -A 10 -B 10 "43000\|3000"
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
2 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3000 redir ports 43000
3 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:43000 redir ports 3000
๐ก ๋ฌธ์ ์์ธ
NAT ํ ์ด๋ธ์์ ๋ฌดํ ๋ฃจํ๋ฅผ ๋ฐ๊ฒฌํ๋ค!
3000 ํฌํธ → 43000 ํฌํธ๋ก ๋ฆฌ๋ค์ด๋ ํธ
43000 ํฌํธ → 3000 ํฌํธ๋ก ๋ฆฌ๋ค์ด๋ ํธ
์ด ๋ ๊ท์น์ด ์๋ก๋ฅผ ๊ณ์ ํธ์ถํ๋ฉด์ ๋ฌดํ ๋ฃจํ์ ๋น ์ ธ, ๊ฒฐ๊ตญ 43000 ํฌํธ๋ก์ ์ธ๋ถ ์ ์์ด ๋ถ๊ฐ๋ฅํ๋ ๊ฒ์ด๋ค.
๐ง ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ฌธ์ ๊ฐ ๋๋ NAT ๊ท์น๋ค์ ์ ๊ฑฐํ๋ค:
# ๋ฌธ์ ๊ฐ ๋๋ ๊ท์น ์ ๊ฑฐ (๋ผ์ธ ๋ฒํธ ํ์ธ ํ)
$ sudo iptables -t nat -D PREROUTING 3
$ sudo iptables -t nat -D PREROUTING 2
# ๋ณ๊ฒฝ์ฌํญ ํ์ธ
$ sudo iptables -t nat -L -n -v | grep -A 5 -B 5 "43000\|3000"
# ์ด์ Docker์ ์ ์์ ์ธ DNAT ๊ท์น๋ง ๋จ์
โ ๊ฒฐ๊ณผ
- ์ ๊ฑฐ๋ ๊ท์น: ๋ฌดํ ๋ฃจํ๋ฅผ ๋ง๋๋ REDIRECT ๊ท์น๋ค
- ์ ์ง๋ ๊ท์น: Docker์ ์ ์์ ์ธ ํฌํธ ํฌ์๋ฉ (43000 → 172.20.0.6:3000)
- ์ธ๋ถ ์ ์: ์ ์ํ! ๐
๐ ๊ตํ๊ณผ ์ฒดํฌ๋ฆฌ์คํธ
์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ์๊น?
์๋ง๋ ๊ณผ๊ฑฐ์ ํฌํธ ๋ฆฌ๋ค์ด๋ ์ ์ ํ ์คํธํ๋ค๊ฐ ์๋ชป๋ ๊ท์น์ ์ถ๊ฐํ๊ณ , ์ด๋ฅผ ์ ๊ฑฐํ์ง ์์๋ ๊ฒ ๊ฐ๋ค.
ํฅํ ๋ฐฉ์ง๋ฅผ ์ํ ์ฒดํฌ๋ฆฌ์คํธ
- ํฌํธ ๋ฌธ์ ๋ฐ์ ์ ์ ๊ฒ ์์:
# 1. ํฌํธ ๋ฆฌ์ค๋ ํ์ธ netstat -tuln | grep [ํฌํธ๋ฒํธ]
# 2. Docker ์ํ ํ์ธ docker ps | grep [ํฌํธ๋ฒํธ]
# 3. ๋ด๋ถ ์ ์ ํ ์คํธ curl -v http://localhost:[ํฌํธ๋ฒํธ]
# 4. iptables ์ผ๋ฐ ๊ท์น ํ์ธ sudo iptables -L -n -v | grep [ํฌํธ๋ฒํธ]
# 5. NAT ํ ์ด๋ธ ํ์ธ โ ๏ธ ์ค์! sudo iptables -t nat -L -n -v | grep [ํฌํธ๋ฒํธ] - iptables ๊ท์น ์ถ๊ฐ ์ ์ฃผ์์ฌํญ:
- NAT ๊ท์น ์ถ๊ฐ ์ ๊ธฐ์กด ๊ท์น ํ์ธ
- ํ ์คํธ ํ ๋ถํ์ํ ๊ท์น์ ์ฆ์ ์ ๊ฑฐ
- ๊ท์น ์ถ๊ฐ ์ ๋ฌธ์ํ ๋๋ ์ฃผ์ ๋จ๊ธฐ๊ธฐ
- ์ ๊ธฐ์ ์ธ ์ ๊ฒ:
- # NAT ํ ์ด๋ธ ์ ์ฒด ํ์ธ sudo iptables -t nat -L -n -v --line-numbers
๐ฏ ํต์ฌ ์ ๋ฆฌ
"ํน์ ํฌํธ๋ง ์ธ๋ถ ์ ์์ด ์ ๋๋ค๋ฉด, iptables NAT ํ ์ด๋ธ์ ํ์ธํ์!"
์ผ๋ฐ์ ์ธ ๋ฐฉํ๋ฒฝ ๊ท์น๋ฟ๋ง ์๋๋ผ NAT ํ ์ด๋ธ์ REDIRECT ๊ท์น๋ ๋ฐ๋์ ํ์ธํด์ผ ํ๋ค. ํนํ ๋ฌดํ ๋ฃจํ๋ฅผ ๋ง๋ค ์ ์๋ ์ํธ ์ฐธ์กฐ ๊ท์น์ด ์๋์ง ์ฃผ์ ๊น๊ฒ ์ดํด๋ณด์.
์ด๋ฒ ๊ฒฝํ์ ํตํด ๋คํธ์ํฌ ๋ฌธ์ ํด๊ฒฐ ์ NAT ํ ์ด๋ธ ํ์ธ์ ์ค์์ฑ์ ๋ค์ ํ๋ฒ ๊นจ๋ฌ์๋ค. ๊ฐ์ ์ค์๋ฅผ ๋ฐ๋ณตํ์ง ์๊ธฐ ์ํด ์ด ๊ธ์ ๊ธฐ๋ก์ผ๋ก ๋จ๊ธด๋ค. ๐