Router Systems ko - FrankoonG/hy2scale GitHub Wiki

๐ŸŒ English | ไธญๆ–‡ | ํ•œ๊ตญ์–ด

๋ผ์šฐํ„ฐ ์‹œ์Šคํ…œ

HY2 SCALE์€ Docker๋ฅผ ์ง€์›ํ•˜๋Š” ๋ผ์šฐํ„ฐ ์‹œ์Šคํ…œ์—์„œ์˜ ์‹คํ–‰์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ๋˜๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋œ Linux ์ปค๋„์„ ์‚ฌ์šฉํ•˜๋Š” ์žฅ์น˜์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ™˜๊ฒฝ์€ ๋น„ํ‘œ์ค€ netfilter ๋ชจ๋“ˆ์ด๋‚˜ ์ œํ•œ๋œ iptables๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, HY2 SCALE์ด ํ˜ธํ™˜ ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ผ์šฐํ„ฐ ์‹œ์Šคํ…œ์—์„œ์˜ ๋ฐฐํฌ

๊ถŒ์žฅ: ๋น„ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ

docker run -d --name hy2scale \
  --network hy2net --ip 192.168.10.4 \
  --cap-add NET_ADMIN --cap-add NET_RAW \
  --device /dev/net/tun \
  -v /path/to/data:/data \
  hy2scale:latest

์ฐธ๊ณ : --privileged๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. NET_ADMIN + NET_RAW ๊ถŒํ•œ์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ Linux์™€์˜ ์ฐจ์ด์ 

ํ•ญ๋ชฉ ํ‘œ์ค€ Linux ๋ผ์šฐํ„ฐ ์‹œ์Šคํ…œ
๋„คํŠธ์›Œํฌ ๋ชจ๋“œ --network host ๊ณ ์ • IP์˜ ๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ
iptables ์ •์ƒ ์ž‘๋™ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ (์ปค์Šคํ…€ ์ปค๋„ ๋ชจ๋“ˆ)
L2TP ๋ชจ๋“œ iptables DNAT TUN ์บก์ฒ˜ + gvisor netstack
IKEv2 ๋ชจ๋“œ iptables DNAT xfrm ๋ธŒ๋ฆฌ์ง€ + AF_PACKET
๋ผ์šฐํŒ… ๊ทœ์น™ iptables DNAT ์‚ฌ์šฉ ๋ถˆ๊ฐ€
๊ถŒํ•œ NET_ADMIN NET_ADMIN + NET_RAW
TUN ๋””๋ฐ”์ด์Šค ์ž๋™ ์ƒ์„ฑ --device /dev/net/tun ํ•„์š”

ํ˜ธํ™˜ ๋ชจ๋“œ ์ž‘๋™ ๋ฐฉ์‹

์ž๋™ ๊ฐ์ง€

HY2 SCALE์€ testIptablesAvailable()์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œํ•œ๋œ ํ™˜๊ฒฝ์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค:

testIptablesAvailable()
โ”œโ”€โ”€ true  โ†’ ํ‘œ์ค€ ๊ฒฝ๋กœ (iptables DNAT + ํˆฌ๋ช… ํ”„๋ก์‹œ)
โ””โ”€โ”€ false โ†’ ํ˜ธํ™˜ ๊ฒฝ๋กœ (TUN/xfrm + gvisor netstack)

์ด ํ•จ์ˆ˜๋Š” iptables-legacy -t nat -L -n์ด ์„ฑ๊ณตํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ์ปค๋„์„ ๊ฐ€์ง„ ๋ผ์šฐํ„ฐ ์‹œ์Šคํ…œ์—์„œ๋Š” ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ปค๋„์— ํ‘œ์ค€ iptables๊ฐ€ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋…์ž์  netfilter ํƒ€๊ฒŸ์ด ํฌํ•จ๋จ
  • ํ‘œ์ค€ iptables ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ด๋Ÿฌํ•œ ์ปค์Šคํ…€ ํƒ€๊ฒŸ์„ ํŒŒ์‹ฑํ•  ์ˆ˜ ์—†์Œ

์„ค์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” ํ˜ธํ™˜ ๋ชจ๋“œ๋Š” ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ Linux์—์„œ๋Š” ํ˜ธํ™˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

L2TP ํ˜ธํ™˜ ๋ชจ๋“œ

ํ‘œ์ค€ L2TP๋Š” iptables๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PPP ํŠธ๋ž˜ํ”ฝ์„ ํˆฌ๋ช… ํ”„๋ก์‹œ๋กœ DNATํ•ฉ๋‹ˆ๋‹ค. ํ˜ธํ™˜ ๋ชจ๋“œ์—์„œ๋Š” ๋‹ค์Œ์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค:

PPP ํด๋ผ์ด์–ธํŠธ
  โ†“ (L2TP/IPsec ํ„ฐ๋„)
xl2tpd + pppd (ํ’€์—์„œ IP ํ• ๋‹น)
  โ†“
์ •์ฑ… ๋ผ์šฐํŒ…: ip rule from 192.168.25.0/24 lookup TABLE_Y
  โ†“
์ปค๋„ TUN ์ธํ„ฐํŽ˜์ด์Šค (hy2cap0)
  โ†“
gvisor netstack (TCP/UDP ํฌ์›Œ๋”)
  โ†“
๋ฉ”์‹œ๋ฅผ ํ†ตํ•œ ์ถœ๊ตฌ ๋ผ์šฐํŒ…
  1. ์ •์ฑ… ๋ผ์šฐํŒ…์ด PPP ์„œ๋ธŒ๋„ท ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”๋กœ ์ „๋‹ฌ
  2. ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์ด ์ปค๋„ TUN ๋””๋ฐ”์ด์Šค (hy2cap0)๋ฅผ ํ†ตํ•ด ํŠธ๋ž˜ํ”ฝ ์ „์†ก
  3. gvisor netstack์ด TUN์—์„œ ํŒจํ‚ท์„ ์ฝ๊ณ  TCP/UDP ์ฒ˜๋ฆฌ ์ œ๊ณต
  4. TCP/UDP ํฌ์›Œ๋”๊ฐ€ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉ์ž์— ๋งคํ•‘ํ•˜๊ณ  ์ถœ๊ตฌ ๋ผ์šฐํŒ… ์ ์šฉ

IKEv2 ํ˜ธํ™˜ ๋ชจ๋“œ

ํ‘œ์ค€ IKEv2๋Š” iptables๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ xfrm ์ธํ„ฐํŽ˜์ด์Šค ํŠธ๋ž˜ํ”ฝ์„ DNATํ•ฉ๋‹ˆ๋‹ค. ํ˜ธํ™˜ ๋ชจ๋“œ์—์„œ๋Š” ๋‹ค์Œ์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค:

IKEv2 ํด๋ผ์ด์–ธํŠธ
  โ†“ (IKE + ESP ํ„ฐ๋„, UDP 500+4500)
strongSwan (xfrm ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ: ikec0, ikec1, ...)
  โ†“
AF_PACKET raw ์†Œ์ผ“์ด ๋””์บก์Аํ™”๋œ ํŒจํ‚ท ์บก์ฒ˜
  โ†“ (PACKET_OUTGOING ํ•„ํ„ฐ๋ง์œผ๋กœ ๋ฃจํ”„ ๋ฐฉ์ง€)
gvisor netstack (TCP/UDP ํฌ์›Œ๋”)
  โ†“
๋ฉ”์‹œ๋ฅผ ํ†ตํ•œ ์ถœ๊ตฌ ๋ผ์šฐํŒ…
  โ†“
์‘๋‹ต: raw IP ์†Œ์ผ“ โ†’ xfrm ์ธํ„ฐํŽ˜์ด์Šค โ†’ ์ปค๋„ ESP ์บก์Аํ™”
  1. strongSwan์ด ๊ฐ ํ„ฐ๋„์— ๋Œ€ํ•ด xfrm ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ (if_id_in/out = %unique)
  2. **AF_PACKET (SOCK_RAW)**์ด xfrm ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋””์บก์Аํ™”๋œ ํŒจํ‚ท ์บก์ฒ˜
  3. PACKET_OUTGOING ํŒจํ‚ท์€ ์บก์ฒ˜ ๋ฃจํ”„ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ํ•„ํ„ฐ๋ง
  4. gvisor netstack์ด TCP/UDP๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ถœ๊ตฌ ๋ผ์šฐํŒ… ์ ์šฉ
  5. ์‘๋‹ต์ด xfrm ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ์ฃผ์ž…๋˜์–ด ESP ์บก์Аํ™”

์ด ์ ‘๊ทผ๋ฒ•์€ ๋น„ํ˜ธ์ŠคํŠธ ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ฐจ๋‹จ๋˜๋Š” FORWARD ์ฒด์ธ์„ ์™„์ „ํžˆ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค.

MTU ์„ค์ •

๋ผ์šฐํ„ฐ ์‹œ์Šคํ…œ ๋ฐฐํฌ๋Š” ESP ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‚ฎ์€ MTU ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

ํ”„๋กœํ† ์ฝœ ํ‘œ์ค€ MTU ๋ผ์šฐํ„ฐ ์‹œ์Šคํ…œ MTU
L2TP 1280 1280
IKEv2 1400 1300

๋ผ์šฐํ„ฐ ์‹œ์Šคํ…œ์—์„œ์˜ IKEv2 MSCHAPv2

IKEv2 MSCHAPv2 ๋ชจ๋“œ๋Š” ๋ผ์šฐํ„ฐ ๋‚ด์žฅ IKEv2 ํด๋ผ์ด์–ธํŠธ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค:

  1. TLS ํŽ˜์ด์ง€์—์„œ CA ์ธ์ฆ์„œ ์—…๋กœ๋“œ
  2. MSCHAPv2 ๋ชจ๋“œ๋กœ IKEv2 ํ™œ์„ฑํ™”
  3. HY2 SCALE์ด CA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์ฆ์„œ ์ž๋™ ์„œ๋ช…
  4. ๋ผ์šฐํ„ฐ์˜ IKEv2 ํด๋ผ์ด์–ธํŠธ์— CA ์ธ์ฆ์„œ์™€ ์‚ฌ์šฉ์ž ์ž๊ฒฉ ์ฆ๋ช… ์„ค์ •

๋ฌธ์ œ ํ•ด๊ฒฐ

VPN ์„œ๋น„์Šค๊ฐ€ "Limited"๋กœ ํ‘œ์‹œ

์ด๋Š” iptables๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ผ์šฐํ„ฐ ์‹œ์Šคํ…œ์—์„œ๋Š” ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค โ€” ํ˜ธํ™˜ ๋ชจ๋“œ๊ฐ€ VPN ํŠธ๋ž˜ํ”ฝ์„ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. "Limited" ๋ฐฐ์ง€๋Š” ํ‘œ์ค€ ๋ชจ๋“œ VPN ๊ธฐ๋Šฅ์ด ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ ํ˜ธํ™˜ ๋ชจ๋“œ ๋Œ€์ฒด ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

L2TP/IKEv2๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

  1. ๊ถŒํ•œ ํ™•์ธ: NET_ADMIN๊ณผ NET_RAW๊ฐ€ ๋ชจ๋‘ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
  2. TUN ๋””๋ฐ”์ด์Šค ํ™•์ธ: --device /dev/net/tun์ด ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
  3. ๋””๋ฒ„๊ทธ ๋ชจ๋“œ (DEBUG=true) ํ™œ์„ฑํ™” ํ›„ ๋กœ๊ทธ ํ™•์ธ:
    • iptables available: false โ€” ํ˜ธํ™˜ ๋ชจ๋“œ ํ™œ์„ฑํ™” ํ™•์ธ
    • TUN ๋””๋ฐ”์ด์Šค ์ƒ์„ฑ ๋ฉ”์‹œ์ง€
    • xfrm ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ ๋ฉ”์‹œ์ง€

LAN ํด๋ผ์ด์–ธํŠธ์—์„œ ์—ฐ๊ฒฐ ๋ถˆ๊ฐ€

๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ ์‚ฌ์šฉ ์‹œ ํ™•์ธ:

  1. ์ปจํ…Œ์ด๋„ˆ์— Docker ๋„คํŠธ์›Œํฌ์˜ ๊ณ ์ • IP๊ฐ€ ์žˆ๋Š”์ง€
  2. ๋ผ์šฐํ„ฐ์— Docker ๋„คํŠธ์›Œํฌ๋กœ์˜ ๋ผ์šฐํŠธ๊ฐ€ ์žˆ๋Š”์ง€
  3. VPN ํฌํŠธ (500, 4500, 1701)์— ๋Œ€ํ•œ ํฌํŠธ ํฌ์›Œ๋”ฉ์ด ์„ค์ •๋˜์—ˆ๋Š”์ง€

๋””๋ฒ„๊ทธ ๋กœ๊น…

docker run -d --name hy2scale \
  -e DEBUG=true \
  --network hy2net --ip 192.168.10.4 \
  --cap-add NET_ADMIN --cap-add NET_RAW \
  --device /dev/net/tun \
  -v /path/to/data:/data \
  hy2scale:latest

๋””๋ฒ„๊ทธ ๋ชจ๋“œ ๋กœ๊ทธ:

  • iptables ๊ฐ์ง€ ๊ฒฐ๊ณผ
  • ๊ถŒํ•œ ๋ฐ ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ ํ™•์ธ
  • TUN ๋””๋ฐ”์ด์Šค ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ž‘์—…
  • AF_PACKET ํŒจํ‚ท ์บก์ฒ˜
  • gvisor netstack ํฌ์›Œ๋” ์—ฐ๊ฒฐ
  • ์ •์ฑ… ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ” ์„ค์ •

๋ผ์šฐํ„ฐ ์žฌ๋ถ€ํŒ… ํ›„ ๋ณต๊ตฌ

๋ผ์šฐํ„ฐ ์žฌ๋ถ€ํŒ… ํ›„ Docker ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žฌ์‹œ์ž‘๋˜์ง€๋งŒ ๋„คํŠธ์›Œํฌ ์„ค์ •์ด ์†์‹ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ ์‚ฌํ•ญ:

  1. Docker ๋„คํŠธ์›Œํฌ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์„œ๋ธŒ๋„ท์œผ๋กœ ์žฌ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€
  2. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ --restart unless-stopped๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€
  3. ๊ณ ์ • IP๊ฐ€ Docker ๋„คํŠธ์›Œํฌ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š”์ง€

์žฌ๋ถ€ํŒ… ํ›„ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘์— ์‹คํŒจํ•˜๋ฉด, ์„ค์ •์„ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์ƒ์„ฑํ•˜์„ธ์š”.