
VPN 서버를 구축하는 날이 오는구나...
그래 왜 만드냐 하면... 나는 킥온 프로젝트를 진행하며 인프라 접근에 대한 고민을 항상 해왔던 것 같다.
현재 킥온의 인프라는 Terraform을 기반으로 yaml 파일을 통해 config 설정 후 각 개발자의 작업환경 ip를 인바운드규칙에 추가하여 보안을 관리하고 있었다.
하지만 개발자가 늘어나면서 작업환경이 많이 다양해지기면서 ip가 시시각각 변하기도 하고 인바운드 규칙 하나당 할당할 수 있는 ip들의 수가 제한 되어 있어 관리하기 어려워지기 시작했다.
(Terraform 레포지토리를 서버 개발자들에게 공유하고 ip 추가하는 법도 공유했지만, state 파일 관리, ip 삭제할 수 있는지 컨펌 하는 등 오히려 관리 비용이 너무 늘어나는 느낌이었다.)
그래서 이전 회사에서 경험 했고, 현 회사에서도 내부망을 이용하고 있는 만큼 네트워크적으로 해결해보자는 생각으로 무작정 라즈베리파이를 구매했다...!

근데 이거 사니까 너무 간지가 안나서 케이스도 사버림 케이스는 여기서 삼
(근데 사는게 맞음 개이쁨!)
이제 이 이쁜 귀요미 컴퓨터에 VPN 서버를 구축해보겠음
211.206.30.203Raspberry Pi OS Lite (64-bit) 선택





✅ 설정한 Wi-Fi로 자동 접속됨
공유기 관리자 페이지 접속 후:
고정 IP 할당192.168.45.101이렇게 하면 라즈베리파이 재부팅 시에도 IP가 바뀌지 않음
ssh pi@192.168.45.101
# 비밀번호 입력
sudo apt update
sudo apt install wireguard -y
wg genkey | tee server_private.key | wg pubkey > server_public.key
wg genkey | tee client1_private.key | wg pubkey > client1_public.key
필요한 클라이언트 수만큼 키를 반복 생성
/etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <server_private_key>
SaveConfig = true
PostUp = iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
[Peer]
PublicKey = <client1_public_key>
AllowedIPs = 10.0.0.2/32
PersistentKeepalive = 25
[Peer]
PublicKey = <client2_public_key>
AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25
# 추가 클라이언트...
클라이언트가 많다면 Peer 항목 계속 추가
🤬 여기서 진짜 빡치는 점! 만약 자기가 라즈베리 파이를 인터넷선이랑 연결했다면 wlan0 대신 eth0 넣으면 될듯? 이거 때문에 몇시간 씀 ㅋㅋ
- 인터넷 되도록 허용해주는거라고 함 (NAT 서버)
외부 포트: 51820
내부 IP: 192.168.45.101 (라즈베리파이 IP)
내부 포트: 51820
프로토콜: UDP
예: 211.206.30.203:51820 → 192.168.45.101:51820
✅ 공유기 NAT Loopback / Hairpin NAT 기능이 활성화되어 있어야 내부에서도 외부 IP로 접속 가능
유형 프로토콜 포트 범위 소스
All traffic ALL ALL {공유기 외부 ip}/24
[Interface]
PrivateKey = <client1_private_key>
Address = 10.0.0.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = <server_public_key>
Endpoint = {공유기 외부 IP}:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
✅ AllowedIPs = 0.0.0.0/0 으로 설정하면 Full Tunnel (모든 인터넷 트래픽을 VPN을 통해 전달)
sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0

sudo networksetup -setdnsservers Wi-Fi empty혹시 설정하시다 잘 안 되시면 댓글 남겨주세용. 달려갑니다 🏃💨