간단판 : Wireguard 설치/설정 : Ubuntu/Openwrt/Android/iOS/macOS

이전에 쓴 글이 너무 길어서, 나중에 볼 때 뭔 말인지 이해가 안될 가능성이 99.9% 다. 따라서, 여기는 설정만 간단히 정리해놓기로 한다.

공개키쌍 생성 (리눅스 계열)

서버든 클라이언트등, 무조건 공개키쌍이 있어야 한다. 다음 명령으로 만들 수 있다.

wg genkey | tee privatekey | wg pubkey > publickey

서버/클라이언트 : 저장소 추가 (우분투)

우분투 18.10 까지는 저장소가 필요하다.

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard

서버

IP Forward 설정

/etc/sysctl.conf 에서 net.ipv4.ip_forward 을 활성화 해야 한다. 주석을 지우고 재부팅.

설정파일 만들기

[Interface]
Address = VPN 으로 할당할 IP 주소. (192.168.2.1/24 등. 아래 부연 설명 참고)
PrivateKey = <서버의 개인키>
ListenPort = 적절히 선택
SaveConfig = false
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE

[Peer]
PublicKey = <클라이언트의 공개키>
AllowedIPs = <클라이언트에서 할당한 IP 주소> (192.168.2.3 등)

[Peer]
#Android Phone
PublicKey = <클라이언트의 공개키>
AllowedIPs = <클라이언트에서 할당한 IP 주소> (192.168.2.4 등)

[Peer]
#iPad
PublicKey = <클라이언트의 공개키>
AllowedIPs = <클라이언트에서 할당한 IP 주소> (192.168.2.5 등)

enp0s3ip a 등으로 이름을 정확히 확인 후 넣어준다.

서버 주소 형식?

서버의 Address 는 IP/24 형식으로 넣어줘야 VPN 이 연결되었을 때도 호스트명을 사용할 수 있다. 이 기능을 사용하려면 클라이언트의 DNS 를 공유기 내부 IP 주소로 할당해줘야 한다.
적어도 Openwrt 의 경우, 여기를 192.168.2.1 또는 192.168.2.1/32 로 넣어주면, 호스트명을 사용할 수 없다.

만약, 192.168.1.4 가 ‘Desktop-lab1’, 192.168.1.5 가 ‘Labtop-lab2’ 등으로 정의되어 있다고 했을 때, Wireguard 연결 후 ping Desktop-lab1 으로 연결되게 하려면, 서버 주소를 IP/24 형식으로 넣어줘야만 한다.

클라이언트

우분투의 경우 서버와 마찬가지로 PPA 추가가 필요할 수도 있으며, wireguard 를 설치하면 된다.
Android/iOS 는 해당 마켓에서 wireguard 검색 후 공식 프로그램을 설치한다.
macOS 는 App Store 에서 wireguard 검색 후 설치한다.

키 생성은 서버와 같은 방식을 사용한다.
클라이언트 자신의 IP 를 그대로 사용할지, 서버 IP 를 사용할지를 결정하고 진행한다.

클라이언트 IP 그대로 사용

[Interface]
Address = (서버와 같은 대역으로, 맘대로 정한다.)
PrivateKey = <이 클라이언트의 개인키>
SaveConfig = false (True 를 원하면 True 로.)

[Peer]
PublicKey = <서버의 공개키>
AllowedIPs = <VPN ID 대역>, <서버 LAN IP 대역> (ex. 192.168.2.0/24, 192.168.1.0/24)
Endpoint = <서버 주소>:서버 포트(서버 설정에서 ListenPort 로 설정한)

서버 IP 사용

[Interface]
Address = (서버와 같은 대역으로, 맘대로 정한다.)
PrivateKey = <이 클라이언트의 개인키>
SaveConfig = false (True 를 원하면 True 로.)

[Peer]
PublicKey = <서버의 공개키>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <서버 주소>:서버 포트(서버 설정에서 ListenPort 로 설정한)

::/0 는 IPv6 용이므로, 필요하지 않으면 안 써줘도 된다.

이렇게 생성한 파일로 Wireguard 를 실행하면 된다. Android/iOS 는 qrencode 를 사용해서 QR 코드로 설정파일을 불러오고, macOS 는 wireguard 실행 후 설정파일을 불러오면 된다.

우분투에선 wg-quick 명령을 사용한다. GUI 는 없다.

# 시작
sudo wg-guick up wg0.conf

# 정지
sudo wg-guick down wg0.conf

안녕하세요. 글 남겨주셔서 고맙습니다.