Configuring OpenVPN on Merlin's fw - XIYO/asuswrt-merlin.ng-kr GitHub Wiki
VPN์ ๊ฐ์ ์ฌ์ค ๋คํธ์ํฌ(Virtual Private Network)์ ๋๋ค. ๊ณต์ฉ ์ธํฐ๋ท ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ํด๋ผ์ด์ธํธ(์ฃผ๋ก PC์ด์ง๋ง, ๋ค๋ฅธ ์ง๋ฅํ ์ฅ์น์ผ ์๋ ์์) ์ฌ์ด์ ๊ฐ์ ์ฌ์ค ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค. VPN ํ๋ก๋ ์ฌ์ฉ์์ ์ ๊ทผํ ์๋ฒ ๊ฐ์ ํต์ ์ด ๋ค๋ฅธ ์ฌ๋์ ์ํด ์ดํด๋ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ด๋ฌํ ๊ฐ์ ์ฑ๋์ ๊ตฌ์ถํ๊ธฐ ์ํด ๋ฐฐํฌ๋ ๋ง์ ์ ํ๋ค์ด ์์ต๋๋ค. ๊ทธ ์ค ํ๋๋ ์ปค๋ฎค๋ํฐ์ ์ํด ์ง์๋๋ ๋ฌด๋ฃ ์ ํ์ธ OpenVPN ์ ๋๋ค.
์ด์ ๋ํ ๋ชจ๋ ์ ๋ณด๋ http://openvpn.net/์์ ํ์ธํ ์ ์์ต๋๋ค.
์์ํ ์ ์๋ฏ์ด, ๋ ๊ฐ์ง ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค:
- ์๋ฒ
- ํด๋ผ์ด์ธํธ
OpenVPN ์๋ฒ๋ ์ด๋ฏธ ASUS ํ์จ์ด์ Merlin ๋ฒ์ ์ ์ค์น๋์ด ์์ต๋๋ค. โ๊ณ ๊ธ ์ค์ โ ์๋ โVPNโ ํญ๋ชฉ์ ํตํด ์ ๊ทผํ ์ ์์ต๋๋ค. ํด๋น ํ์ด์ง์์๋ ๋ ๊ฐ์ง VPN ์๋ฒ๊ฐ ์ ๊ณต๋ฉ๋๋ค:
- ASUS ํ์จ์ด์ ํฌํจ๋ ๊ฒ: PPTP.
- Merlin์ ์ํด ์ถ๊ฐ๋ ๊ฒ (์๋ง๋ TOMATO ํ๋ก์ ํธ/ํ์จ์ด์์ ์จ ๊ฒ์ผ ๊ฒ์).
OpenVPN์ PPTP๋ณด๋ค ํจ์ฌ ํจ์จ์ ์ด๊ณ ์ ์ฐํ๋ฉฐ ์์ ํ๋ค๊ณ ์ฌ๊ฒจ์ง๋๋ค.
OpenVPN ์๋ฒ๊ฐ ์ด๋ฏธ ํฌํจ๋์ด ์์ผ๋ฏ๋ก, ASUS ๋ผ์ฐํฐ์ ์์ ํ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๊ธฐ ์ํด ์ค์นํ ํ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์์ ์ํํด์ผ ํฉ๋๋ค:
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ์์ชฝ ๋์์ ์์ ํ ์ฑ๋์ ์์ฑํ๊ณ ์ ์งํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ํค์ ์ธ์ฆ์๋ฅผ ์์ฑ
- ASUS OpenVPN ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ด ํค์ ์ธ์ฆ์ ์ฌ์ฉ
- OpenVPN ์๋ฒ์ ์ ๊ทผ์ด ํ์ํ ์ฅ์น์ OpenVPN ํด๋ผ์ด์ธํธ ์ค์น
- ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ํค์ ์ธ์ฆ์ ์ฌ์ฉ
- ์ปค๋ฎค๋ํฐ ํ์ด์ง๋ [http://openvpn.net/index.php/download/community-downloads.html]์ ์์นํด ์์ต๋๋ค.
- ์ด ๊ธ์ ์์ฑํ๋ ์์ ์์, ์ต์ ๋ฒ์ (2013.01.08์ ์ถ์)์ 2.3.0์ ๋๋ค.
- ํด๋น ํ์ด์ง์์ Windows ์ค์น ํ๋ก๊ทธ๋จ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
OpenVPN ์๋ฒ ๋ฐ ๋ค์์ ํด๋ผ์ด์ธํธ์ฉ ์ธ์ฆ์์ ํค ์์ฑ์ ์ํ ์์ฒด ์ธ์ฆ ๊ธฐ๊ด(CA) ์ค์
OpenVPN 2.0 ๊ตฌ์ฑ์ ๊ตฌ์ถํ๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ PKI(๊ณต๊ฐ ํค ์ธํ๋ผ)๋ฅผ ํ๋ฆฝํ๋ ๊ฒ์ ๋๋ค. PKI๋ ๋ค์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- ์๋ฒ์ ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ํ ๋ณ๋์ ์ธ์ฆ์(๊ณต๊ฐ ํค๋ก๋ ์๋ ค์ง)์ ๊ฐ์ธ ํค, ๊ทธ๋ฆฌ๊ณ
- ๊ฐ ์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์์ ์๋ช ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ง์คํฐ ์ธ์ฆ ๊ธฐ๊ด(CA) ์ธ์ฆ์์ ํค.
OpenVPN์ ์ธ์ฆ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฐฉํฅ ์ธ์ฆ์ ์ง์ํฉ๋๋ค. ์ฆ, ํด๋ผ์ด์ธํธ๋ ์๋ฒ ์ธ์ฆ์๋ฅผ ์ธ์ฆํด์ผ ํ๋ฉฐ ์๋ฒ๋ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ์ธ์ฆํด์ผ ์ํธ ์ ๋ขฐ๊ฐ ํ๋ฆฝ๋ฉ๋๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋ ์๋
๋ฐฉ์ ์ธ์ฆํ ๋, ์ ์๋ ์ธ์ฆ์๊ฐ ๋ง์คํฐ ์ธ์ฆ ๊ธฐ๊ด(CA)์ ์ํด ์๋ช ๋์๋์ง ๋จผ์ ํ์ธํ ๋ค์, ์ด์ ์ธ์ฆ๋ ์ธ์ฆ์ ํค๋์ ์ ๋ณด, ์๋ฅผ ๋ค์ด ์ธ์ฆ์์ ์ผ๋ฐ ์ด๋ฆ(common name) ๋๋ ์ธ์ฆ์ ์ ํ(ํด๋ผ์ด์ธํธ ๋๋ ์๋ฒ)์ ํ ์คํธํฉ๋๋ค.
์ด ๋ณด์ ๋ชจ๋ธ์ VPN ๊ด์ ์์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐ๋์งํ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
- ์๋ฒ๋ ์์ฒด ์ธ์ฆ์/ํค๋ง ํ์ํ๋ฉฐ, ์ฐ๊ฒฐํ ์ ์๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ๊ฐ๋ณ ์ธ์ฆ์๋ฅผ ์ ํ์๊ฐ ์์ต๋๋ค.
- ์๋ฒ๋ ๋ง์คํฐ CA ์ธ์ฆ์์ ์ํด ์๋ช ๋ ํด๋ผ์ด์ธํธ๋ง ํ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ CA ๊ฐ์ธ ํค์ ์ ๊ทผํ ํ์ ์์ด ์ด ์๋ช ํ์ธ์ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์, CA ํค(์ ์ฒด PKI์์ ๊ฐ์ฅ ๋ฏผ๊ฐํ ํค)๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ์๋ ์์ ํ ๋ค๋ฅธ ๊ธฐ๊ณ์ ์์ ์ ์์ต๋๋ค.
- ๊ฐ์ธ ํค๊ฐ ์์๋ ๊ฒฝ์ฐ, ํด๋น ์ธ์ฆ์๋ฅผ CRL(์ธ์ฆ์ ์ฒ ํ ๋ชฉ๋ก)์ ์ถ๊ฐํ์ฌ ๋นํ์ฑํํ ์ ์์ต๋๋ค. CRL์ ์ฌ์ฉํ๋ฉด ์ ์ฒด PKI๋ฅผ ๋ค์ ๊ตฌ์ถํ ํ์ ์์ด ์์๋ ์ธ์ฆ์๋ฅผ ์ ํ์ ์ผ๋ก ๊ฑฐ๋ถํ ์ ์์ต๋๋ค.
- ์๋ฒ๋ ์ผ๋ฐ ์ด๋ฆ๊ณผ ๊ฐ์ ๋ด์ฅ๋ ์ธ์ฆ์ ํ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด๋ผ์ด์ธํธ๋ณ ์ก์ธ์ค ๊ถํ์ ์ ์ฉํ ์ ์์ต๋๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ ์๊ณ๊ฐ ๋๋ต ๋๊ธฐํ๋์ด ์์ง ์์ผ๋ฉด ์ธ์ฆ์๊ฐ ์ ๋๋ก ์๋ํ์ง ์์ ์ ์์์ ์ ์ํ์ธ์.
์ด ์น์ ์์๋ ๋ง์คํฐ CA ์ธ์ฆ์/ํค, ์๋ฒ ์ธ์ฆ์/ํค, ๊ทธ๋ฆฌ๊ณ 3๊ฐ์ ๋ณ๋ ํด๋ผ์ด์ธํธ ์ธ์ฆ์/ํค๋ฅผ ์์ฑํฉ๋๋ค.
PKI ๊ด๋ฆฌ๋ฅผ ์ํด OpenVPN๊ณผ ํจ๊ป ์ ๊ณต๋๋ ์ผ๋ จ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Linux, BSD ๋๋ ์ ๋์ค ๊ณ์ด OS๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์์ ์ด๊ณ OpenVPN ๋ฐฐํฌํ์ easy-rsa
ํ์ ๋๋ ํ ๋ฆฌ๋ก cd=ํ์ธ์. RPM ํ์ผ์์ OpenVPN์ ์ค์นํ ๊ฒฝ์ฐ, =easy-rsa
๋๋ ํ ๋ฆฌ๋ ๋ณดํต /usr/share/doc/packages/openvpn
๋๋ /usr/share/doc/openvpn-2.0=์์ ์ฐพ์ ์ ์์ต๋๋ค. ํธ์งํ๊ธฐ ์ ์ ์ด ๋๋ ํ ๋ฆฌ๋ฅผ =/etc/openvpn=๊ณผ ๊ฐ์ ๋ค๋ฅธ ์์น๋ก ๋ณต์ฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋์ผ OpenVPN ํจํค์ง ์
๊ทธ๋ ์ด๋ ์ ์์ ํ ๋ด์ฉ์ด ๋ฎ์ด์ฐ์ฌ์ง์ง ์์ต๋๋ค. =.tar.gz
ํ์ผ์์ ์ค์นํ ๊ฒฝ์ฐ, easy-rsa
๋๋ ํ ๋ฆฌ๋ ํ์ฅ๋ ์์ค ํธ๋ฆฌ์ ์ต์์ ๋ ๋ฒจ ๋๋ ํ ๋ฆฌ์ ์์ ๊ฒ์
๋๋ค.
Windows๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ช ๋ น ํ๋กฌํํธ ์ฐฝ์ ์ด๊ณ =cd C:\Program Files\OpenVPN\easy-rsa=ํ์ธ์.
๋ค์ ๋ฐฐ์น ํ์ผ์ ์คํํ์ฌ ๊ตฌ์ฑ ํ์ผ์ ์ ์ ํ ์์น๋ก ๋ณต์ฌํฉ๋๋ค(์ด ์์
์ ๊ธฐ์กด์ vars
๋ฐ openssl.cnf
ํ์ผ์ ๋ฎ์ด์๋๋ค):
init-config
์ด์ vars ํ์ผ(Windows์์๋ vars.bat
)์ ํธ์งํ๊ณ KEY_COUNTRY
, KEY_PROVINCE
, KEY_CITY
, KEY_ORG
, KEY_EMAIL
๋ณ์๋ฅผ ์ค์ ํ์ธ์. ์ด ๋งค๊ฐ๋ณ์๋ค์ ๋น์๋์ง ๋ง์ธ์.
๋ค์์ผ๋ก, PKI๋ฅผ ์ด๊ธฐํํฉ๋๋ค. Linux/BSD/Unix์์๋:
. ./vars
./clean-all
./build-ca
Windows์์๋:
vars
clean-all
build-ca
๋ง์ง๋ง ๋ช ๋ น์ด์ธ (build-ca)๋ ๋ํํ openssl ๋ช ๋ น์ด๋ฅผ ํธ์ถํ์ฌ ์ธ์ฆ ๊ธฐ๊ด(CA) ์ธ์ฆ์์ ํค๋ฅผ ์์ฑํฉ๋๋ค:
./build-ca
์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ถ๋ ฅ/ํ๋กฌํํธ๋ฅผ ์์ฑํฉ๋๋ค:
1024๋นํธ RSA ๊ฐ์ธ ํค ์์ฑ ์ค ............++++++ ...........++++++ ์ ๊ฐ์ธ ํค๋ฅผ 'ca.key'์ ๊ธฐ๋ก ์ค ----- ์ธ์ฆ์ ์์ฒญ์ ํฌํจ๋ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ผ๋ ์์ฒญ์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์ง๊ธ ์ ๋ ฅํ๊ฒ ๋ ๋ด์ฉ์ Distinguished Name ๋๋ DN์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ์๋นํ ๋ง์ ํ๋๊ฐ ์์ง๋ง ์ผ๋ถ๋ ๋น์๋ ์ ์์ต๋๋ค. ์ผ๋ถ ํ๋์๋ ๊ธฐ๋ณธ๊ฐ์ด ์์ต๋๋ค. '.'์ ์ ๋ ฅํ๋ฉด, ํด๋น ํ๋๋ ๋น์์ง๋๋ค. ----- ๊ตญ๊ฐ ์ด๋ฆ (2๊ธ์ ์ฝ๋) [KG]: ์ฃผ ๋๋ ์ง๋ฐฉ ์ด๋ฆ (์ ์ฒด ์ด๋ฆ) [NA]: ์ง์ญ ์ด๋ฆ (์: ๋์) [BISHKEK]: ์กฐ์ง ์ด๋ฆ (์: ํ์ฌ) [OpenVPN-TEST]: ์กฐ์ง ๋จ์ ์ด๋ฆ (์: ๋ถ์) []: ๊ณตํต ์ด๋ฆ (์: ๋น์ ์ ์ด๋ฆ ๋๋ ์๋ฒ์ ํธ์คํธ ์ด๋ฆ) []:OpenVPN-CA ์ด๋ฉ์ผ ์ฃผ์ [[email protected]]:
์์ ์ํ์ค์์ ๋๋ถ๋ถ์ ์กฐํ๋ ๋งค๊ฐ๋ณ์๋ vars ๋๋ vars.bat ํ์ผ์ ์ค์ ๋ ๊ฐ์ผ๋ก ๊ธฐ๋ณธ ์ค์ ๋์์ต๋๋ค. ๋ช ์์ ์ผ๋ก ์ ๋ ฅํด์ผ ํ๋ ๋งค๊ฐ๋ณ์๋ ๊ณตํต ์ด๋ฆ๋ฟ์ ๋๋ค. ์ ์์์๋ โOpenVPN-CAโ๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๋ค์์ผ๋ก, ์๋ฒ์ฉ ์ธ์ฆ์์ ๊ฐ์ธ ํค๋ฅผ ์์ฑํฉ๋๋ค. Linux/BSD/Unix์์๋:
./build-key-server server
์ด์ ๋จ๊ณ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋๋ถ๋ถ์ ๋งค๊ฐ๋ณ์๋ ๊ธฐ๋ณธ ์ค์ ํ ์ ์์ต๋๋ค. ๊ณตํต ์ด๋ฆ์ด ์กฐํ๋ ๋ server=๋ฅผ ์
๋ ฅํ์ธ์. ๋ค๋ฅธ ๋ ์ง๋ฌธ์ ๋ํ ์๋ต์ =y=๋ก ํด์ผ ํฉ๋๋ค: =์ธ์ฆ์์ ์๋ช
ํ์๊ฒ ์ต๋๊น? [y/n]
๋ฐ 1๊ฐ ์ค 1๊ฐ์ ์ธ์ฆ์ ์์ฒญ์ด ์ธ์ฆ๋์์ต๋๋ค. ์ปค๋ฐํ์๊ฒ ์ต๋๊น? [y/n]
.
3๋ช ์ ํด๋ผ์ด์ธํธ์ฉ ์ธ์ฆ์ ๋ฐ ํค ์์ฑ
ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ด์ ๋จ๊ณ์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
./build-key client1
./build-key client2
./build-key client3
ํด๋ผ์ด์ธํธ ํค๋ฅผ ๋น๋ฐ๋ฒํธ๋ก ๋ณดํธํ๋ ค๋ฉด build-key-pass
์คํฌ๋ฆฝํธ๋ฅผ ๋์ ์ฌ์ฉํ์ธ์.
๊ฐ ํด๋ผ์ด์ธํธ์ ๋ํด ํ๋กฌํํธ๊ฐ ๋ํ๋ ๋ ์ ์ ํ /๊ณตํต ์ด๋ฆ/์ ์
๋ ฅํ์ธ์. ์ฆ, client1
, client2
, ๋๋ =client3=์
๋๋ค. ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ํด ๊ณ ์ ํ ๊ณตํต ์ด๋ฆ์ ์ฌ์ฉํ์ธ์.
Diffie Hellman ๋งค๊ฐ๋ณ์ ์์ฑ
OpenVPN ์๋ฒ๋ฅผ ์ํด Diffie Hellman ๋งค๊ฐ๋ณ์๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. Linux/BSD/