베지밀
[VPN 프로젝트] 윈도우-리눅스 간 WireGuard VPN 구성 본문
앞서 리눅스 간 WireGuard 구성을 간단히 진행해보았다.
이번에는 스위치/VPN 서버/PC 간 WireGuard 터널링 구성을 진행해보도록 하자.
VPN 서버는 각각 Windows 11 WireGuard, Ubuntu 24.04 를 이용하여 구축하였고
각 보라색 선은 서로 다른 LAN을 의미한다.
(참고로 스위치에서는 VLAN을 통해 LAN을 구분하였다.
PC1에 FTP 서버를 구성한 뒤, VPN 터널을 통해 데이터를 주고 받는 과정을 확인해보자.
기본 설정
스위치
각 스위치에는 Vlan을 할당하고 라우팅 설정을 통해 통신이 가능하도록 구성했다.
각 PC 방화벽 해제
테스트를 위해 ICMP 트래픽에 대해 임시로 허용해주도록 하자.
(기본적으로 Windows에서는 icmp 트래픽이 차단되어있다.)
마찬가지로 FTP 서버와 관련한 설정도 모두 허용해준다.
Windows WireGuard 서버 구축
https://www.wireguard.com/install/
Installation - WireGuard
Installation Windows [7, 8.1, 10, 11, 2008R2, 2012R2, 2016, 2019, 2022] Download Windows Installer Browse MSIs Download from App Store $ sudo apt install wireguard Android [play store & direct apk file] Download from Play Store Download APK File Download f
www.wireguard.com
위 링크에서 WireGuard 프로그램을 설치할 수 있다.
이전 포스팅과 동일한 형태로 설정파일을 작성하면 된다.
윈도우의 경우, key gen이 자동으로 이루어지므로 wireguard 프로그램에서 생성된 public key 및 private key를 이용하면 된다.
리눅스는 이전 포스팅과 동일하게 설정
통신 결과 확인
Windows에서 트래픽 확인
Wireshark로 vpn 트래픽을 확인해보자.
우선 vpn 활성 전
PC1, PC2의 로컬 ip를 사용하여 통신하고 있다.
특히 ftp 패킷의 경우, 유저의 이름, 패스워드, 실행시킨 명령어가 모두 노출되고 있음을 확인했다.
패킷이 암호화되지 않기 때문에 외부에 주요 정보가 노출될 수 있다.
vpn 활성 후
WireGuard라는 프로토콜을 통해 vpn 서버의 ip로 출발지/목적지가 변경된 것을 확인했다.
패킷의 data를 확인해봐도 사용자의 입력값이 노출되지 않는다.
리눅스에서 트래픽 확인
tcpdump 명령어를 통해 살펴보자.
vpn 활성 전
마찬가지로 유저 이름, 패스워드, 실행시킨 명령어가 모두 노출되고 있다.
패킷이 암호화되지 않아 외부에 주요 정보가 노출되고 있다.
vpn 활성 후
앞서 설정한 대로 56789 udp 포트를 통해 wireguard 패킷이 송수신되고 있다. 마찬가지로 출발지/목적지 ip는 서버의 ip로 변경된 것을 확인했다.
사용자의 입력값 역시 노출되지 않는다.
이번 테스트를 통해 양 단말이 VPN 암호화 프로토콜로 안전하게 송수신하는 과정을 알아보았다.
Wireshark와 tcpdump를 통해 패킷을 분석한 결과, 기존에는 패스워드/송수신지 정보를 확인할 수 있었던 반면 vpn 적용 후 wireguard 프로토콜로 캡슐화되어 udp 전송되는 것을 확인했다.
최근 WireGuard에서 키 교환 과정을 TLS로 변경한 형태의 방화벽 기능들이 제공되고 있다. 이를 통해 설정이 간편하고 빠르며 안정적인 VPN 서비스 제공이 가능할 것으로 기대한다.