블로그 이미지
훅크선장

카테고리

분류 전체보기 (362)
사진이야기 (23)
펭귄컴퓨팅 (121)
컴퓨터보안 (84)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

태그목록

최근에 올라온 글

WireGuard Installation on OpenWRT 23.05.2

2024년 2월 현재, 인터넷 상에서 다양한 설치 글이 존재하나, 직접 실습해보고 검증해본 결과 아주 조금씩 놓치는 부분들이 있어서,

내 상황에 맞게 수정해서 다음과 같이 정리했습니다.

참고할만한 동영상 및 정보 : https://www.youtube.com/watch?v=6NIJcsJsRaM

 

1. 소프트웨어 설치
opkg update
opkg install luci-proto-wireguard wireguard-tools luci-app-wireguard qrencode
/etc/init.d/network restart

혹은 LuCI → System → Software에 접속하여 반드시 관리도구: 하단 “Update lists...” 버튼을 클릭하여 패키지 목록을 가져온 다음, 
위의 네 개 패키지를 찾아 설치한다. 
그 후 LuCI → System → Startup → Initscripts → network에서 restart를 누른다.

2. Wireguard 인터페이스 생성
LuCI → Network → Interfaces에서 "새로운 인터페이스 추가..."을 클릭한다.

이름: wg0 (인터페이스명을 지정할때, 일반적인 디바이스명 규칙을 따른 것인데, wireguard, vpn 등 원하는 이름을 넣으면 된다.)
protocol: WireGuard VPN
private key: 
public key: 
(키쌍은 "Generate new key pair" 버튼을 누르면 생성된다. 간편하게 생성하면 된다.)
listen port: 49152 (49152 ~ 65535 중에서 골라도 되고, 자기가 지정해도 된다. 방화벽을 열어줘야 하기 때문에, 적당한 포트를 골라서 사용한다. 다른 매뉴얼 등을 보면, 일반적으로 51820 포트번호를 사용하는 것 같다.)
ip addresses: 172.16.8.1/24 (해당 인터페이스에 할당할 IP이다. 사설 IP대역을 하나 지정하면 된다. 10.9.0.1/24, 192.168.253.1/24 등으로 설정하면 된다. 이 IP가 게이트웨이 역할을 하므로, Peer 설정할때, 해당 IP 대역을 기억하고 있어야 한다.)
※ 만약 접속할 Peer 가 여러 곳이라면, 반드시 IP 주소를 여러 개로 나누어 등록해야 한다. 172.16.8.1/24 에 Peer 첫번째, 172.27.10.1/24 에 Peer 두번째 이런 식으로, 다른 Peer들끼리 같은 IP를 사용하면, 두번째 접속하는 Peer는 통신이 안된다!! 네트워크 라우팅 충돌이 발생하므로! 주의!!!

※ Peer 개수가 여러개 라면, 172.16.8.1/24 가 아닌, 172.16.8.1/32 와 같이 Host IP 주소로 딱 지정해주는 것도 좋은 방법이다.
고급설정 탭으로 이동해서, MTU를 1412로 설정해준다.

Peers 탭으로 이동해서, 연결되는 Peer 혹은 클라이언트를 설정한다.
먼저 “피어 추가” 버튼을 눌러준다. 그리고 다음과 같이 입력한다.
설명 : My Peer (접속대상에 대한 이름을 적당하게 지정해준다. Client01 등과 같이 임의로 정해준다.)
공개 키: 
private key: 
(키쌍은 "Generate new key pair" 버튼을 누르면 생성된다. 간편하게 생성하면 된다.)
Preshared Key: 꼭 사용할 필요가 없다.
Allowed IPs: 172.16.8.2/24(현재 설정하는 피어(클라이언트)가 Wireguard VPN 터널 안에서 쓰도록 허용한 IP 대역이다. 앞의 서버 측 설정할 때 사용했던 IP 대역과 특정 IP 하나를 지정해서 써주면 된다.)
※ 만약 접속할 Peer 가 여러 곳이라면, 반드시 IP 주소를 여러 개로 나누어 등록해야 한다. 172.16.8.2/24 에 Peer 첫번째, 172.27.10.2/24 에 Peer 두번째 이런 식으로, 다른 Peer들끼리 같은 IP를 사용하면, 두번째 접속하는 Peer는 통신이 안된다!! 네트워크 라우팅 충돌이 발생하므로! 주의!!!

※ Peer 개수가 여러개 라면, 172.16.8.2/24 가 아닌, 172.16.8.2/32 와 같이 Host IP 주소로 딱 지정해주는 것도 좋은 방법이다.

Route Allowed IPs : 꼭 체크해준다.
Endpoint Host: XXX.XXX.XXX.XXX (반드시 서버측의 wan IP 주소 혹은 도메인명을 적어준다. 현재 설정하고 있는 OpenWRT 공유기의 WAN 인터넷 공인 IP 주소가 입력되어야 한다.)
Endpoint Port: 49152 (앞의 Wireguard 인터페이스에서 지정한 listen port에 지정했던 포트 번호를 넣는다.)

※ 공인IP 주소를 가지지 않는 클라이언트 접속이므로, Endpoint 2개 항목은 입력할 필요가 없다.
Persistent Keep Alive: 25 (일종의 권장값이다. NAT 환경 등에서 접속을 유지하기 위해서 사용하는 값이다.)

입력이 완료되면, Configuration Export 옆의 "Generate configuration..." 버튼을 누르면, 현재 Peer(클라이언트)의 설정을 볼 수 있다.
설정파일의 내용을 가져다가, Peer(클라이언트)의 설정에 사용할 수 있다. 
QR Code를 가지고, 모바일 디바이스에 바로 Peer(클라이언트) 설정을 편하게 입력할 수 있다.

이상의 내용은 SSH 접속을 통하여, 직접 설정 파일을 가지고 만들어 낼 수도 있다. 
/etc/config/network 파일을 편집하여서 할 수도 있다. 아래처럼 추가하면 된다.

config interface 'wg0'
    option proto 'wireguard'
    option private_key '[비밀키 내용 입력]'
    option listen_port '49152'
    list addresses '172.16.8.1/24'
    option mtu '1412'

config wireguard_wg0
    option description 'My Peer'
    option public_key '[공개키 내용 입력]'
    option private_key '[비밀키 내용 입력]'
    list allowed_ips '172.16.8.0/24'
    option route_allowed_ips '1'
    option endpoint_host 'XXX.XXX.XXX.XXX'
    option endpoint_port '49152'
    option persistent_keepalive '25'


생성된 Peer(클라이언트)의 설정파일은 다음과 같다.

[Interface]
PrivateKey = [비밀키 내용 입력]
Address = 172.16.8.2/24
ListenPort = 49152
DNS = 192.168.xxx.1 (서버측 공유기의 LAN IP 주소가 DNS를 담당한다.)

[Peer]
PublicKey = 공개키 내용 입력]
# PresharedKey not used
AllowedIPs = 0.0.0.0/0, ::/0 (AllowedIPs는 VPN을 거칠 IP를 의미한다. 0.0.0.0/0으로 되어있다면 모든 접속을 VPN을 거쳐서 하게 된다.)
Endpoint = XXX.XXX.XXX.XXX:49152
PersistentKeepAlive = 25

3. 방화벽 Zone 설정
공유기 내부의 방화벽을 VPN이 사용할 수 있도록 열어주어야 한다.
LuCI → Network → Firewall에서 설정 할 수 있다. 
General Settings 탭에서 Zones 하단에 “Add”를 눌러 새로운 Zone을 만든다.

Name: wg0_vpn (원하는 이름으로 선정한다. wireguard, myvpn 등을 사용할 수도 있다.)
Input: Accept
Output: Accept
Forward: Reject
Masquerading: 체크 (VPN 네트워크에서 다른 영역으로 통신을 하려면, 반드시 필요)
MSS clamping: 체크 (VPN 네트워크에서 다른 영역으로 통신을 하려면, 반드시 필요)
Covered Networks: wg0 (이전 인터페이스쪽에서 새로 생성한 인터페이스 명칭을 찾아서 지정한다.)
Allow forward to destination zones: VPN Zone에서 다른 Zone으로 접속을 허용하는 곳으로, LAN 영역과 WAN 영역을 접근하기 위해서는 lan과 wan을 모두 선택해서 지정한다. 네트워크 구성에 따라 lan과 wan을 하나씩만 선택할 수 있으나, 일반적으로는 lan과 wan 모두를 선택하는 것이 좋다.
Allow forward to source zones: 다른 Zone에서 VPN Zone으로 접근을 허용하는 것인데, 정말 특별한 경우가 아니면, lan만 선택한다.

이 작업은 /etc/config/firewall을 수정하여서 할 수도 있다.
config zone
    option name 'wg0_vpn'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'REJECT'
    option masq '1'
    option mtu_fix '1'
    list network 'wg0'

config forwarding
    option src 'wg0_vpn'
    option dest 'lan'

config forwarding
    option src 'wg0_vpn'
    option dest 'wan'

config forwarding
    option src 'lan'
    option dest 'wg0_vpn'

4. 방화벽 Traffic Rule 설정

이제 서버측의 접속 포트 Listen Port를 열어준다.

Traffic Rules 탭에 들어가 “Add”를 누른다.

Name: Allow-Wireguard (기본적으로 사용된는 작명 규칙에 맞게 Allow-Wireguard로 한다.)
Protocol: UDP (Wireguard VPN은 UDP만을 사용하므로, 기본 설정된 TCP는 제거하고,UDP 하나만 지정한다.
Source zone: wan (인터넷쪽 공유기의 외부에서의 접속이므로 wan을 지정한다.)
Destination port: 49152 (앞의 과정에서 지정했던 서버 포트번호 49152을 입력한다.)
Action: accept (포트 접속 허용 규칙이므로, accept를 지정한다.)

이 작업은 /etc/config/firewall을 수정하여서 할 수도 있다.

config rule
    option name 'Allow-Wireguard'
    list proto 'udp'
    option src 'wan'
    option dest_port '49152'
    option target 'ACCEPT'

5. 접속 테스트
클라이언트 쪽에 Wireguard 앱을 설치하고, 앞의 인터페이스 -> wg0 수정 -> Peers 수정 에 가면,
Configuration Export 옆의 "Generate configuration..." 버튼을 누르면, 현재 Peer(클라이언트)의 설정을 볼 수 있다.

Peer(클라이언트)의 설정파일 내용을 복사해서, PC에 설치한 Wireguard 앱의 새로운 Tunnel 설정으로 만들어서 사용할 수 있고,
또는 QR Code를 가지고, 모바일 디바이스에 바로 Peer(클라이언트) 설정을 편하게 입력할 수 있다.
접속을 활성화하면,
Luci에서 Status -> Wireguard 로 가보면, 접속 현황을 볼 수 있다.
※ logread -f 명령에 의한, 프로세스 접속로그는 나타나지 않는다. 커널 VPN이라서... OpenVPN은 이 명령어로 접속로그를 볼 수 있지만, Wireguard는 안된다.

6. 기기 재부팅
커널 VPN 이다보니, 설정 변경이나 Peer 추가 등의 작업 후에는 반드시 기기를 재부팅해야만 한다. 
매우 불편한 점이기는 하다~!

6. 인터페이스 재시작
네트워크 -> 인터페이스  로 가서, wg0 인터페이스를 재시작한다.

※ 재부팅을 해서, 커널을 다시 시작해야 한다고 하는 경우도 있다 한다. 인터페이스 재시작으로 vpn 터널이 활성화되지 않는다면, 기기 재부팅을 해보는 것도 방법이다. 

Posted by 훅크선장
, |