VPN์ด ๋ ์ด์ ํฑ์์ผ ๋ ์์คํ ๊ด๋ฆฌ์์ ์ด๊ตญ์ ์ธ ๋๊ตฌ๊ฐ ์๋ ๋๊ฐ ์์ต๋๋ค. ์ฌ์ฉ์์ ์ ๋ฌด๋ ๋ค๋ฅด์ง๋ง ์ฌ์ค VPN์ ๋ชจ๋ ์ฌ๋์๊ฒ ํ์ํฉ๋๋ค.
ํ์ฌ VPN ์๋ฃจ์ ์ ๋ฌธ์ ์ ์ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ๊ธฐ ์ด๋ ต๊ณ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ์์ฌ์ค๋ฌ์ด ํ์ง์ ๋ ๊ฑฐ์ ์ฝ๋๋ก ๊ฐ๋ ์ฐจ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋ช ๋
์ , ์บ๋๋ค ์ ๋ณด ๋ณด์ ์ ๋ฌธ๊ฐ์ธ Jason A. Donenfeld๋ ์ถฉ๋ถํ๋ค๊ณ ํ๋จํ๊ณ ์์
์ ์์ํ์ต๋๋ค.
๋ค๋ฅธ VPN ์๋ฃจ์ ์ ๋นํด WireGuard์ ์ฅ์ :
- ์ฌ์ฉํ๊ธฐ ์ฌ์ด.
- ์ต์ ์ํธํ ์ฌ์ฉ: ๋ ธ์ด์ฆ ํ๋กํ ์ฝ ํ๋ ์์ํฌ, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF ๋ฑ
- ๊ฐ๋ ์ฑ์ด ๋ฐ์ด๋ ์ฝ๋๋ก ์ทจ์ฝ์ฑ์ ์ฝ๊ฒ ์กฐ์ฌํ ์ ์์ต๋๋ค.
- ๊ณ ์ฑ๋ฅ.
- ๋ช
ํํ๊ณ ์ธ๊ณต๋จ
์ฌ์ .
์ํํ์ด ๋ฐ๊ฒฌ๋์๋์? OpenVPN๊ณผ IPSec์ ๋ฌป์ ๋๊ฐ ๋์์ต๋๊น? ๋๋ ์ด๊ฒ์ ์ฒ๋ฆฌํ๊ธฐ๋ก ๊ฒฐ์ ํ์ง๋ง ๋์์
์ผ์ ์๋ฆฌ
์๋ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ ์ ์์ต๋๋ค.
- WireGuard ์ธํฐํ์ด์ค๊ฐ ์์ฑ๋๊ณ ๊ฐ์ธ ํค์ IP ์ฃผ์๊ฐ ํ ๋น๋ฉ๋๋ค. ๊ณต๊ฐ ํค, IP ์ฃผ์ ๋ฑ ๋ค๋ฅธ ํผ์ด์ ์ค์ ์ด ๋ก๋๋ฉ๋๋ค.
- WireGuard ์ธํฐํ์ด์ค์ ๋์ฐฉํ๋ ๋ชจ๋ IP ํจํท์ UDP๋ก ์บก์ํ๋๋ฉฐ
์์ ํ๊ฒ ๋ฐฐ์ก ๋ค๋ฅธ ํด์ ๋ค. - ํด๋ผ์ด์ธํธ๋ ์ค์ ์์ ์๋ฒ์ ๊ณต์ฉ IP ์ฃผ์๋ฅผ ์ค์ ํฉ๋๋ค. ์๋ฒ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์ฆ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ ๋ ํด๋ผ์ด์ธํธ์ ์ธ๋ถ ์ฃผ์๋ฅผ ์๋์ผ๋ก ํ์ตํฉ๋๋ค.
- ์๋ฒ๋ ์์ ์ ์ค๋จํ์ง ์๊ณ ๊ณต์ฉ IP ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋์์ ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ์ ์๋ฆผ์ ๋ณด๋ด๊ณ ์ฆ์ ๊ตฌ์ฑ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋ผ์ฐํ
๊ฐ๋
์ ์ฌ์ฉ
์ํธํค ๋ผ์ฐํ . WireGuard๋ ํผ์ด์ ๊ณต๊ฐ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจํท์ ์์ ํ๊ณ ์ ์กํฉ๋๋ค. ์๋ฒ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์ฆ๋ ํจํท์ ํด๋ ํ๋ฉด ํด๋น src ํ๋๊ฐ ํ์ธ๋ฉ๋๋ค. ๊ตฌ์ฑ๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐallowed-ips
์ธ์ฆ๋ ํผ์ด๊ฐ ์์ผ๋ฉด WireGuard ์ธํฐํ์ด์ค์์ ํจํท์ ์์ ํฉ๋๋ค. ๋ฐ์ ํจํท์ ๋ณด๋ผ ๋ ํด๋น ์ ์ฐจ๊ฐ ๋ฐ์ํฉ๋๋ค. ํจํท์ dst ํ๋๋ฅผ ์ทจํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด๋น ํผ์ด๊ฐ ์ ํ๋๊ณ ํจํท์ด ์์ฒด ํค๋ก ์๋ช ๋๊ณ ํผ์ด์ ํค๋ก ์ํธํ๋์ด ์๊ฒฉ์ผ๋ก ์ ์ก๋ฉ๋๋ค. ๋์ .
WireGuard์ ์ ์ฒด ํต์ฌ ๋ก์ง์ 4์ค ๋ฏธ๋ง์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐ๋ฉด OpenVPN ๋ฐ IPSec์๋ ์์ญ๋ง ์ค์ ์ฝ๋๊ฐ ์์ต๋๋ค. ์ต์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํ๊ธฐ ์ํด Linux ์ปค๋์ ์๋ก์ด ์ํธํ API๋ฅผ ํฌํจํ ๊ฒ์ ์ ์ํฉ๋๋ค.
ะัะพะธะทะฒะพะดะธัะตะปัะฝะพััั
WireGuard๊ฐ ์ปค๋ ๋ชจ๋๋ก ๊ตฌํ๋๊ธฐ ๋๋ฌธ์ Linux ์์คํ ์์ ์ต๋ ์ฑ๋ฅ ์ด์ (OpenVPN ๋ฐ IPSec๊ณผ ๋น๊ต)์ด ๋์ ๋๋๋ค. ๋ํ macOS, Android, iOS, FreeBSD ๋ฐ OpenBSD๊ฐ ์ง์๋์ง๋ง ์ฌ์ฉ์ ๊ณต๊ฐ์์ WireGuard๋ฅผ ์คํํ์ฌ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ฐ๊น์ด ์์ผ ๋ด์ Windows ์ง์์ด ์ถ๊ฐ๋ ์์ ์ ๋๋ค.
๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ
๋์ ์ฌ์ฉ ๊ฒฝํ
์ ๋ VPN ์ค์ ์ ๋ฌธ๊ฐ๊ฐ ์๋๋๋ค. ์ผ๋จ ํธ๋ค๋ก OpenVPN์ ์ค์ ํ๋๋ฐ ๋งค์ฐ ์ง๋ฃจํ๊ณ IPSec์ ์๋์กฐ์ฐจ ํ์ง ์์์ต๋๋ค. ๋ด๋ ค์ผ ํ ๊ฒฐ์ ์ด ๋๋ฌด ๋ง์์ ์์ฑ ํ๊ธฐ ์ฝ์ต๋๋ค. ๋ฐ๋ผ์ ์ ๋ ํญ์ ๊ธฐ์ฑํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค.
๋ฐ๋ผ์ ์ ๊ด์ ์์ WireGuard๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์ด์์ ์ ๋๋ค. ๋ชจ๋ ๋ฎ์ ์์ค์ ๊ฒฐ์ ์ ์ฌ์์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก ์ผ๋ฐ์ ์ธ VPN ์ธํ๋ผ๋ฅผ ์ค๋นํ๋ ํ๋ก์ธ์ค๋ ๋ช ๋ถ ๋ฐ์ ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค. ๊ตฌ์ฑ์ Nafakapit์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ค์น ๊ณผ์
์ํธํ ํค๋ ์ ํธ๋ฆฌํฐ์์ ์์ฑ๋ฉ๋๋ค. wg
:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )
๋ค์์ผ๋ก ์๋ฒ ๊ตฌ์ฑ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. /etc/wireguard/wg0.conf
๋ค์ ๋ด์ฉ์ผ๋ก:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32
์คํฌ๋ฆฝํธ๋ก ํฐ๋์ ๋ค์ด ์ฌ๋ฆฌ์ญ์์ค. wg-quick
:
sudo wg-quick up /etc/wireguard/wg0.conf
systemd๊ฐ ์๋ ์์คํ
์์๋ ์ด๊ฒ์ ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค. sudo systemctl start [email protected]
.
ํด๋ผ์ด์ธํธ ์์คํ
์์ ๊ตฌ์ฑ์ ๋ง๋ญ๋๋ค. /etc/wireguard/wg0.conf
:
[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # ะะฝะตัะฝะธะน IP ัะตัะฒะตัะฐ
PersistentKeepalive = 25
๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํฐ๋์ ๋ค์ด ์ฌ๋ฆฝ๋๋ค.
sudo wg-quick up /etc/wireguard/wg0.conf
ํด๋ผ์ด์ธํธ๊ฐ ์ธํฐ๋ท์ ์ก์ธ์คํ ์ ์๋๋ก ์๋ฒ์์ NAT๋ฅผ ๊ตฌ์ฑํ๋ฉด ์๋ฃ๋ฉ๋๋ค!
์ด๋ฌํ ์ฌ์ฉ ํธ์์ฑ๊ณผ ์ฝ๋ ๊ธฐ๋ฐ์ ์์ถ์ฑ์ ํค ๋ฐฐํฌ ๊ธฐ๋ฅ์ ์ ๊ฑฐํจ์ผ๋ก์จ ๋ฌ์ฑ๋์์ต๋๋ค. ๋ณต์กํ ์ธ์ฆ์ ์์คํ ์ด ์์ผ๋ฉฐ์ด ๋ชจ๋ ๊ธฐ์ ๊ณตํฌ, ์งง์ ์ํธํ ํค๋ ๋๋ต SSH ํค์ ๊ฐ์ด ๋ฐฐํฌ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค. WireGuard๋ ์ผ๋ถ ๊ธฐ์กด ๋คํธ์ํฌ์์ ๊ตฌํํ๊ธฐ ์ฝ์ง ์์ ๊ฒ์ ๋๋ค.
๋จ์ ์ค WireGuard๋ ์ ์ก ์๋จ์ผ๋ก UDP ํ๋กํ ์ฝ๋ง ์๊ธฐ ๋๋ฌธ์ HTTP ํ๋ก์๋ฅผ ํตํด ์๋ํ์ง ์๋๋ค๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ํ๋กํ ์ฝ์ ๋๋ ํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊น์? ๋ฌผ๋ก ์ด๊ฒ์ VPN์ ์ง์ ์ ์ธ ์์ ์ ์๋์ง๋ง ์๋ฅผ ๋ค์ด OpenVPN์ ๊ฒฝ์ฐ HTTPS๋ก ์์ฅํ์ฌ ์ ์ฒด์ฃผ์ ๊ตญ๊ฐ ๊ฑฐ์ฃผ์๊ฐ ์ธํฐ๋ท์ ์ต๋ํ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
์์ฝํ๋ฉด ์ด๊ฒ์ ๋งค์ฐ ํฅ๋ฏธ๋กญ๊ณ ์ ๋งํ ํ๋ก์ ํธ์ด๋ฉฐ ์ด๋ฏธ ๊ฐ์ธ ์๋ฒ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ต์ ๋ฌด์์ ๋๊น? Linux ์์คํ ์ ๊ณ ์ฑ๋ฅ, ์ค์น ๋ฐ ์ ์ง ๊ด๋ฆฌ ์ฉ์ด์ฑ, ์๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋ ๊ธฐ๋ฐ. ๊ทธ๋ฌ๋ ๋ณต์กํ ์ธํ๋ผ๋ฅผ WireGuard๋ก ์ด์ ํ๊ธฐ์๋ ๋๋ฌด ์ด๋ฅด๋ฏ๋ก Linux ์ปค๋์ ํฌํจ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ๊ฐ์น๊ฐ ์์ต๋๋ค.
๋ด (๊ทธ๋ฆฌ๊ณ ๋น์ ์) ์๊ฐ์ ์ ์ฝํ๊ธฐ ์ํด, ๋๋ ๊ฐ๋ฐ
์ถ์ฒ : habr.com