Docker์์ hwdsl2/ipsec-vpn-server๋ฅผ --network host ๋ชจ๋๋ก ์ด์ํ ๋, VPN ์ฐ๊ฒฐ์ ์ฑ๊ณตํ์ง๋ง ์ธํฐ๋ท์ด๋ LAN์ ์ ๊ทผํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๊ฒช์๋ค. outBytes=0์ด ๊ณ์๋๋ ์ํฉ์ด์๋ค.
Table of contents
Open Table of contents
์ฆ์
- IKEv2 VPN ์ฐ๊ฒฐ ์์ฒด๋ ์ฑ๊ณต (ํด๋ผ์ด์ธํธ์ IP ํ ๋น๋จ)
- VPN ํด๋ผ์ด์ธํธ์์ ์ธํฐ๋ท/LAN ์ ๊ทผ ๋ถ๊ฐ
ipsec status๋ ์ ์,ipsec whack --trafficstatus์์outBytes=0
# 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 ๊ฒ์ดํธ์จ์ด
ํต์ฌ ์ ๋ฆฌ
| ๊ณ์ธต | ๋ฌธ์ | ํด๊ฒฐ |
|---|---|---|
| FORWARD | Docker nftables policy DROP | DOCKER-USER ์ฒด์ธ์ VPN ์๋ธ๋ท ACCEPT |
| POSTROUTING | MASQUERADE ๋ฏธ๋๋ฌ | iptables NAT ๊ท์น ์ถ๊ฐ |
| LAN ์ ๊ทผ | ๋ถํ์ํ NAT | RETURN ๊ท์น์ผ๋ก ์ง์ ๋ผ์ฐํ |
Docker host ๋ชจ๋์์ VPN์ ์ด์ํ ๋๋ Docker์ nftables ๋ฐฉํ๋ฒฝ๊ณผ VPN์ iptables ๊ท์น์ด ๋ค๋ฅธ ํ
์ด๋ธ์์ ๋์ํ๋ค๋ ์ ์ ๋ฐ๋์ ์ธ์งํด์ผ ํ๋ค. DOCKER-USER ์ฒด์ธ์ด ์ด ๋ฌธ์ ์ ๊ณต์์ ์ธ ํด๊ฒฐ ์ง์ ์ด๋ค.
์ฐธ๊ณ ์๋ฃ
- Docker Packet Filtering and Firewalls โ Docker ๊ณต์ iptables/nftables FORWARD ์ฒด์ธ ๋ฌธ์
- hwdsl2/docker-ipsec-vpn-server โ IPsec VPN ์๋ฒ Docker ์ด๋ฏธ์ง