FreeBSD ์์ค ํธ๋ฆฌ์ ์๋ก์ด VPN ๊ตฌํ์ด ์ถ๊ฐ๋์์ต๋๋ค. WireGuardFreeBSD ์ฝ์ด ๊ฐ๋ฐํ์ด ๊ณต๋์ผ๋ก ์ค๋นํ ์ปค๋ ๋ชจ๋ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. WireGuard VPN์ ์ ์์ธ ์ ์ด์จ A. ๋๋จํ ๋๊ฐ ์ถ์ฐํฉ๋๋ค. WireGuard๊ทธ๋ฆฌ๊ณ ์กด H. ๋ณผ๋์์ 2000๋ ๋ ์ด FreeBSD ์ปค๋์ SMP ๋ฐ NUMA ์ง์์ ๊ตฌํํ ์ ๋ช ํ GDB ๋ฐ FreeBSD ๊ฐ๋ฐ์์ ๋๋ค. ๋๋ผ์ด๋ฒ๊ฐ FreeBSD(sys/dev/wg)์ ์น์ธ๋๋ฉด ๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ FreeBSD ์ ์ฅ์์์ ์ด๋ฃจ์ด์ง ๊ฒ์ ๋๋ค.
์ฝ๋๊ฐ ์น์ธ๋๊ธฐ ์ ์ FreeBSD ์ฌ๋จ์ ์ง์์ ๋ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ ์ฒด ๊ฒํ ๊ฐ ์ํ๋์์ผ๋ฉฐ, ์ด ๊ฒํ ๊ณผ์ ์์ ๋๋ผ์ด๋ฒ์ ๋ค๋ฅธ ์ปค๋ ํ์ ์์คํ ์ ์ํธ ์์ฉ์ ๋ถ์ํ๊ณ ์ปค๋์ด ์ ๊ณตํ๋ ์ํธํ ๊ธฐ๋ณธ ์์๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ํ๊ฐํ์ต๋๋ค.
๋๋ผ์ด๋ฒ์ ํ์ํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ธฐ ์ํด FreeBSD ์ปค๋ ์ํธํ ํ์ ์์คํ API๊ฐ ํ์ฅ๋์์ผ๋ฉฐ, ์ฌ๊ธฐ์ libsodium ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ ํตํด FreeBSD์์ ํ์ค ์ํธํ API๋ฅผ ํตํด ์ง์๋์ง ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ฐ์ธ๋ฉ์ด ์ถ๊ฐ๋์์ต๋๋ค. ๋๋ผ์ด๋ฒ์ ๋ด์ฅ๋ ์๊ณ ๋ฆฌ์ฆ ์ค Blake2 ํด์ ๊ณ์ฐ ์ฝ๋๋ง ๋จ์์ต๋๋ค. FreeBSD์์ ์ ๊ณตํ๋ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํ์ ๊ณ ์ ๋ ํด์ ํฌ๊ธฐ์ ์ข ์๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ ๊ฒํ ๊ณผ์ ์์ ๋ฉํฐ์ฝ์ด CPU์ ๋ถํ ๋ถ์ฐ ํจ์จ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ฝ๋ ์ต์ ํ๊ฐ ์ํ๋์์ต๋๋ค(CPU ์ฝ์ด ์ ์ฒด์ ๊ฑธ์ณ ํจํท ์ํธํ ๋ฐ ๋ณตํธํ ์์ ์ ๊ท ๋ฑํ ๊ท ํ ์ ์ง). ๊ทธ ๊ฒฐ๊ณผ, ํจํท ์ฒ๋ฆฌ ์ค๋ฒํค๋๊ฐ ๋๋ผ์ด๋ฒ ๊ตฌํ์ ์ค๋ฒํค๋์ ๋์ฑ ๊ฐ๊น์์ก์ต๋๋ค. Linux์ด ์ฝ๋๋ ossl ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ ์์ ์๋๋ฅผ ํฅ์์ํค๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
์ด์ ์ ํตํฉ ์๋์๋ ๋ฌ๋ฆฌ WireGuard FreeBSD์์๋ ์๋ก์ด ๊ตฌํ ๋ฐฉ์์ด ์์ ๋ ifconfig ๋ฒ์ ๋์ ํ์ค wg ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ค์ ์ ํตํฉํ ์ ์๊ฒ ๋์์ต๋๋ค. Linux ๊ทธ๋ฆฌ๊ณ FreeBSD์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. wg ์ ํธ๋ฆฌํฐ๋ ๋๋ผ์ด๋ฒ์ ๋ง์ฐฌ๊ฐ์ง๋ก FreeBSD ์์ค ์ฝ๋์ ํฌํจ๋์ด ์๋๋ฐ, ์ด๋ wg ์ฝ๋ ๋ผ์ด์ ์ค๋ฅผ ๋ณ๊ฒฝํจ์ผ๋ก์จ ๊ฐ๋ฅํด์ก์ต๋๋ค(ํ์ฌ ์ฝ๋๋ MIT ๋ฐ GPL ๋ผ์ด์ ์ค ํ์ ์ ๊ณต๋ฉ๋๋ค). ์ด์ ์๋ ์์ค ์ฝ๋์ wg ์ ํธ๋ฆฌํฐ๋ฅผ ํฌํจ์ํค๋ ค๋ ์๋๊ฐ ์์์ง๋ง ์คํจํ์ต๋๋ค. WireGuard 2020๋ ์ FreeBSD๋ก์ ๋ณํฉ ์๋๊ฐ ์์์ง๋ง, ํ์ง ์ ํ, ๋ฒํผ ์ฒ๋ฆฌ ๋ฏธํก, ๊ฒ์ฌ ๋์ ์คํ ์ฌ์ฉ, ๋ถ์์ ํ ํ๋กํ ์ฝ ๊ตฌํ, GPL ๋ผ์ด์ ์ค ์๋ฐ ๋ฑ์ ์ด์ ๋ก ์ด๋ฏธ ์ถ๊ฐ๋ ์ฝ๋๊ฐ ์ ๊ฑฐ๋๋ฉด์ ๋ ผ๋์ผ๋ก ๋๋ฌ์ต๋๋ค.
๊ทธ๋ฐ ๊ธฐ์ต VPN WireGuard ์ต์ ์ํธํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ ์ด ์์คํ ์ ๋งค์ฐ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ฌ์ฉ์ด ๊ฐํธํ๊ณ ๋ณต์กํ์ง ์์ผ๋ฉฐ, ๋์ฉ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ์ฌ๋ฌ ๋๊ท๋ชจ ๋ฐฐํฌ ํ๊ฒฝ์์ ์ฑ๋ฅ์ด ์ ์ฆ๋์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ 2015๋ ๋ถํฐ ๊ฐ๋ฐ๋์ด ์์ผ๋ฉฐ, ์ํธํ ๊ธฐ๋ฒ์ ๋ํ ๊ฐ์ฌ ๋ฐ ํ์ ๊ฒ์ฆ์ ๊ฑฐ์ณค์ต๋๋ค. WireGuard ํค ๊ธฐ๋ฐ ๋ผ์ฐํ ๊ฐ๋ ์ด ์ฌ์ฉ๋๋๋ฐ, ์ด๋ ๊ฐ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ๊ฐ์ธ ํค๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋ฐ์ธ๋ฉ์ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
์ฐ๊ฒฐ์ ์ค์ ํ๊ธฐ ์ํ ๊ณต๊ฐ ํค ๊ตํ์ SSH์ ์ ์ฌํฉ๋๋ค. ์ฌ์ฉ์ ๊ณต๊ฐ์์ ๋ณ๋์ ๋ฐ๋ชฌ์ ์คํํ์ง ์๊ณ ํค๋ฅผ ํ์ํ๊ณ ์ฐ๊ฒฐํ๊ธฐ ์ํด, SSH์ authorized_keys ๊ด๋ฆฌ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ Noise ํ๋กํ ์ฝ ํ๋ ์์ํฌ์ Noise_IK ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ์ดํฐ ์ ์ก์ UDP ํจํท์ผ๋ก ์บก์ํ๋์ด ์ด๋ฃจ์ด์ง๋๋ค. ๋ณ๊ฒฝ๋ ์ง์๋ฉ๋๋ค. IP ์ฃผ์ VPN ์๋ฒ(๋ก๋ฐ)๋ ์ฐ๊ฒฐ ๋๊น ์์ด ์๋ ํด๋ผ์ด์ธํธ ์ฌ๊ตฌ์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ํธํ์์๋ 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
