Skip to content
isdnetworks
Go back

Docker host ๋ชจ๋“œ์—์„œ VPN ํŠธ๋ž˜ํ”ฝ์ด ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

Docker์—์„œ hwdsl2/ipsec-vpn-server๋ฅผ --network host ๋ชจ๋“œ๋กœ ์šด์˜ํ•  ๋•Œ, VPN ์—ฐ๊ฒฐ์€ ์„ฑ๊ณตํ•˜์ง€๋งŒ ์ธํ„ฐ๋„ท์ด๋‚˜ LAN์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋‹ค. outBytes=0์ด ๊ณ„์†๋˜๋Š” ์ƒํ™ฉ์ด์—ˆ๋‹ค.

Table of contents

Open Table of contents

์ฆ์ƒ

# VPN ์ƒํƒœ ํ™•์ธ
docker exec ipsec-vpn-server ipsec whack --trafficstatus
# ๊ฒฐ๊ณผ: outBytes=0 โ€” ํŠธ๋ž˜ํ”ฝ์ด ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ

์›์ธ ๋ถ„์„

FORWARD ์ฒด์ธ ์ถ”์ 

iptables ๊ทœ์น™์„ ํ•˜๋‚˜์”ฉ ์ถ”์ ํ–ˆ๋‹ค.

# FORWARD ์ฒด์ธ ํ™•์ธ
iptables -L FORWARD -v -n
# ํŒจํ‚ท ๋งค์นญ์€ ๋˜์ง€๋งŒ ์ตœ์ข… MASQUERADE๊นŒ์ง€ ๋„๋‹ฌํ•˜์ง€ ์•Š์Œ

# POSTROUTING ํ™•์ธ
iptables -t nat -L POSTROUTING -v -n
# MASQUERADE ๊ทœ์น™์€ ์กด์žฌํ•˜์ง€๋งŒ ์นด์šดํ„ฐ๊ฐ€ 0

FORWARD ์ฒด์ธ์—์„œ ํŒจํ‚ท์ด ๋งค์นญ์€ ๋˜์ง€๋งŒ ์–ด๋”˜๊ฐ€์—์„œ DROP๋˜๊ณ  ์žˆ์—ˆ๋‹ค.

ํ•ต์‹ฌ ์›์ธ: Docker์˜ nftables FORWARD ์ •์ฑ…

Docker๋Š” ์ž์ฒด ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด nftables ๊ธฐ๋ฐ˜ FORWARD ์ฒด์ธ์„ ์‚ฌ์šฉํ•œ๋‹ค. --network host ๋ชจ๋“œ์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ iptables ๊ทœ์น™์€ ํ˜ธ์ŠคํŠธ์™€ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๊ณต์œ ๋˜๋Š”๋ฐ, Docker๊ฐ€ ์„ค์ •ํ•œ FORWARD ์ฒด์ธ์˜ ๊ธฐ๋ณธ ์ •์ฑ…์ด drop์ด๋‹ค.

# nftables ๊ธฐ๋ฐ˜ iptables ํ™•์ธ
iptables-nft -L FORWARD -v -n
# policy DROP โ€” Docker๊ฐ€ ์„ค์ •ํ•œ ๊ธฐ๋ณธ ์ •์ฑ…

VPN ์„œ๋ฒ„๊ฐ€ ์ถ”๊ฐ€ํ•œ FORWARD ACCEPT ๊ทœ์น™์€ iptables-legacy์— ์ถ”๊ฐ€๋˜์ง€๋งŒ, Docker๋Š” iptables-nft๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‘ ํ…Œ์ด๋ธ”์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด์„œ VPN์˜ ACCEPT ๊ทœ์น™์ด Docker์˜ DROP ์ •์ฑ…์„ ์šฐํšŒํ•˜์ง€ ๋ชปํ•œ๋‹ค.

ํ•ด๊ฒฐ

Docker์˜ DOCKER-USER ์ฒด์ธ์— VPN ์„œ๋ธŒ๋„ท์„ ํ—ˆ์šฉํ•˜๋Š” ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. DOCKER-USER๋Š” Docker๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์„ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” ์ฒด์ธ์œผ๋กœ, Docker ์žฌ์‹œ์ž‘ ์‹œ์—๋„ ์œ ์ง€๋œ๋‹ค.

# VPN ์„œ๋ธŒ๋„ท ์ •์˜
L2TP_NET="192.168.42.0/24"
XAUTH_NET="192.168.43.0/24"

# DOCKER-USER ์ฒด์ธ์— VPN ํŠธ๋ž˜ํ”ฝ ํ—ˆ์šฉ
if iptables-nft -L DOCKER-USER -n >/dev/null 2>&1; then
  iptables-nft -I DOCKER-USER 1 -s "$XAUTH_NET" -j ACCEPT
  iptables-nft -I DOCKER-USER 2 -d "$XAUTH_NET" -j ACCEPT
  iptables-nft -I DOCKER-USER 3 -s "$L2TP_NET" -j ACCEPT
  iptables-nft -I DOCKER-USER 4 -d "$L2TP_NET" -j ACCEPT
fi

์ด ๊ทœ์น™์„ VPN ์„œ๋ฒ„์˜ ์ปค์Šคํ…€ entrypoint ์Šคํฌ๋ฆฝํŠธ(run.sh)์— ์ถ”๊ฐ€ํ•˜์—ฌ, ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ์ž๋™์œผ๋กœ ์ ์šฉ๋˜๋„๋ก ํ–ˆ๋‹ค.

์ถ”๊ฐ€ MASQUERADE ๊ทœ์น™

์™ธ๋ถ€ ์ธํ„ฐ๋„ท ์ ‘๊ทผ์„ ์œ„ํ•ด POSTROUTING์— MASQUERADE ๊ทœ์น™๋„ ํ•„์š”ํ•˜๋‹ค. LAN ์ ‘๊ทผ์€ NAT ์—†์ด ์ง์ ‘ ๋ผ์šฐํŒ…ํ•œ๋‹ค.

# ์™ธ๋ถ€ ์ ‘๊ทผ: MASQUERADE
iptables -t nat -A POSTROUTING -s "$XAUTH_NET" -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s "$L2TP_NET" -o eth0 -j MASQUERADE

# LAN ์ ‘๊ทผ: NAT ์—†์ด ์ง์ ‘ ๋ผ์šฐํŒ… (RETURN)
iptables -t nat -I POSTROUTING 1 -s "$XAUTH_NET" -d 10.0.0.0/24 -j RETURN
iptables -t nat -I POSTROUTING 2 -s "$L2TP_NET" -d 10.0.0.0/24 -j RETURN

๊ฒ€์ฆ

# VPN ์—ฐ๊ฒฐ ํ›„ ํŠธ๋ž˜ํ”ฝ ํ™•์ธ
docker exec ipsec-vpn-server ipsec whack --trafficstatus
# outBytes > 0 ํ™•์ธ

# ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธํ„ฐ๋„ท ์ ‘๊ทผ
ping 8.8.8.8        # ์™ธ๋ถ€ DNS
ping 10.0.0.1       # LAN ๊ฒŒ์ดํŠธ์›จ์ด

ํ•ต์‹ฌ ์ •๋ฆฌ

๊ณ„์ธต๋ฌธ์ œํ•ด๊ฒฐ
FORWARDDocker nftables policy DROPDOCKER-USER ์ฒด์ธ์— VPN ์„œ๋ธŒ๋„ท ACCEPT
POSTROUTINGMASQUERADE ๋ฏธ๋„๋‹ฌiptables NAT ๊ทœ์น™ ์ถ”๊ฐ€
LAN ์ ‘๊ทผ๋ถˆํ•„์š”ํ•œ NATRETURN ๊ทœ์น™์œผ๋กœ ์ง์ ‘ ๋ผ์šฐํŒ…

Docker host ๋ชจ๋“œ์—์„œ VPN์„ ์šด์˜ํ•  ๋•Œ๋Š” Docker์˜ nftables ๋ฐฉํ™”๋ฒฝ๊ณผ VPN์˜ iptables ๊ทœ์น™์ด ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ๋™์ž‘ํ•œ๋‹ค๋Š” ์ ์„ ๋ฐ˜๋“œ์‹œ ์ธ์ง€ํ•ด์•ผ ํ•œ๋‹ค. DOCKER-USER ์ฒด์ธ์ด ์ด ๋ฌธ์ œ์˜ ๊ณต์‹์ ์ธ ํ•ด๊ฒฐ ์ง€์ ์ด๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ


Share this post on:

Previous Post
13๊ฐœ Docker ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ํ‘œ์ค€ํ™”ํ•œ ๊ณผ์ •
Next Post
๋ฒ”์œ„๋ฅผ ๋„“ํžˆ๋Š” ์กฐ์šฉํ•œ ์‹คํŒจ