Public IP가 없는 PC에 띄워놓은 서비스에 접근하기 위한 방법으로 VPN과 Reverse Proxy를 활용할 수 있습니다.
VPN 서버를 구축하고 활용하면 물리적으로 떨어져 있는 컴퓨터를 같은 Local Network에 있는 것처럼 사용할 수 있고,
Reverse Proxy를 같이 활용하면 Public IP가 없는 컴퓨터에 VPN 연결 없이 접근 가능합니다.
이 글에서는 WireGuard, Subspace, CoreDNS를 소개합니다.
준비
이전 글에서 수행 했던 것처럼 WireGuard VPN을 위한 51820번 udp 포트를 열어줍니다.
Subspace
VPN 프로토콜 중 하나인 WireGuard는 매우 빠른 성능과 비교적 간편한 설치때문에 인기가 많습니다.
WireGuard VPN Server 공식문서를 통하여 설치하는 경우에는 Client를 등록, 관리하는 과정이 까다롭습니다.
조금더 쉽게 Client를 등록, 관리 해주는 도구는 PiVPN이 있습니다.
하지만 CLI가 익숙하지 않은 경우에는 사용하기 어렵습니다.
Subspace는 WireGuard VPN Server를 쉽게 구축할 수 있을 뿐만아니라 GUI를 통해서 Client를 관리할 수 있게 해줍니다.
아래의 내용은 이곳에서도 확인할 수 있습니다.
clear iptable
Oracle machine에는 iptable에 설정된 기본적인 규칙이 있습니다.
이 규칙을 삭제하지 않으면, WireGuard VPN Server가 정상동작하지 않을 수 있습니다.
# Install wireguard, resolvconf
sudo add-apt-repository -y ppa:wireguard/wireguard
sudo apt update
sudo apt install -y wireguard resolvconf
# Disable systemd-resolved listener if it blocks port 53.
sudo sh -c "'DNSStubListener=no' >> /etc/systemd/resolved.conf"
sudo systemctl restart systemd-resolved
# Load modules.
sudo modprobe wireguard
sudo modprobe iptable_nat
sudo modprobe ip6table_nat
# Enable modules when rebooting.
sudo sh -c "'wireguard' > /etc/modules-load.d/wireguard.conf"
sudo sh -c "'iptable_nat' > /etc/modules-load.d/iptable_nat.conf"
sudo sh -c "'ip6table_nat' > /etc/modules-load.d/ip6table_nat.conf"# Check if systemd-modules-load service is active.
sudo systemctl status systemd-modules-load.service
# Enable IP forwarding.
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1# Enable self-forwarding
sudo iptables -I FORWARD -i wg0 -o wg0 -j ACCEPT
sudo netfilter-persistent save
sudo netfilter-persistent reload
# Set DNS server.
sudo sh -c "nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head"
sudo sh -c "nameserver 1.1.1.1 >> /etc/resolvconf/resolv.conf.d/head"
sudo systemctl start resolvconf.service
sudo systemctl enable resolvconf.service
sudo resolvconf -u
다른 docker-compose.yml과 겹치지않게 directory를 만들어 줍니다.
1
mkdir ~/subspace;cd ~/subspace
아래의 명령을 수행하여 docker-compose.yml을 작성합니다.
Community버전과 다른점은 dnsmasq를 disable할 수 있는 option을 추가하였습니다.
Subspace container의 dsnmasq가 잘 동작하지 않기 때문에 이 역할은 Pi-hole로 대체합니다.
Subspace를 접근할 때 사용할 Domain Name을 SUBSPACE_HTTP_HOST에 적어줍니다.
이전 글을 참고하여 Subdomain vpn(vpn.example.duckdns.org)이 127.0.0.1:5000으로 전달 되도록 설정합니다.
Browser에서 vpn.example.duckdns.org으로 접속합니다.
Subspace GUI화면이 보이면 성공입니다.
Subspace 사용법
Subspace는 서버에서 발급한 Config를 Client에서 사용합니다.
Config 발급
로그인 한뒤에 오른쪽 상단에서 Device Name을 적고 Platform을 선택한 뒤에 Add Device를 누릅니다.
Download your WireGuard config를 눌러서 config파일을 다운받습니다.
이번 글에서는 Wireguard를 이용하여 VPN을 구축하는 방법을 알아보았습니다.
Public IP는 없지만 Internet이 되는 서버에서 동작하는 서비스에 접근하기 위해서 VPN만을 사용한다면,
Client가 VPN이 연결되었을 때만 접근 가능하기 때문에 사내 서비스에 활용할 수 있습니다.
하지만 이전 글에서 소개한 Reverse Proxy까지 활용이 되면,
Client가 VPN 연결 없이도 서비스에 접근이 가능합니다.