FreeBSD ์์ค ํธ๋ฆฌ๋ VPN WireGuard์ ์ ์์ธ Jason A. Donenfeld์ John H. Baldwin์ ๊ธฐ์ฌ๋ก ํต์ฌ FreeBSD ๋ฐ WireGuard ๊ฐ๋ฐ ํ์ด ๊ณต๋์ผ๋ก ์์ฑํ ์ปค๋ ๋ชจ๋ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ VPN WireGuard์ ์๋ก์ด ๊ตฌํ์ผ๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค. 2000๋ ๋ ์ด๋ฐ FreeBSD ์ปค๋์์ SMP ๋ฐ NUMA์ ๋ํ ์ง์์ ๊ตฌํํ ์ ๋ช ํ GDB ๋ฐ FreeBSD ๊ฐ๋ฐ์์ ๋๋ค. ๋๋ผ์ด๋ฒ๊ฐ FreeBSD(sys/dev/wg)์ ์น์ธ๋ ํ ํด๋น ๋๋ผ์ด๋ฒ์ ๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ ์ดํ FreeBSD ์ ์ฅ์์์ ์ํ๋ฉ๋๋ค.
์ฝ๋๊ฐ ์น์ธ๋๊ธฐ ์ ์ FreeBSD Foundation์ ์ง์์ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ ์ฒด ๊ฒํ ๊ฐ ์ํ๋์์ผ๋ฉฐ, ๊ทธ ๋์ ๋๋ผ์ด๋ฒ์ ๋๋จธ์ง ์ปค๋ ํ์ ์์คํ ์ ์ํธ ์์ฉ๋ ๋ถ์๋์์ผ๋ฉฐ ์ปค๋์์ ์ ๊ณตํ๋ ์ํธํ ๊ธฐ๋ณธ ์์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ฅ์ฑ๋ ๋ถ์๋์์ต๋๋ค. ํ๊ฐ๋์์ต๋๋ค.
๋๋ผ์ด๋ฒ์ ํ์ํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ธฐ ์ํด FreeBSD ์ปค๋ ์ํธํ ํ์ ์์คํ ์ API๊ฐ ํ์ฅ๋์์ผ๋ฉฐ, ์ฌ๊ธฐ์ ํ์ค ์ํธํ API๋ฅผ ํตํด FreeBSD์์ ์ง์๋์ง ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ์ ํ์ฉํ๋ ํ๋ค์ค๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. libsodium ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ์๊ณ ๋ฆฌ์ฆ. ๋๋ผ์ด๋ฒ์ ๋ด์ฅ๋ ์๊ณ ๋ฆฌ์ฆ ์ค์์ Blake2 ํด์๋ฅผ ๊ณ์ฐํ๋ ์ฝ๋๋ง ๋จ์ต๋๋ค. ์๋ํ๋ฉด FreeBSD์์ ์ ๊ณต๋๋ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํ์ ๊ณ ์ ๋ ํด์ ํฌ๊ธฐ์ ๋ฌถ์ฌ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ ๊ฒํ ๊ณผ์ ์์ ์ฝ๋ ์ต์ ํ๋ฅผ ์ํํ์ฌ ๋ฉํฐ ์ฝ์ด CPU์ ๋ถํ ๋ถ์ฐ ํจ์จ์ฑ์ ๋์ผ ์ ์์์ต๋๋ค(CPU ์ฝ์ด์ ๋ํ ํจํท ์ํธํ ๋ฐ ์ํธ ํด๋ ์์ ํ ๋น์ ๊ท ์ผํ ๊ท ํ์ด ๋ณด์ฅ๋์์ต๋๋ค). ๊ฒฐ๊ณผ์ ์ผ๋ก ํจํท์ ์ฒ๋ฆฌํ ๋์ ์ค๋ฒํค๋๋ Linux ๋๋ผ์ด๋ฒ ๊ตฌํ์ ์ค๋ฒํค๋์ ๋น์ทํ์ต๋๋ค. ๋ํ ์ด ์ฝ๋๋ ossl ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ ์์ ์๋๋ฅผ ๋์ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
WireGuard๋ฅผ FreeBSD์ ํตํฉํ๋ ค๋ ์ด์ ์๋์ ๋ฌ๋ฆฌ, ์๋ก์ด ๊ตฌํ์์๋ ifconfig์ ์์ ๋ ๋ฒ์ ์ด ์๋ ํ์ค wg ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก Linux์ FreeBSD์์ ๊ตฌ์ฑ์ ํตํฉํ ์ ์์ต๋๋ค. wg ์ ํธ๋ฆฌํฐ์ ๋๋ผ์ด๋ฒ๋ FreeBSD ์์ค ์ฝ๋์ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ด๋ wg ์ฝ๋์ ๋ํ ๋ผ์ด์ผ์ค๋ฅผ ๋ณ๊ฒฝํ์ฌ ๊ฐ๋ฅํด์ก์ต๋๋ค(์ด ์ฝ๋๋ ์ด์ MIT ๋ฐ GPL ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ). FreeBSD์ WireGuard๋ฅผ ํฌํจ์ํค๋ ค๋ ๋ง์ง๋ง ์๋๋ 2020๋ ์ ์ด๋ฃจ์ด์ก์ง๋ง ์ค์บ๋ค๋ก ๋๋ฌ์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ฎ์ ํ์ง, ๋ถ์ฃผ์ํ ๋ฒํผ ์์ , ๊ฒ์ฌ โโ๋์ ์คํ ์ฌ์ฉ, ๋ถ์์ ํ ๊ตฌํ์ผ๋ก ์ธํด ์ด๋ฏธ ์ถ๊ฐ๋ ์ฝ๋๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค. ํ๋กํ ์ฝ ์๋ฐ ๋ฐ GPL ๋ผ์ด์ผ์ค ์๋ฐ.
VPN WireGuard๋ ์ต์ ์ํธํ ๋ฐฉ๋ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋๊ณ ๋งค์ฐ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ฉฐ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ๋ณต์กํ์ง ์์ผ๋ฉฐ ๋๋์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ์ฌ๋ฌ ๋๊ท๋ชจ ๋ฐฐํฌ์์ ์ ์ฆ๋์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ 2015๋ ๋ถํฐ ๊ฐ๋ฐ๋์ด ์์ผ๋ฉฐ ์ฌ์ฉ๋ ์ํธํ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ์ฌ ๋ฐ ๊ณต์ ๊ฒ์ฆ์ ๊ฑฐ์ณค์ต๋๋ค. WireGuard๋ ๊ฐ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ๊ฐ์ธ ํค๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฐ ํค๋ฅผ ๋ฐ์ธ๋ฉํ๋ ์ํธํ ํค ๋ผ์ฐํ ๊ฐ๋ ์ ์ฌ์ฉํฉ๋๋ค.
SSH์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ๊ณต๊ฐ ํค๋ฅผ ๊ตํํ์ฌ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค. ์ฌ์ฉ์ ๊ณต๊ฐ์์ ๋ณ๋์ ๋ฐ๋ชฌ์ ์คํํ์ง ์๊ณ ํค๋ฅผ ํ์ํ๊ณ ์ฐ๊ฒฐํ๊ธฐ ์ํด SSH์์ Authorized_keys๋ฅผ ์ ์งํ๋ ๊ฒ๊ณผ ์ ์ฌํ๊ฒ Noise Protocol Framework์ Noise_IK ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ์ดํฐ ์ ์ก์ UDP ํจํท์ ์บก์ํ๋ฅผ ํตํด ์ํ๋ฉ๋๋ค. ์๋ ํด๋ผ์ด์ธํธ ์ฌ๊ตฌ์ฑ์ผ๋ก ์ฐ๊ฒฐ์ ๋์ง ์๊ณ VPN ์๋ฒ์ IP ์ฃผ์ ๋ณ๊ฒฝ(๋ก๋ฐ)์ ์ง์ํฉ๋๋ค.
์ํธํ์์๋ Daniel J. Bernstein, Tanja Lange ๋ฐ Peter Schwabe๊ฐ ๊ฐ๋ฐํ ChaCha20 ์คํธ๋ฆผ ์ํธ์ Poly1305 ๋ฉ์์ง ์ธ์ฆ ์๊ณ ๋ฆฌ์ฆ(MAC)์ ์ฌ์ฉํฉ๋๋ค. ChaCha20 ๋ฐ Poly1305๋ AES-256-CTR ๋ฐ HMAC์ ๋ ๋น ๋ฅด๊ณ ์์ ํ ์๋ ๋ก๊ทธ๋ก ์๋ฆฌ ์ก์์ผ๋ฉฐ, ์ํํธ์จ์ด ๊ตฌํ์ ํตํด ํน๋ณํ ํ๋์จ์ด ์ง์์ ์ฌ์ฉํ์ง ์๊ณ ๋ ๊ณ ์ ๋ ์คํ ์๊ฐ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ๊ณต์ ๋น๋ฐ ํค๋ฅผ ์์ฑํ๊ธฐ ์ํด Daniel Bernstein์ด ์ ์ํ Curve25519 ๊ตฌํ์ ํ์ ๊ณก์ Diffie-Hellman ํ๋กํ ์ฝ์ด ์ฌ์ฉ๋ฉ๋๋ค. ํด์ฑ์๋ BLAKE2s ์๊ณ ๋ฆฌ์ฆ(RFC7693)์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru