강좌라기 보다는...삽질을 정리한겁니다.
회원 몇분이 제가 사용하고 있는 해외 클라우드를 활용한 개인용 VPN에 문의를 해주셔서 정리한 김에 이곳에 게시합니다.
저 역시 초보이고 이것저것 참조해서 한 터라 중간에 빠진 부분이나 잘못된 세팅이 있을 수 있습니다.
개요
- 해외 리전의 오라클 클라우드에 wireguard 서버 설치 및 VPN 프로파일 발행
- PC, 스마트폰, 안드TV 등에 wireguard 앱 설치후 해당 프로파일 등록하여 VPN 연결 사용
- 집 서버의 트랜스미션을 Wireguard에 연결하여 VPN 사용 (서버 전체가 아닌 트랜스미션만)
- 오라클 클라우드 IP로 잡힙니다.
- 오라클 클라우드 네트워크 대역폭을 사용하므로 빠르지 않습니다.
- 트랜스미션의 경우 빠를땐 초당 8~10메가 정도 받습니다.
- 국내 클라우드인 경우 해외에서 연결하면 국내 방송 시청이 가능하겠죠?
1. 제 환경
- NAS : G4600/16G, OMV6(Debian) + Docker + Portainer
- 클라우드 서버 : 오라클 프리티어(미국 산호세 리전), 1G/1G * 2개 인스턴스 (메인으로 하나만 사용)
2. VPN 서버 설치를 위한 기본 사항
- 클라우드 리전이 되도록 해외 리전 사용, 국내 리전인 경우 VPN 해도 국내 IP로 잡히니 큰 메리트는 없어요
- 집 서버와 클라우드 서버에 Docker, Portainer 설치 (포테이너 기준으로 셋업을 설명함)
- VPN에 연결하고자 하는 클라이언트 기기 (서버, PC, 모바일, 안드TV 등등 어떤거라고 Wireguard 클라이언트 앱 설치가 가능하면 가능합니다)
3. 클라우드 Docker에 Portainer를 사용하여 Wireguard 서버 설치
- 사용하는 이미지 : weejewel/wg-easy:latest
- 일단 ssh 콘솔에서 다음과 같이 입력하고 실행합니다. (메모장에 옮겨서 자신의 설정으로 변경하고 불필요한 주석 지워서 사용하세요)
$ docker run -d \
--name=wg-easy \
-e WG_HOST=xxx.xxx.xxx.xxx \ => 클라우드 서버의 공인 IP
-e WG_PORT=51823 \ => 클라우드 서버 Wireguard 포트, 디폴트 51820에서 변경 필수
-e PASSWORD=ppppppp \ ==>웹 어드민용 패스워드(아이디는 없음)
-v /usr/config/wg:/etc/wireguard \ ==> 설정과 발행한 키가 저장되는 곳, 저의 경우 찾기 쉽게 (-v /usr/config/wg:/etc/wireguard \)로 설정함
-p 51823:51820/udp \ ==> 들어오는 포트를 51823으로 변경 필수
-p 51823:51820/tcp \ ==> 들어오는 포트를 51823으로 변경 필수
-p 51824:51821/tcp \ ==> 들어오는 포트를 51824으로 변경 필수
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
weejewel/wg-easy
- 위의 명령어 실행하면 자동으로 이미지 다운로드와 콘테이너가 생성됩니다.
- 포트를 디폴트 값인 51820, 51821을 => 51823, 51824로 변경 꼭 해주셔야 합니다. 오라클의 경우 해당 포트가 다른 서비스에 점유되어있어서 충돌이 발생합니다. (이걸로 엄청 헤맸음)
- 포테이너에 들어가서 콘테이너가 잘 생성되어 구동되는지 확인합니다.
3. 오라클 클라우드 서버 포트 포워딩 설정
- 제 설정을 보려고 들어가보니 뭔지 막 틀어져 있고 바뀌어서 볼수가 없네요...
- 어쨌든 가상 IP 테이블 설정에 들어가셔서 외부포트 51823(udp, tcp), 51824(tcp)를 오픈하셔야 합니다. 다른 가이드를 참조하시기 바랍니다.
- 오라클 관리자 화면과 정책이 빠뀌어서 제 설정도 확인 못하네요...ㅠㅠ
4. wg-easy 관리자 화면 접속 및 폰으로 테스트
- http://클라우드IP:51824 로 접속하시면 관리자 화면을 보실 수 있습니다.
- 여기까지 오셨다면 90% 다 되었습니다.
- 키를 발행해서 wireguard 클라이언트가 설치된 폰에 설치해보시기 바랍니다. ==> 폰의 경우 QR로 하면 편함, PC나 안드TV는 파일을 다운받아 지정해줘야 함
- 폰의 IP가 클라우드 IP로 바뀌었다면 성공입니다.
- 유튜브 들어가면 화면에 영어콘텐츠가 마구 뜹니다.
5. 집 서버의 Transmission을 VPN으로 연결 (wireguard 클라이언트와 트랜스미션 동시 설치)
- wg-easy 관리자 화면에서 Transmission용 프로파일 파일을 생성하고 내 PC로 다운로드합니다.
- 다운받은 파일명을 wg0.conf 로 변경합니다.
(추가) - 중요한걸 빼먹었네요... 다운받은 파일을 아래 wireguard의 config 볼륨으로 설정한(/usr/config/wireguard) 디렌토리에 넣어줍니다.
- 다음을 포테이너의 Stack에 복사하고 디플로이합니다.
services:
wireguard:
image: linuxserver/wireguard:latest
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv4.conf.all.src_valid_mark=1
environment:
- PUID=1000 => 본인의 uid로 변경
- PGID=100 ==> 본인의 gid로 변경
- TZ=Asia/Seoul
ports:
- "9091:9091/tcp"
volumes:
- /usr/config/wireguard/wg0.conf:/config/wg0.conf ==> 저는 편의상 /usr/config/wireguard 란 디렉토리로 설정해서 사용합니다. 변경 가능합니다.
- /lib/modules:/lib/modules
labels:
com.centurylinklabs.watchtower.enable: "false" ==> watchtower에 의해 업데이트되는걸 방지합니다. 재시작되면 네트워크를 못찾는 경우가 있습니다. 이런 현상이 발생하면 포테이너/콘테이너 편집의 네트워크 항목에 들어가서 wireguard 네트워크로 변경해주심 됩니다.
restart: always
transmission:
image: linuxserver/transmission:latest
network_mode: "service:wireguard" ==> 이게 트랜스미션이 wireguard 네트워크로 터널링되도록 설정하는 부분입니다.
depends_on:
- wireguard
environment:
- PUID=65534 ==> 변경 가능합니다.
- PGID=100 ==> 변경가능합니다.
- TZ=Asia/Seoul
- TRANSMISSION_WEB_HOME=/combustion-release/
volumes:
- /usr/config/transmission:/config ==> 변경 가능
- /srv/dev-disk-by-uuid-aef039f0-89ec-4e02-933a-1ed0e59c3ac1/media/transmission/downloads:/downloads ==> 변경가능
- /srv/dev-disk-by-uuid-aef039f0-89ec-4e02-933a-1ed0e59c3ac1/media/transmission/watch:/watch => 변경가능
labels:
com.centurylinklabs.watchtower.enable: "false"
restart: always
6. 트랜스미션 VPN 동작 확인
- wg-easy에서 트랜스미션용으로 다운받은 파일(wg0.conf) 파일을 서버의 /usr/config/wireguard 에 카피
- 트랜스미션이 정상적으로 동작하면 OK
- wg-easy 관리자 화면의 트랜스미션에 발행한 항목에 연겼되었다고 불들어오면 VPN 연결 OK
7. 이상으로 마무리합니다.
- 수많은 삽질을 정리하자니 끝이 없네요.
- 제 설정을 그대로 따라하기 보다 힌트 정도 얻는다고 생각해주시기 바랍니다.
- 오라클 클라우드 사용시 포트 변경이 제 글의 핵심입니다. 수많은 삽질의 결과입니다.
마치며...제가 초보이고 삽질의 결과라 문의하시면 잘 모를 수 있습니다.
양해해 주세요~~~
트랴픽 제한이
있는지 잘 모르겠지만 저의 경우 월 100기가 정도 토렌트 받아도 제한 없었습니다.
한달 아웃바운드 10TB 입니다. (프리티어)
살짝 사용해도 5TB 되길레, vpn 으로 사용은 안하고 있습니다.
제서버(본인서버)에서 - /usr/config/wireguard/wg0.conf:/config/wg0.conf ==> wg0.conf 다운이 안받아집니다 뭐가문제일까요?
오라클 wg-easy의 어드민 패널애서 받아 이름을 wg0.conf 로 바꾼 파일을 해당 폴더에 넣어야합니다.
uuid-aef039f0-89ec-4e02-933a-1ed0e59c3ac1 이게 오클라 id인가요?
아. 아닙니다.
제 디스크 아이디입니다.
행복하게님의 디스크를 확인하셔서 트랜스미션의 downloads, watch 디렉토리를 지정하시먄됩니다.
sata 디스크라면 /srv 에 있있을겁니다.
downloads는 토랜트 파일이 다운로드 받는 위치이고 watch는 토린트 시드파일을 넣으면 자동으로 받는 겁니다.
혹시 오라클 wg-easy에 제 서버를등록 못하나요?
아마 트랜스미션 포트가 충돌나는 것 같습니다.
환경에서 포트변경으로 피해갈 수는 있겠지만 하나만 사영하는걸 추천드립니다.
위의 구성의 경우 언제 오라클 클라우드 측에서 계정 블럭을 할지 모르는 상황입니다.
오라클 클라우드 측에선 토렌트 이용 막고 있으며 가끔 단속해서 계정 정지 메일을 보내는 경우도 있다고 합니다.
그래서 대부분 오라클 클라우드를 이용하는 분들도 사설 VPN을 이용하시더라구요.
이 점 참고 되시면 좋겠습니다.
네. 사실 vpn은 해외 ip로 접속이 필요한 경우 사용할 용도이고 토렌트는 실험적으로 해봤어요.
약은 약사에게 vpn은 전문 서비스를…
지딱코님 감사합니다
gluetun 도커로 한방에 3개 묶었습니다 수많은 삽질은 한것같아요 비전공자는 노가다해야죠
잘됐네요. ㅎㅎ
고생하셨습니다~