OpenWrt wireguard 설치 및 설정

사전준비

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

wireguard 설치

opkg update
opkg install wireguard-tools kmod-wireguard luci-app-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 '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

참고사이트

4 Comments

  1. openwrt에서 여러가지 세팅을 해보고있는데 어디에 질문을 해야할지 몰라서 요청드립니다.
    제가 제대로 이해하고있는지 확인해주실수 있을까요?
    openwrt에서 vpn을 통해 모든 망을 해외로 잡고있는데, 외부 네트워크에서 openwrt에 접근하고 싶습니다.

    저는 지금 openwrt의 vpn으로 surfshark wireguard를 사용하고있습니다.
    그래서 모든 망이 vpn을 통해서 해외로 잡혀있는 상황입니다.
    여기서, /etc/config/network 의 설정은

    config interface 'WG0'
    option proto 'wireguard'
    option private_key 'mGZE6jkcd2Te39ZEsrYOnTZcx87i7N---------'
    list addresses '10.14.0.3/16'
    option peerdns '0'
    list dns '162.252.172.57'
    list dns '149.154.159.92'

    config wireguard_WG0
    option description 'Surfshark Peer'
    option public_key 'YJSjrc/WWOjQUyUi4iYcHb7LsWWoCY----------'
    option endpoint_host '154.---------'
    option endpoint_port '51820'
    option route_allowed_ips '1'
    list allowed_ips '0.0.0.0/0'

    이렇게 되어있는 상태입니다.

    여기서 제가 외부 네트워크에서 로컬로 접근하려면
    interface 'WG0'에 외부네트워크를 위한 wireguard를 추가로 할당하고 외부에서는 새로만든 wireguard로 접속을 하는 형식으로 이해했는데,
    이미 surfshark peer가 모든 ip를 다 잡고있는 상황에서는 어떻게 해야할까요?
    현재 wireguard_WG0 는 surfshark의 서버라서 private key 확인할 수 없는 상황입니다.

    아니면 wireguard에 대한 inteface를 하나 더만드는 방식으로 2개의 vpn을 구성해야 할까요?

    아 참고로 이 세팅을 하려는 이유는 wol을 하려는 이유에서입니다.

  2. 문제가 해결되어 댓글을 삭제하려했는데 삭제가 안돼서 답글 남깁니다.
    일단 peer가 surfshark 쪽으로 되어있어서 vpn을 통하는건 어려울거같아서 그냥 wol은 wan에 포트포워딩을 통해서 해결했습니다.
    포스팅하신 글들 덕분에 openwrt세팅을 전부 성공적으로 마칠수 있었습니다. 감사드립니다

  3. 압도적 감사

    저도 세팅을 하고나서 찾아보니까 말씀하신 대로더라구요.
    그래서 새로 댓글 남긴것처럼 우회해서 해결했습니다. 감사합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

6  ×  1  =