많은 VPN 서비스들에서 제공하는 기본 프로그램들은 실행해서 연결하면
해당 기기에서 사용하는 모든 트래픽을 다 VPN으로 통과시킨다.
원하는 패킷만 선별적으로 VPN을 거치는 것을 분할 터널(Split Tunnel) 이라고 부르는데,
이 기능을 지원하지 않거나, 설정하기 불편한 서비스들이 있음...
(VPN을 "거치고 싶은 프로그램"만 선택하고 싶은데, 프로그램 설정에서는 VPN을 거치지 "않을" 프로그램만 선택할 수 있게끔 한다던지)
이걸 좀 더 편하게 하기위한 툴을 소개하고 설정하는 법을 알려주겠음
먼저, 내가 사용한 VPN 서비스는 Mullvad
Wireguard로 설정했음.
지금 사용하고 있는 VPN 서비스가 없다면,
왠만하면 Wireguard, 그리고 연결 설정을 지원하는 VPN을 고르는게 좋음
지원되는 VPN 제공자:
AirVPN, Cyberghost, ExpressVPN, FastestVPN, Giganews, HideMyAss, IPVanish, IVPN, Mullvad, NordVPN, Perfect Privacy, Privado, Private Internet Access (PIA), PrivateVPN, ProtonVPN, PureVPN, SlickVPN, Surfshark, TorGuard, VPNSecure.me, VPNUnlimited, VyprVPN, WeVPN, Windscribe.
Wireguard는 비교적 새로운 프로토콜이고, 터널 방식이기 때문에 연결 속도가 빠른 장점이 있음.
여기서 말하는 연결 설정은 VPN 공급 업체에서 제공하는 프로그램 이외의 방식으로도 연결을 구성할 수 있도록 제공해야 한다는 의미임
이것도 요즘 VPN 돈 주고 팔려면 대부분 지원하기에 조금만 찾아보면 여부를 알 수 있을거임
먼저 VPN에 연결할 수 있는 설정들을 얻어내야 한다.
이제 TunnlTo라는 Wireguard 클라이언트를 다운로드 받을거임,
실행하면 다음처럼 나올거임
에러 보고 허용할지는 알아서 결정하고,
정책 동의 체크한 뒤 계속
Wiresock이라는 소켓 프로그램을 받아야 함
나는 설치돼있지만 구버전이라서 업데이트하라는 표시가 뜬 상태
설치 진행하고나면
아래처럼 나옴
여기서 벙 찌는 애들 좀 있을지 모르지만 어렵지 않으니 따라오너라
일단 테마 색 배합이 눈이 오히려 피로해져서 밝은 테마로 바꿨음
왼쪽 위 [File] - [New Tunnel] 클릭
좌측의 Tunnel Details, Local Interface, Remote Peer 세 개 항목을 설정해줄 거다.
아래 Commands는 VPN 연결을 시작하거나 끝내거나 할 때 실행할 쉘 명령들을 지정해주는 거, Wireguard 좀 써본 사람들은 알 거임
Wiresock은 프록시를 설정해주는 용도인데 둘 다 프로 라이센스가 필요하고,
고급 사용자용 설정이니 왠만한 상황에서는 설정해 줄 필요는 없으니 넘어감
Tunnel Details
터널의 이름을 지정(맘대로)
Note는 설명임, 지정하든 말든 맘대로
Entry Location은 시작 연결 지점이 어디인지 표시하는 용도
Exit Location은 마지막 연결 지점이 어디인지 표시하는 용도 (멀티 홉 사용할 때)
[Save] 클릭
Local Interface
아까 VPN 사이트에서 얻어낸 구성 파일(conf, wireguard 설정 파일)을 열어보면
[Interface] 부분과 [Peer] 부분이 있음, 여기서는 [Interface] 부분을 참고하면 됨
Address에서 주소를 복사해서(/32, /128은 빼고) 붙여넣은 뒤 [Add] 버튼을 누르면 주소가 등록된다.
DNS도 마찬가지로 등록해주면 됨
Private Key도 복사해서 붙여넣으면 되고, 붙여넣으면 Public Key는 자동으로 입력됨.
[Save] 클릭
Remte Peer
여기서는 .conf 파일에서 [Peer] 부분을 참고하면 됨
Endpoint Address에 입력할 값은 Endpoint에서 찾으면 되는데,
구성 파일에서는 Endpoint = {IP}:{Port} 처럼 돼있을 거임
IP 부분만 복사해서 Endpoint Address에 입력.
Port 부분을 복사해서 Endpoint Port에 입력.
PublicKey 복사해서 붙여넣는다.
VPN 서비스에 따라서 Preshared Key라고 하는 키를 주는 경우가 있음, 일종의 비밀번호 처럼 키를 하나 더 주는 경우인데,
이게 있다면 이것도 붙여 넣어줘야 한다.
그리고 Persistent Keep-Alive 라는 항목이 있다.
아래는 TMI일 수도 있음, 잘 모른다면 25초로 놓자. (혹은 0초로 사용하다가 문제가 생기는 거 같다면 25초로 수정)
TunnlTo에서는 이 항목의 기본값이 25초로 돼 있는데,
Wireguard의 기본 및 권장 사항에서는 이 값이 0초(꺼짐)이다.
터널방식인 Wireguard는 서로 정보를 주고받지 않을 때는 통신을 중단한다.
(Wireguard 논문에 따르면, 불필요한 패킷을 최대한 없앰(Silence)으로써 네트워크 스캐너 등의 감청 수단을 최대한 회피하려는 목적)
쉽게 설명하자면, 계속 연결되어 있는 전화같은 느낌이 아니라 메세지를 주고받는 느낌임
근데 그러면 NAT(또는 방화벽)을 사용하는 경우에 아래에 같은 문제가 생길 수 있다.
* NAT은 A<->B 사이에 통신이 이루어 질 때 "이 장비들이 통신하고 있구나" 라는 정보를 기록(record) 한다. 이를 매핑(mapping)이라고 함.
A: B야 이거 처리해서 나한테 결과 보고해줘
A의 NAT: (A의 요청을 B에게 전송함)
A의 NAT: (30초~1분 뒤) 연결이 끊겼네? (A와 B의 매핑 기록을 삭제함)
B: (대략 2분 뒤)작업 다 끝났어 여기 결과야
A의 NAT: 너 뭐냐? 왜 뜬금없이 우리 집에 와서 데이터 전송함?
이 경우를 방지하기 위한 옵션이 Persistent Keep-Alive이고,
서버와 Ping을 계속 주고받아서 연결이 유지되고 있음을 NAT에 알리기 위한 목적으로 사용한다.
[Save]클릭하고 다시 홈으로 돌아가보자
Tunnel에서 방금 생성한 터널을 선택한다.
이제 규칙을 만들어야 함
기본적으로 chrome, firefox, edge 등등의 규칙이 있던데 나는 이걸 무시하고 새로 만들거임.
[File] - [New Rule] 클릭
이름을 맘대로 지정하고,
Type에서 하나를 골라서
VPN을 적용할 프로그램을 선택하면 되는데,
Process Name = 실행 파일의 이름(.exe 포함해도 되고 안해도 되고)
Process Path = 단일 실행 파일의 경로를 특정해서 선택 가능
Folder Path = 지정한 폴더에 있는 모든 실행 파일에 VPN 적용
프로그램 실행 파일의 이름이 뭔지 모르겠다면
[작업 관리자] - [프로세스] - 해당 프로그램 우클릭( > 표시가 있다면 > 표시를 누르고 아래 나온 프로그램 우클릭) - [파일 위치 열기]
이를 적용할 프로그램마다 하나씩 해 줘야 함.
구버전에서는 직접 다 적을 수 있게 해줬는데... 처음 등록할 땐 불편해도 이후에 관리하기는 편해진 거 같음
프로그램을 설정했다면 [Create] 눌러라
그리고 이제 같은 LAN에 연결할 때는 VPN을 통하지 않도록 해야 함.
[File] - [New Rule] 클릭
이름 맘대로 지정
Type = IPv4 Range
Value = {본인의 LAN 영역 지정}
이 랜 영역을 자기가 모른다면, cmd를 열어서 ipconfig을 치면 알 수 있음
진짜 정말 모르겠다면 '내부 IP 찾기' 등으로 검색해보면 금방 나옴
대부분 192.168.0.0/24 같은 형식으로 지정할 거임
나는 LAN 네트워크에서 서브넷을 넓게 쓰기땜에 /20인거
[Create] 눌러서 생성
이제 앞서 생성한 규칙들을 등록해주면 된다.
VPN을 등록할 프로그램들을 Include에 등록하고,
마지막에 생성한 로컬 네트워크 규칙은 Exclude에 등록한다.
설정을 모두 마친 모습
이제 [Enable]을 누르면 VPN이 연결된다.
진짜 연결됐는지 확인하러 가보자
정상적으로 연결된 거 확인 가능.
IPv4 주소에 (SOCKS through Wireguard)라는 표시가 뜨는데, 이건 브라우저에서 SOCKS5 프록시를 거쳐서 VPN에 연결했다는 말임.
VPN 가이드들을 볼 때마다 한 번씩 등장하는 SOCKS5의 역할은,
일종의 킬 스위치(Kill-Switch)를 흉내내는 용도임.
이 킬 스위치가 뭐냐면,
"사이트 들어가서 볼 일 다 보고나니깐 VPN 꺼져있더라 ㅅㅂ" 같은 일을 방지하기 위해 VPN이 꺼져있으면 연결 자체를 막는 기능임
VPN 제공자들이 말하는 프록시 연결은,
VPN 연결 시에만 접속 가능한 프록시 서버를 둠으로써 VPN이 꺼져있으면 연결이 안되도록 막기 위한 존재다.
SOCKS5 프록시는 VPN 사용 케이스에는 적합하지 않다는 의견도 있고,
또 다양한 토렌트 클라이언트에도 SOCKS5 프록시는 지원하지만 토렌트 다운로드/업로드 기능을 주로 봤을 때는 권장하지 않는다고 함.
이 프록시 설정은 VPN 제공자마다 다를 수 있고, 해당 VPN 사이트에서 어렵지 않게 찾을 수 있으니 생략하겠음.
