OpenWrt wireguard 설치 및 설정

사전준비

  • vpn을 위한 firewall zone 설정을 하지 않았다면 여기를 참고해 firewall zone설정을 먼저 하시기 바랍니다.
  • ddns 설정을 하지 않은경우 ddns 설정을 먼저 하세요

wireguard 설치

opkg update
opkg install wireguard

개인키와 공개키 생성

개인키와 공개키 생성합니다. 라우터를 위한 server키와 모바일을 위한 client1키, 사무실에서 쓸 client2키를 생성해 보겠습니다.

cd /etc/
umask 077
mkdir wg
cd wg
wg genkey | tee wgserver.key | wg pubkey > wgserver.pub
wg genkey | tee wgclient1.key | wg pubkey > wgclient1.pub
wg genkey | tee wgclient2.key | wg pubkey > wgclient2.pub

생성된 개인키 및 공개키를 cat 명령으로 확인해 봅니다.

[email protected]:/etc/wg# ls -al
drwx------    2 root     root           448 Nov  2 22:09 .
drwxr-xr-x    1 root     root          3008 Nov  2 22:08 ..
-rw-------    1 root     root            45 Nov  2 22:09 wgclient1.key
-rw-------    1 root     root            45 Nov  2 22:09 wgclient1.pub
-rw-------    1 root     root            45 Nov  2 22:09 wgclient2.key
-rw-------    1 root     root            45 Nov  2 22:09 wgclient2.pub
-rw-------    1 root     root            45 Nov  2 22:09 wgserver.key
-rw-------    1 root     root            45 Nov  2 22:09 wgserver.pub
[email protected]:/etc/wg# cat wgserver.pub
XG3OorP+MSgXz/rCi2Cg3VX120/SX8th5e7uPSle+CA=
[email protected]:/etc/wg#
[email protected]:/etc/wg# cat wgserver.key
+JiHB9WkvgXtMCrxmuiEGueILZkGvX+0cnr+TxP0q2M=
[email protected]:/etc/wg#
[email protected]:/etc/wg# cat wgclient1.pub
Gh1qdIT9elLx0xBQ7fwoB91dhEmLTdLlRXHVlOBXsBc=
[email protected]:/etc/wg#
[email protected]:/etc/wg# cat wgclient1.key
YF2zo+CAI3M7+lGya92jUA1Xp54AlGPLny04PCjSlm4=
[email protected]:/etc/wg#
[email protected]:/etc/wg# cat wgclient2.pub
+ScR/k/SLDdwPcel9CF5y7G6IRhb1gTx8nXx6iWjjAo=
[email protected]:/etc/wg#
[email protected]:/etc/wg# cat wgclient2.key
cFpNRE3M47PAkMenSJD/UtPz3TiVt366XXIdslAoMk4=

인터페이스 생성 및 서버/피어 설정

wireguard를 위한 새로운 인터페이스 wg0를 만들고 서버 및 피어의 설정을 하기위해 /etc/config/network 화일을 수정합니다. wg0는 ip 대역은 10.9.0.0/24 로 wg0 자신은 10.9.0.1, client1(phone)은 10.9.0.2, client2(office)는 10.9.0.3를 부여 하고 포트는 31194를 사용하도록 하였습니다. 위에서 생성한 개인키와 공개키를 각각의 option private_key, option public_key 에 넣어줍니다.

vi /etc/config/network

config interface 'wg0'
        option proto 'wireguard'
        option private_key '+JiHB9WkvgXtMCrxmuiEGueILZkGvX+0cnr+TxP0q2M='
        option listen_port '31194'
        list addresses '10.9.0.1/24'

config wireguard_wg0
        option description 'wireGuard_wg0'
        option public_key 'XG3OorP+MSgXz/rCi2Cg3VX120/SX8th5e7uPSle+CA='
        option route_allowed_ips '1'
        option endpoint_port '31194'
        option endpoint_host 'myhost.duckdns.org'
        list allowed_ips '10.9.0.0/24'

config wireguard_wg0
        option description 'client1(phone)'
        option public_key 'Gh1qdIT9elLx0xBQ7fwoB91dhEmLTdLlRXHVlOBXsBc='
        option endpoint_port '31194'
        option persistent_keepalive '25'
        list allowed_ips '10.9.0.2/32'

config wireguard_wg0
        option description 'client2(office)'
        option public_key 'DyD7wx4N21cqDRSGQzUHUrtOoQIK9iWrlB7zrjkBGBw='
        option endpoint_port '31194'
        list allowed_ips '10.9.0.3/32'


방화벽 포트 개방

/etc/config/firewall을 수정하여 udp 31194 포트를 개방합니다.

vi /etc/config/firewall

...
config rule
        option name 'Allow-wireguard'
        option src 'wan'
        option proto 'udp'
        option dest_port '31194'
        option target 'ACCEPT'

서비스 재시작

network 및 firewall 데몬을 재시작합니다. (network 재시작은 ssh 연결이 종료되므로 ssh 재연결이 필요합니다.)

/etc/init.d/firewall restart
/etc/init.d/network restart

클라이언트 설정

모바일용 wireguard app을 앱스토어에서 다운받아 설치하거나 pc용은 https://www.wireguard.com/install/ 에서 다운로드하여 설치합니다. (client2의 설정예는 다음과 같습니다.)

  1. [Interface] 부분은 클라이언트에 대한 부분입니다.
    • PrivateKey : client2의 개인키를 넣습니다.
    • Address : client2의 ip를 넣습니다.
    • DNS : dns를 넣습니다. (아래 예시는 OpenWrt 라우터 dns를 이용합니다.)
  2. [peer] 부분은 서버에 대한 설정입니다.
    • PublicKey : 서버의 공개키를 넣습니다.
    • AllowedIPs : 서버에서 허용하는 ip 대역
    • Endpoint : 서버의 주소 및 포트입니다.
[Interface]
PrivateKey = cFpNRE3M47PAkMenSJD/UtPz3TiVt366XXIdslAoMk4=
Address = 10.9.0.3/32
DNS = 192.168.1.1

[Peer]
PublicKey = XG3OorP+MSgXz/rCi2Cg3VX120/SX8th5e7uPSle+CA=
AllowedIPs = 0.0.0.0/0
Endpoint = myhost.duckdns.org:31194

참고사이트

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

3  +  1  =