이전에 쓴 글이 너무 길어서, 나중에 볼 때 뭔 말인지 이해가 안될 가능성이 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 등)
enp0s3 는 ip 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