Profile picture

[Linux] IP ํฌ์›Œ๋”ฉ(IP Forwarding), ์™œ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

JaehyoJJAng2024๋…„ 10์›” 02์ผ

๐Ÿšฆ IP ํฌ์›Œ๋”ฉ, ๋Œ€์ฒด ๋ฌด์—‡์ด๊ณ  ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

์‰ฝ๊ฒŒ ๋น„์œ ํ•˜๋ฉด, ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„๋ฅผ ๊ตํ†ต๊ฒฝ์ฐฐ(๐Ÿ‘ฎโ€โ™‚๏ธ)๋กœ ๋งŒ๋“œ๋Š” ๊ฒ๋‹ˆ๋‹ค.


๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž์‹ ์—๊ฒŒ ์˜จ ํŒจํ‚ท๋งŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๋ชฉ์ ์ง€ IP ์ฃผ์†Œ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์ด ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ๋ฒ„๋ ค๋ฒ„๋ฆฐ๋‹ค๋Š” ๋œป์ด์ฃ .


ํ•˜์ง€๋งŒ IP ํฌ์›Œ๋”ฉ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ด์•ผ๊ธฐ๋Š” ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.


์„œ๋ฒ„์— ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค(๋žœ์นด๋“œ)๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์žˆ์„ ๋•Œ,

ํ•œ์ชฝ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋“ค์–ด์˜จ ํŒจํ‚ท์˜ ๋ชฉ์ ์ง€๊ฐ€ ์ž์‹ ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญ์ด๋ผ๋ฉด? IP ํฌ์›Œ๋”ฉ์ด ์ผœ์ง„ ์„œ๋ฒ„๋Š” ๊ทธ ํŒจํ‚ท์„ ๋ฒ„๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๋ฒ„๋ฆฌ์ž ์•Š๊ณ  ์–ด๋–ป๊ฒŒ ํ•œ๋‹ค? "์•„ ์ด ํŒจํ‚ท์€ ์ €์ชฝ ๋„คํŠธ์›Œํฌ๋กœ ๊ฐ€์•ผ ํ•˜๋Š”๊ตฌ๋‚˜! ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๊ฒฝ๋กœ๋กœ ์ „๋‹ฌ(Forwarding)ํ•ด ์ค๋‹ˆ๋‹ค.


image


์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๋Œ€ํ‘œ์ ์ธ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ผ์šฐํ„ฐ(Router) ๋ฐ ๊ฒŒ์ดํŠธ์›จ์ด(Gateway) ๊ตฌ์ถ•

์˜ˆ๋ฅผ ๋“ค์–ด, ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋œ ๋žœ์นด๋“œ(eth0)์™€ ๋‚ด๋ถ€ ์‚ฌ์„ค๋ง์— ์—ฐ๊ฒฐ๋œ ๋žœ์นด๋“œ(eth1)๋ฅผ ๊ฐ€์ง„ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.

๋‚ด๋ถ€๋ง์˜ ์ปดํ“จํ„ฐ๋“ค์ด ์ธํ„ฐ๋„ท์— ์ ‘์†ํ•˜๋ ค๋ฉด, ์ด ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„๊ฐ€ ์ค‘๊ฐ„์—์„œ ํŒจํ‚ท์„ ์ „๋‹ฌํ•ด์ค˜์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ IP ํฌ์›Œ๋”ฉ์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.


VPN ์„œ๋ฒ„ ์šด์˜

L2TP/IPSec, OpenVPN, WireGuard ๊ฐ™์€ VPN ์„œ๋ฒ„๋Š” ์™ธ๋ถ€์—์„œ ์ ‘์†ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ํŠธ๋ž˜ํ”ฝ์„ ๋‚ด๋ถ€๋ง์ด๋‚˜ ์ธํ„ฐ๋„ท์œผ๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋ฐ˜๋“œ์‹œ IP ํฌ์›Œ๋”ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


๋ฐฉํ™”๋ฒฝ(Firewall) ๋ฐ NAT(Network Address Translation)

๋ฆฌ๋ˆ…์Šค๋ฅผ ๋ฐฉํ™”๋ฒฝ์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ, ๋‹จ์ˆœํžˆ ํŒจํ‚ท์„ ์ฐจ๋‹จ/ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŠน์ • ๊ทœ์น™์— ๋”ฐ๋ผ ํŒจํ‚ท์„ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์‚ฌ์„ค IP๋ฅผ ํ•˜๋‚˜์˜ ๊ณต์ธ IP๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” NAT ํ™˜๊ฒฝ์—์„œ๋Š” IP ํฌ์›Œ๋”ฉ์ด ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.


์ปจํ…Œ์ด๋„ˆ ๋ฐ ๊ฐ€์ƒํ™” (Docker, KVM)

๋„์ปค(Docker) ์ปจํ…Œ์ด๋„ˆ๋‚˜ ๊ฐ€์ƒ๋จธ์‹ (VM)์ด ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•ด์•ผ ํ•  ๋•Œ, ํ˜ธ์ŠคํŠธ ์šด์˜์ฒด์ œ์ธ ๋ฆฌ๋ˆ…์Šค๋Š” ์ด๋“ค์˜ ํŠธ๋ž˜ํ”ฝ์„ ๋ฌผ๋ฆฌ ๋„คํŠธ์›Œํฌ๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์—ญ์‹œ IP ํฌ์›Œ๋”ฉ์˜ ์ผ์ข…์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โš™๏ธ sysctl๊ณผ /etc/sysctl.d/ ํŒŒํ—ค์น˜๊ธฐ

IP ํฌ์›Œ๋”ฉ์„ ํฌํ•จํ•œ ๋ฆฌ๋ˆ…์Šค์˜ ์ˆ˜๋งŽ์€ ์ปค๋„ ๋™์ž‘ ๋ฐฉ์‹์€ ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ(Kernel Parameters) ๋ฅผ ํ†ตํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ๋ฐ”๋กœ sysctl์ž…๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ sysctl ๋ช…๋ น์–ด๋กœ ๋ณ€๊ฒฝํ•œ ์„ค์ •์€ ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ์ผํšŒ์„ฑ ์„ค์ •์ž…๋‹ˆ๋‹ค.

์„ค์ •์„ ์˜๊ตฌ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ๋ฐ”๋กœ ์„ค์ • ํŒŒ์ผ์— ๊ธฐ๋กํ•ด๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๊ณผ๊ฑฐ์—๋Š” ๋ชจ๋“  ์„ค์ •์„ /etc/sysctl.conf๋ผ๋Š” ๋‹จ์ผ ํŒŒ์ผ์— ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์š”์ฆ˜ ์‹œ์Šคํ…œ๋“ค์€ /etc/sysctl.d/ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


/etc/sysctl.d/ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ• ๊นŒ์š”?

์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ž‘๋™ ๋ฐฉ์‹์€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.


  • ๋ชจ๋“ˆํ™”๋œ ์„ค์ •: ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์‹œ ๋˜๋Š” sysctl ์ ์šฉ ๋ช…๋ น ์‹œ, ์‹œ์Šคํ…œ์€ /etc/sysctl.conf ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ /etc/sysctl.d/ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  .conf ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฆ„ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉ: ํŒŒ์ผ๋“ค์€ ์ด๋ฆ„ ์ˆœ์„œ(์•ŒํŒŒ๋ฒณ, ์ˆซ์ž ์ˆœ)๋Œ€๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 10-network.conf๊ฐ€ 99-custom.conf๋ณด๋‹ค ๋จผ์ € ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฎ์–ด์“ฐ๊ธฐ(Override): ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๋™์ผํ•œ ์„ค์ •์ด ์žˆ๋‹ค๋ฉด, ๋‚˜์ค‘์— ์ฝํžŒ ํŒŒ์ผ์˜ ์„ค์ •์ด ์ด์ „์— ์ฝํžŒ ์„ค์ •์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 10-network.conf์— net.ipv4.ip_forward = 0์ด ์žˆ๊ณ  99-custom.conf์— net.ipv4.ip_forward = 1์ด ์žˆ๋‹ค๋ฉด, ์ตœ์ข…์ ์œผ๋กœ๋Š” 1์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹ ๋•๋ถ„์— ์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ ์‹œ์Šคํ…œ ์„ค์ •์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ , 99-my-settings.conf ์™€ ๊ฐ™์€ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์›ํ•˜๋Š” ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๋•Œ๋„ ํ•ด๋‹น ํŒจํ‚ค์ง€์— ํ•„์š”ํ•œ ์ปค๋„ ์„ค์ •์ด 50-docker.conf์™€ ๊ฐ™์€ ํŒŒ์ผ๋กœ ๊น”๋”ํ•˜๊ฒŒ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์–ด ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ IP ํฌ์›Œ๋”ฉ ํ™œ์„ฑํ™” ๋ฐ ์ƒํƒœ ํ™•์ธํ•˜๊ธฐ

1๋‹จ๊ณ„: ํ˜„์žฌ IP ํฌ์›Œ๋”ฉ ์ƒํƒœ ํ™•์ธํ•˜๊ธฐ

๋จผ์ € ํ˜„์žฌ ์„ค์ •๊ฐ’์ด ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 0์€ ๋น„ํ™œ์„ฑํ™”, 1์€ ํ™œ์„ฑํ™” ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

# sysctl ๋ช…๋ น์–ด๋กœ ํ™•์ธ
sysctl net.ipv4.ip_forward

# /proc ํŒŒ์ผ์‹œ์Šคํ…œ์„ ์ง์ ‘ ์ฝ์–ด์„œ ํ™•์ธ
cat /proc/sys/net/ipv4/ip_forward

2๋‹จ๊ณ„: IP ํฌ์›Œ๋”ฉ ์˜๊ตฌ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜๊ธฐ

์žฌ๋ถ€ํŒ… ํ›„์—๋„ ์„ค์ •์ด ์œ ์ง€๋˜๋„๋ก /etc/sysctl.d/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์„ค์ • ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ด๋ฆ„ ์•ž์˜ 99๋Š” ๋‹ค๋ฅธ ๊ธฐ๋ณธ ์„ค์ •๋“ค๋ณด๋‹ค ๋‚˜์ค‘์— ์ ์šฉ๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ด€๋ก€์ž…๋‹ˆ๋‹ค.

# ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ(nano, vim ๋“ฑ)๋กœ ์ƒˆ ์„ค์ • ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค.
sudo nano /etc/sysctl.d/99-custom-forwarding.conf

ํŒŒ์ผ ์•ˆ์— ๋‹ค์Œ ๋‚ด์šฉ์„ ํ•œ ์ค„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

net.ipv4.ip_forward = 1

3๋‹จ๊ณ„: ๋ณ€๊ฒฝ๋œ ์„ค์ • ์ฆ‰์‹œ ์ ์šฉํ•˜๊ธฐ

๋ฐฉ๊ธˆ ๋งŒ๋“  ์„ค์ • ํŒŒ์ผ์„ ์‹œ์Šคํ…œ์— ๋ฐ”๋กœ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์žฌ๋ถ€ํŒ…ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

# ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  .conf ํŒŒ์ผ์„ ๋‹ค์‹œ ์ฝ์–ด ์ ์šฉ (๊ถŒ์žฅ ๋ฐฉ์‹)
sudo sysctl --system

# ๋˜๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋„ ๋™์ผํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
# sudo sysctl -p
    Tag -

Loading script...

ยฉ 2025, Built with Gatsby