이번 포스팅에서는 VPN에 대해 알아보고 wireguard를 실습해보도록 하겠습니다.
VPN은 이미 익숙한 개념이어서 저번에 짧게 다루고 딥하게 보진 않았는데, 이번에 세미나 발표를 준비하면서 사내 VPN 등등 엄청 많이 찾아봤는데, 생각한 것보다 훨씬 내용이 딥하더라고요.
https://poiri3r.tistory.com/135
[Network] 가상사설망 VPN ( Virtual Private Network )
저번에 프록시에 이어서 이번 포스팅에서는 VPN에 대해서 알아보겠습니다. 프록시랑 VPN은 어느정도 비슷한 부분이 있습니다.차이점을 알아보기 전에 먼저 VPN이라는게 뭔지 살펴보겠습니다. VPN
poiri3r.tistory.com
개념은 해당 포스팅 참고해주시고, 오늘은 직접 VPN을 구축해보겠습니다.

사내 네트워크 구성은 IPsec이 아닌 SSL VPN을 통해서 이루어집니다
IPsec은 site to site고 SSL VPN은 개인 -> network 입니다.
최근엔 제로트러스트 아키텍처 구현을 위해서는 wireguard를 많이 사용을 합니다.
wireguard는 IPsec과 SSL과는 다른 별도의 VPN 프로토콜입니다.
wireguard가 정말 단순한 프로토콜이고 설정이 짧아서 장점ㅇ ㅣ있습니다.
https://www.youtube.com/watch?v=EzJVboUoU5c&t=895s

이 영상을 한 10번 돌려본 것 같습니다. TITAN 서버에서 wireguard-go를 통해 구현을 했는데, 이게 VPN 역할을 하면서 더 세밀한 접근 제어를 커스터마이징하는 것 같은데

여기서 client가 wireguard를 통해 접속하면 TITAN Server가 기존의 VPN Gateway 역할을 해주는 것 같고, client랑 TITAN 서버로 터널링을 합니다.

이게 좀 중요한 것 같은데, 저 중간 Connector Group이 토스 환경에서의 스위치역할을 해서 TItan서버를 통해 접속시 목적지까지 라우팅하는 역할을 하는 것 같습니다.
근데 이 wireguard가 실제로 토스에 적용을 하기엔 보안적인 부분이 있으니 이걸 직접 fork해서 TITAN Protocol에 제로트러스트 요구사항을 충족시키기 위한 정보를 추가했다고 하는데, 이건 VPN과는 직접적인 연관은 없으니 생략하겠습니다.
이걸 왜 설명을 했냐면 제가 정말 인사이트를 많이 받은 영상이기도 하고, 토스같은 대기업에서도 직접 fork해서 사용할만큼의 성능이 보장되어 있다~ 이겁니다.
그래서 VPN을 어떻게 구축할거냐 하면, 저 TITAN이란 서버 자체는 사실 SASE와 비슷한거라 생략이 가능하고, VPS를 하나 연결해서 connector group처럼 외부와의 연결에 사용하겠습니다.

살짝 이런 느낌이고요, 될지 안될지는 모르겠습니다.
제 연구실에서는 디스코드가 방화벽인지 막혀있는데 이걸 VPS Server까지 터널링해서 보내고, VPS서버를 다시 외부 인터넷으로 연결하는걸 테스트해볼겁니다.
이론상 안될 이유가 없긴 하네요

..??? 그냥 aws로 가겠습니다 ..
ubuntu 인스턴스를 하나 생성했습니다

제 컴퓨터 linux에 wireguard도 설치했습니다.

wireguard 명령어는 wg로 붙이면 됩니다.

wg genkey | tee private.key | wg pubkey > public.key
이 명령어로 개인키와 공개키를 설정할 수 있습니다.
서버 공개키와 개인키를 만들었고 이제 클라이언트 공개키와 개인키를 만들면 됩니다.
wg genkey | tee client_private.key | wg pubkey > client_public.key
이제 통신 터널을 만들기 위해 AWS에서 inbound 규칙을 설정해야합니다.
인바운드 규칙 만들때 wireguard는 UDP 프로토콜을 사용하므로 UDP로 변경해주고, 51820번 포트를 사용하면 됩니다.
aws가 VPN Gateway역할을 해야하므로 Wireguard를 설치하겠습니다

ip route가 ens5인걸 확인했고, wireguard설정을 만들어주겠습니다
/etc/wireguard 디렉토리에 wg0.conf를 만들어줬습니다.

postup은 wg0이 켜진 직후 실행할 명령어를, postdown은 wg0이 꺼질때 실행할 명령어 입니다.
(*사진 속 postup의 POSTROUTING -i가 -o로 수정되어야합니다)
iptables -A FORWARD -i wg0 -j ACCEPT는 리눅스 방화벽 규칙을 설정하는 명령어로, FORWARD에 추가합니다.
FORWARD는 이 서버가 목적지가 아니라 패킷이 경유하는 곳임을 알려줍니다.
-i wg0은 입력 인터페이스가 wg0인, 즉 WireGuard 터널에서 EC2로 들어온 패킷을 말하고, -j ACCEPT에서 허용합니다.
iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo wg


wg0에 대한 주소도 10.10.0.1로 잘 떠있습니다.
이제 제 컴퓨터에 클라이언트 설정을 넣겠습니다.

저는 wsl에 설치했는데, 윈도우에다 깔면 설정을 더 편하게 가능합니다
AllowedIPs = 0.0.0.0은 모든 트래픽을 VPN으로 보내겠다는 뜻입니다.
는 제 wsl에는 DNS가 제대로 없어서 실패했고요, DNS 한 줄을 지우겠습니다.





그러니까 wireguard가 아예 안켜지는데 포트 443번이 권한문제로 막혀있는것 같습니다
제 wsl에서 패킷이 나가는지를 확인하기 위해 wsl창을 하나 더 키고 확인했습니다.

제 wsl에서 패킷은 정상적으로 나가긴 하는데 ...
wsl -> 윈도우 -> ec2 과정에서 윈도우 -> ec2가 되는지를 확인을 해야할 것 같은데
오랜만에 wireshark를 설치해서 확인을 했습니다.

이더넷에서는 포트가 잘 나가고 있습니다 .. 그러면 우분투 문제는 아닐거고 .. 학교 공유기/NAT 이건 제가 확인을 못하는 부분이니.. 어떻게 해볼까요.
지인에게 USB로 wifi연결하는 도구? 가 있다고 해서 핫스팟으로 테스트를 해봤는데, 핫스팟은 연결이 안되더라구요...
음 .. 제일 유력한건 학교에서 51820번 포트를 막는 것 같습니다.
안되는걸 계속 붙잡고 있는건 의미가 없으니 일단 여기서 포스팅은 마무리 하고 내일 이어서 해보겠습니다.
근데 갑자기 생각났는데 이미 학교에서 디스코드 할때는 protonVPN을 썼단 말이죠?
이것도 어쨋든 vpn protocol을 쓸텐데 왜 이건 되고 wireguard는 안될까요
proton vpn패킷을 추적해서 사용하는 포트를 알아내면 wireguard 포트를 확인해서 연결 가능하지 않을까요 ?

근데 키고나서 보니 이미 프로토콜이 wireguard로 되어있고 TCP로 연결이 되어있네요

근데 proton은 TCP 443을 사용하니 참고할만한 방법은 아닌 것 같네요 ㅠ
TCP로 연결해서 암호화를 해서 필터링을 우회하는 방식이라는데, 이걸 따라하려면 udp2raw OpenVPN TCP 443 등 추가적인 방식이 필요하다고 합니다.
근데 제가 원하는건 경량 vpn이지 무거운 vpn이 아니라.. 방법을 조금 더 고민해보겠습니다.
그리고 와이파이로 연결했을 때 성공적으로 vpn처럼 동작을 한다면, 시도해보겠지만 아직 확실한건 아니니 몇가지를 더 해봐야할 것 같습니다.
일단 내일 추가 하도록 하겠습니다
===========================================================================

노트북에 window wireguard를 설치해줬고 터널을 추가했습니다.
그리고 서버에 Peer를 추가해주려는데 이상한 점을 찾았습니다

분명히 어제는 latest handshake가 안떴었단 말이죠??
저 ip주소도 학교망 ip가 맞아서 .. 근데 제가 어제 일부로 컴퓨터를 안꺼두고 계속 패킷이 나가게 하고 자고온건데, 이게 계속 핸드쉐이크가 발생하진 않는거 보면 또 아닌 것 같기도 하고... 잘 모르겠습니다 일단 노트북으로 테스트를 해봐야겠네요

서버에 peer를 추가로 등록해줬습니다.

노트북에 wireguard 설정도 해줬고요.


...???
다시 처음부터 만들어줬고요,

바로바로 잘 되네요 ..?
이러면 제 PC 설정 문제는 아니었던걸로 ..

handshake도 잘 들어갑니다.
이러면 설정문제 빼면 네트워크 단에서의 문제밖에 없는데 .. 이건 TCP로 변환할 방법을 조금 생각을 해봐야 할 것 같습니다.
이것도 찾아봤는데 이걸 할거면 아예 TCP로 암호화해서 캡슐화를 한번 더 해야되는데 OpenVPN을 이용해서 해야되는데.. OpenVPN을 사용하는 순간 원래 목적과는 조금 다른 느낌이어서 일단 여태까지 한걸 다듬고 추후에 이어서 해봐야겠습니다.
얼마전 bob 설명회를 듣고나니 필기랑 면접을 더 준비해야 할 것 같아요.

allowdIPS를 0.0.0.0/0으로 변경해서 노트북에서 나가는 모든 패킷이 aws를 들러서 나가도록 해줬습니다.

sudo tcpdump하니까 로그가 엄청나게 많이 뜹니다.
이거 서버 비용이 생각보다 많이 들 것 같네요 ...?

wireguard를 키기 전과 킨 후 curl ifconfig.me입니다. 기존에는 학교망 와이파이 대역이 떴다면 두번째 ifconfig.me를 쓰면

aws 대역이 뜹니다.
이게 제가 교내망이라는 특수망을 써서 그렇지 이걸로 애지간한 우회가 될 것 같긴합니다

VPN을 돈주고 살 필요가 없네요~
물론 VPN은 ip를 숨기는 것 외에도 최적화를 위해 여러 VPS 경로를 두고 가장 빠른 네트워크를 제공해주긴 합니다.
근데 무료버전 VPN은 너무 느리니 차라리 이렇게 직접 서버를 구성하는게 나을 것 같네요.
일단 aws요금이 무서우니 꺼두겠습니다..ㅎ
이번 포스팅 오랜만에 정말 길게 글을 썼는데 읽어주셔서 감사드립니다!
'취약점분석 (Blue Team) > Network' 카테고리의 다른 글
| 세미나 발표 자료 - 망분리로 보는 내부망 구조 (0) | 2026.05.12 |
|---|---|
| 국가 망분리 N2SF 가이드라인 1.0 정리 (0) | 2026.05.08 |
| 홈페이지 제작기 - 2 (0) | 2026.05.07 |
| 망분리 환경 운영 (vdi, 원격접속 통제) 토스 가디언즈 세미나 (0) | 2026.05.05 |
| [Network] ELK Stack (Elastic Stack) (0) | 2026.04.30 |