NAT (Network Address Translation)

NAT์€ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋‹ค.

NAT ์ž์ฒด๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ์„œ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ธฐ๋ณธ์ ์ธ ์—ญํ• ์€ ๊ฐœ๋ณ„ ์žฅ์น˜๋“ค์ด ์™ธ๋ถ€ ์ธํ„ฐ๋„ท๊ณผ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ ์ค‘๊ณ„๊ธฐ๋‹ค.

๊ฐ€์ •์šฉ ํ™˜๊ฒฝ์„ ์ƒ๊ฐํ•ด๋ณด์ž.
Public ์ธํ„ฐ๋„ท๊ณผ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹น์—ฐํžˆ Public IP๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ๊ฐœ๋ณ„ ์žฅ์น˜๋“ค์€ ๊ณต์œ ๊ธฐ๊ฐ€ ํ• ๋‹นํ•œ ๋‚ด๋ถ€ IP๋ฅผ ๊ฐ–๊ณ ์žˆ์„๋ฟ, Public IP๋ฅผ ๊ฐ–๊ณ ์žˆ์ง„ ๋ชปํ•œ๋‹ค. ๊ณต์œ ๊ธฐ๊ฐ€ ํ•˜๋‚˜์˜ Public IP๋ฅผ ๊ฐ–๊ณ  ์žˆ์„ ๋ฟ์ด๋‹ค.

๊ทธ๋ž˜์„œ ๊ณต์œ ๊ธฐ๊ฐ€ ๊ฐœ๋ณ„ ์žฅ์น˜๋“ค์˜ ์š”์ฒญ์„ ๋ชจ์•„์„œ ์™ธ๋ถ€ ์ธํ„ฐ๋„ท๊ณผ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ผ์ข…์˜ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ ๋ ˆ์ด์–ด๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด๊ณ , ์ด๊ฒŒ ๋ฐ”๋กœ NAT์ธ ์…ˆ์ด๋‹ค.




์ƒ์„ธ

NAT์€ ๊ธฐ๋ณธ์ ์œผ๋กœ IP ๋ ˆ๋ฒจ์—์„œ ํŒจํ‚ท์„ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋•Œ๋ฌธ์— L3 ๊ณ„์ธต ๋ ˆ์ด์–ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ณต์œ ๊ธฐ๋ฅผ ์“ฐ๋Š” ์ผ๋ฐ˜์ ์ธ ๊ฐ€์ •์šฉ ํ™˜๊ฒฝ์ด๋ผ๋ฉด NAT์˜ ์—ญํ• ์€ ๋ผ์šฐํ„ฐ, ์ฆ‰ ๊ณต์œ ๊ธฐ๊ฐ€ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๊ณต์œ ๊ธฐ๊ฐ€ ํ˜ผ์ž ๋ชธ๋นตํ•˜๋ฉด์„œ ์‹ค์ œ ์™ธ๋ถ€ ์ธํ„ฐ๋„ท๊ณผ์˜ ํ†ต์‹ ์„ ๋Œ€์‹  ๋งก์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ณต์œ ๊ธฐ์˜ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์— ๋”ฐ๋ผ ์ „์ฒด์ ์ธ ๋„คํŠธ์›Œํฌ ์ฒ˜๋ฆฌ๋Ÿ‰์ด๋‚˜ ์†๋„๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ๋„ ๋‹ค ์ด ๋•Œ๋ฌธ์ด๋‹ค.

NAT์—๋„ ๋ฐฉ์‹์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๊ฒƒ์€ PAT(Port Address Translation)์ด๋‹ค.
์ด๊ฑด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ๋ณ€ํ™˜ํ•œ๋‹ค.


  1. ๋‚ด ์žฅ๋น„(192.168.0.222)์—์„œ naver.com์œผ๋กœ HTTP ์š”์ฒญ

  2. ๊ณต์œ ๊ธฐ๊ฐ€ NAT Table์— 192.168.0.222์— ๋žœ๋ค ํฌํŠธ๋กœ NAT ํ…Œ์ด๋ธ”์„ ๊ธฐ๋กํ•œ๋‹ค. (์˜ˆ: 192.168.0.222:44444 => ๊ณต์œ ๊ธฐIP:33333)

  3. ๊ณต์œ ๊ธฐ๊ฐ€ HTTP ์š”์ฒญ์„ ๋Œ€์‹  ์ „์†กํ•œ๋‹ค. (๊ณต์œ ๊ธฐIP:33333 => naver.com)

  4. HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์˜ฌ ๊ฒฝ์šฐ, ๊ณต์œ ๊ธฐ๋Š” NAT ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•ด์„œ ์—ญ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. (์˜ˆ: naver.com => 192.168.0.222:44444)

  5. ๋‚ด ์žฅ๋น„(192.168.0.222)์— naver.com์—์„œ ๋ณด๋‚ด์ค€ HTTP ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค.



ํฌํŠธ๋ฅผ ๋ถ™์—ฌ์„œ ํ†ต์‹ ์„ ์ค‘์žฌํ•˜๋Š” ์ด์œ ๋Š”, ํ•˜๋‚˜์˜ ๊ณต์œ ๊ธฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์žฅ๋น„๋ฅผ ๋งค๊ฐœํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์žฅ๋น„ ํ•˜๋‚˜๋‹น ํ•˜๋‚˜์˜ ํฌํŠธ๋ฅผ ๋ถ€์—ฌํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.




Cloud ํ™˜๊ฒฝ

AWS ๊ฐ™์€ Public Cloud ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ์—๋Š” NAT Gateway๋ผ๋Š” ์‹œ์Šคํ…œ์ด ๋ณ„๋„๋กœ ์กด์žฌํ•œ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ NAT(PAT)๊ณผ ๋™์ž‘ ๋ฐฉ์‹, ์›๋ฆฌ๊ฐ€ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

์ด๊ฑด private ๋ฆฌ์†Œ์Šค์—์„œ ์™ธ๋ถ€ ์ธํ„ฐ๋„ท ์ ‘๊ทผ์„ ์‹œ๋„ํ•  ๊ฒฝ์šฐ์— ํ•„์š”ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.
๋‹น์—ฐํžˆ public ์ธํ„ฐ๋„ท์— ์ ‘๊ทผํ•˜๋ ค๋ฉด public IP๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, private ๋ฆฌ์†Œ์Šค๋กœ ํ”„๋กœ๋น„์ €๋‹๋œ ๊ฒฝ์šฐ์—๋Š” public IP๊ฐ€ ์—†๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์™ธ๋ถ€ ํ†ต์‹ ์„ ์ค‘๊ณ„ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

ํด๋ผ์šฐ๋“œ์˜ NAT์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„์šฉ์ด ๊ฝค๋‚˜ ๋น„์‹ผ ํŽธ์ด๋‹ค. ๋ณดํ†ต ํŠธ๋ž˜ํ”ฝ๋‹น ๋น„์šฉ๊ณผ ํ”„๋กœ๋น„์ €๋‹ ๋น„์šฉ์„ ๋‘˜ ๋‹ค ๋œฏ๋Š”๋‹ค.




์šฉ๋„

NAT์˜ ์‹œ์ž‘์ ์€ ๊ทธ๋ƒฅ Public IP ํ•˜๋‚˜๋ฅผ ๋Œ๋ ค์จ์„œ IP ๋น„์šฉ์„ ์•„๋ผ๊ณ , ๊ฐœ๋ณ„ ์žฅ์น˜๋“ค์˜ ๋‚ด๋ถ€ IP ์ •๋ณด๋ฅผ ์€๋‹‰ํ•˜๋Š” ์ •๋„์˜€๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์šฉ๋„๋„ ๋‘๊ฐ์„ ๋“œ๋Ÿฌ๋‚ด๊ธฐ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ๋ฐ”๋กœ IP๋ฅผ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ผ๋ถ€ ์„œ๋“œํŒŒํ‹ฐ ์„œ๋น„์Šค๋“ค์€ ๋ฏธ๋ฆฌ "์•ˆ์ „ํ•œ" IP๋ฅผ ํ• ๋‹นํ•ด๋†“๊ณ  ๊ทธ IP๋ฅผ ํ†ตํ•ด์„œ ์š”์ฒญํ•ด์•ผ๋งŒ ๋™์ž‘ํ•˜๊ฒŒ๋” Ingress ๋ณด์•ˆ ๊ณ„์ธต์„ ๊ตฌ์„ฑํ•ด๋†“๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ฌผ์ง€ ์•Š๊ฒŒ ์žˆ๋‹ค. ํŠนํžˆ ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ๊ธˆ์œต ์ชฝ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋Œ€๋ถ€๋ถ„ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ ๊ฐ™๋”๋ผ.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๊ฐœ๋ณ„ ์„œ๋ฒ„๋“ค์ด Public IP๋ฅผ ๊ฐ–๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋”๋ผ๋„, ๊ณ ์ •๋œ IP๋ฅผ ํ†ตํ•ด์„œ ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋งŒ๋“ค์–ด์•ผ๋งŒ ํ•œ๋‹ค. NAT ํŒจํ„ด์€ ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.




์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ

์œ„ ๋‹จ๋ฝ๊ณผ ๊ฐ™์€ ์ด์œ ์—์„œ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์—์„œ๋„ NAT ํŒจํ„ด์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฑด ๋ฐฉ๋ฒ•์ด ์ข€ ๋‹ค์–‘ํ•œ๋ฐ, CNI๋ฅผ ์–ด๋–ค๊ฑธ ์“ฐ๋Š”์ง€์— ๋”ฐ๋ผ์„œ ์ข€ ๋‹ฌ๋ผ์ง„๋‹ค. ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์€ EgressGateway๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

CNI๋กœ cilium์ด๋‚˜ Calico๋ฅผ ์“ธ ๊ฒฝ์šฐ์—๋Š” EgressGateway๋ผ๋Š” ๊ฒƒ์„ ์ง€์›ํ•œ๋‹ค. ์ด๊ฑธ ์„ธํŒ…ํ•˜๋ฉด ์™ธ๋ถ€ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” IP๋ฅผ ๊ฐ€๋กœ์ฑ„์„œ ํŠน์ • IP๋กœ ๊ต์ฒดํ•ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ์€ Calico๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ ์˜ˆ์ œ๋‹ค.

apiVersion: projectcalico.org/v3
kind: EgressGateway
metadata:
    name: tosspayments-egress
    namespace: payment
spec:
    egressIP: 3.35.123.45 # ๊ณ ์ •ํ•  NAT IP
    selector: "app == 'payment-api'" # ์ด๊ฒƒ๊ณผ ์ผ์น˜ํ•˜๋Š” Pod์— Egress Gateway ์ ์šฉ
    replicas: 2
---
apiVersion: apps/v1
kind: Deployment
metadata:
    name: payment-api
    namespace: payment
spec:
    replicas: 10 # Pod ์ˆ˜ ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    template:
        metadata:
            labels:
                app: payment-api
        spec:
            containers:
                - name: api
                  image: payment-api:latest

์ด๋Ÿฌ๋ฉด ์ € payment-api๋ผ๋Š” Pod๋“ค์€ ์‹ค์ œ IP์™€ ๊ด€๋ จ์—†์ด egressIP๋ผ๋Š” IP๋กœ ๋ณ€ํ™˜๋˜์–ด์„œ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.



์ฐธ์กฐ
https://incodom.kr/NAT%28Network_Address_Translation%29
https://tech.kakaopay.com/post/cilium-egress-gateway/