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 ํฌ์๋)
โ
๋ฉ์๋ฅผ ํตํ ์ถ๊ตฌ ๋ผ์ฐํ
- ์ ์ฑ ๋ผ์ฐํ ์ด PPP ์๋ธ๋ท ํธ๋ํฝ์ ๋ผ์ฐํ ํ ์ด๋ธ๋ก ์ ๋ฌ
- ๋ผ์ฐํ
ํ
์ด๋ธ์ด ์ปค๋ TUN ๋๋ฐ์ด์ค (
hy2cap0)๋ฅผ ํตํด ํธ๋ํฝ ์ ์ก - gvisor netstack์ด TUN์์ ํจํท์ ์ฝ๊ณ TCP/UDP ์ฒ๋ฆฌ ์ ๊ณต
- 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 ์บก์ํ
- strongSwan์ด ๊ฐ ํฐ๋์ ๋ํด xfrm ์ธํฐํ์ด์ค ์์ฑ (
if_id_in/out = %unique) - **AF_PACKET (SOCK_RAW)**์ด xfrm ์ธํฐํ์ด์ค์์ ๋์บก์ํ๋ ํจํท ์บก์ฒ
PACKET_OUTGOINGํจํท์ ์บก์ฒ ๋ฃจํ ๋ฐฉ์ง๋ฅผ ์ํด ํํฐ๋ง- gvisor netstack์ด TCP/UDP๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ถ๊ตฌ ๋ผ์ฐํ ์ ์ฉ
- ์๋ต์ด xfrm ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ค์ ์ฃผ์ ๋์ด ESP ์บก์ํ
์ด ์ ๊ทผ๋ฒ์ ๋นํธ์คํธ ์ปจํ ์ด๋ ๋คํธ์ํฌ ๋ค์์คํ์ด์ค์์ ์ฐจ๋จ๋๋ FORWARD ์ฒด์ธ์ ์์ ํ ์ฐํํฉ๋๋ค.
MTU ์ค์
๋ผ์ฐํฐ ์์คํ ๋ฐฐํฌ๋ ESP ์ค๋ฒํค๋๋ฅผ ์์ฉํ๊ธฐ ์ํด ๋ฎ์ MTU ๊ฐ์ ์ฌ์ฉํฉ๋๋ค:
| ํ๋กํ ์ฝ | ํ์ค MTU | ๋ผ์ฐํฐ ์์คํ MTU |
|---|---|---|
| L2TP | 1280 | 1280 |
| IKEv2 | 1400 | 1300 |
๋ผ์ฐํฐ ์์คํ ์์์ IKEv2 MSCHAPv2
IKEv2 MSCHAPv2 ๋ชจ๋๋ ๋ผ์ฐํฐ ๋ด์ฅ IKEv2 ํด๋ผ์ด์ธํธ์ ํธํ๋ฉ๋๋ค:
- TLS ํ์ด์ง์์ CA ์ธ์ฆ์ ์ ๋ก๋
- MSCHAPv2 ๋ชจ๋๋ก IKEv2 ํ์ฑํ
- HY2 SCALE์ด CA๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ ์ธ์ฆ์ ์๋ ์๋ช
- ๋ผ์ฐํฐ์ IKEv2 ํด๋ผ์ด์ธํธ์ CA ์ธ์ฆ์์ ์ฌ์ฉ์ ์๊ฒฉ ์ฆ๋ช ์ค์
๋ฌธ์ ํด๊ฒฐ
VPN ์๋น์ค๊ฐ "Limited"๋ก ํ์
์ด๋ iptables๋ฅผ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ผ์ฐํฐ ์์คํ ์์๋ ์์๋๋ ๋์์ ๋๋ค โ ํธํ ๋ชจ๋๊ฐ VPN ํธ๋ํฝ์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. "Limited" ๋ฐฐ์ง๋ ํ์ค ๋ชจ๋ VPN ๊ธฐ๋ฅ์ด ๋ถ๊ฐํ์ง๋ง ํธํ ๋ชจ๋ ๋์ฒด ๊ธฐ๋ฅ์ด ํ์ฑํ๋์ด ์์์ ๋ํ๋ ๋๋ค.
L2TP/IKEv2๊ฐ ์๋ํ์ง ์์
- ๊ถํ ํ์ธ:
NET_ADMIN๊ณผNET_RAW๊ฐ ๋ชจ๋ ์ค์ ๋์๋์ง ํ์ธ - TUN ๋๋ฐ์ด์ค ํ์ธ:
--device /dev/net/tun์ด ์ ๋ฌ๋์๋์ง ํ์ธ - ๋๋ฒ๊ทธ ๋ชจ๋ (
DEBUG=true) ํ์ฑํ ํ ๋ก๊ทธ ํ์ธ:iptables available: falseโ ํธํ ๋ชจ๋ ํ์ฑํ ํ์ธ- TUN ๋๋ฐ์ด์ค ์์ฑ ๋ฉ์์ง
- xfrm ์ธํฐํ์ด์ค ์์ฑ ๋ฉ์์ง
LAN ํด๋ผ์ด์ธํธ์์ ์ฐ๊ฒฐ ๋ถ๊ฐ
๋ธ๋ฆฌ์ง ๋คํธ์ํฌ ๋ชจ๋ ์ฌ์ฉ ์ ํ์ธ:
- ์ปจํ ์ด๋์ Docker ๋คํธ์ํฌ์ ๊ณ ์ IP๊ฐ ์๋์ง
- ๋ผ์ฐํฐ์ Docker ๋คํธ์ํฌ๋ก์ ๋ผ์ฐํธ๊ฐ ์๋์ง
- 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 ์ปจํ ์ด๋๊ฐ ์ฌ์์๋์ง๋ง ๋คํธ์ํฌ ์ค์ ์ด ์์ค๋ ์ ์์ต๋๋ค. ํ์ธ ์ฌํญ:
- Docker ๋คํธ์ํฌ๊ฐ ์ฌ๋ฐ๋ฅธ ์๋ธ๋ท์ผ๋ก ์ฌ์์ฑ๋์๋์ง
- ์ปจํ
์ด๋๊ฐ
--restart unless-stopped๋ฅผ ์ฌ์ฉํ๋์ง - ๊ณ ์ IP๊ฐ Docker ๋คํธ์ํฌ ๋ฒ์ ๋ด์ ์๋์ง
์ฌ๋ถํ ํ ์ปจํ ์ด๋ ์์์ ์คํจํ๋ฉด, ์ค์ ์ ๋ณด์กดํ๊ธฐ ์ํด ๋์ผํ ๋ณผ๋ฅจ ๋ง์ดํธ๋ก ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์์ฑํ์ธ์.