[OMV6] Gluetun을 이용하여 Transmission에 VPN 적용하기

 안녕하세요?

이번엔 OMV6에 설치해 둔 Transmission에 VPN을 적용하는 방법을 알아보겠습니다. OMV6 외에도 Docker를 설치한 환경이라면 활용 가능합니다.

VPN은 가설 사설망으로 외부의 접근을 막는 방법입니다. 인터넷은 기본적으로 매우 공개적인 상태인데, 그에 따른 악의적인 행위 시도를 막기 위해 저희의 통신을 암호화하는 것으로 보시면 되세요. 프록시 서버와 유사한 방식이지만 암호화에서 개념이 달라집니다.

VPN 설명 -출처 : Cloudflare

흔히 익명성을 위해 VPN을 많이 사용하시는데, 저희가 서버에 접속시 수 많은 정보들을 보내고, VPN 공급자들에게 저희 정보가 등록되어 있기 때문에, VPN을 이용하더라도 완전한 익명성은 기대하기 힘듭니다. 결국, VPN은 보안을 위한 또는 외국 IP 주소를 사용하기 위한 솔루션 정도로 사용하시는게 좋습니다.

VPN은 적용하는 방법에 따라 '기기 전체''Container 개별'로 나눌 수 있습니다. 이번엔 후자의 방법을 알아 보겠습니다.

자, 이제 설정을 해보도록 할까요?

먼저, VPN을 실행할 Container를 Docker hub에서 검색합니다. 저는 qmcgaw/gluetun을 사용해 보겠습니다.

제가 사용하는 Gluetun Container

2023년 8월 기준으로 Gluetun에서 이용 가능한 VPN 서비스는 아래와 같습니다. 변경될 수 있으니, 설치시 개발자 공지 사항을 참고하시길 바랍니다.

Supports: AirVPN, Cyberghost, ExpressVPN, FastestVPN, HideMyAss, IPVanish, IVPN, Mullvad, NordVPN, Perfect Privacy, Privado, Private Internet Access, PrivateVPN, ProtonVPN, PureVPN, SlickVPN, Surfshark, TorGuard, VPNSecure.me, VPNUnlimited, Vyprvpn, WeVPN, Windscribe servers


지원 가능한 VPN을 확인하셨다면, Overview 페이지에서 Docker Compose 예시를 복사해 옵니다.

Gluetun Compose 예시

Gluetun Container의 각 환경변수에 대해 주기를 해보았습니다. 더 자세한 사항은 개발자 wiki를 참고하시길 바랍니다.

version: "3"

services:

  gluetun:

    image: qmcgaw/gluetun

    container_name: gluetun #웬만하면 변경하지 않도록 합니다.

    # line above must be uncommented to allow external containers to connect.

    cap_add:

      - NET_ADMIN

    devices:

      - /dev/net/tun:/dev/net/tun

    ports: #VPN을 사용하고자 하는 포트를 기입합니다.

      - 8888:8888/tcp # HTTP proxy

      - 8388:8388/tcp # Shadowsocks

      - 8388:8388/udp # Shadowsocks

    volumes:

      - /yourpath:/gluetun #gluetun 설정 경로

    environment:

      - VPN_SERVICE_PROVIDER=ivpn #vpn 서비스 이름

      - VPN_TYPE=openvpn #vpn 방식, openvpn과 wireguard가 있습니다.

      #openvpn 또는 wireguard 하나만 남겨두세요.

      # OpenVPN:

      - OPENVPN_USER=

      - OPENVPN_PASSWORD=

      # Wireguard:

      # - WIREGUARD_PRIVATE_KEY=wOEI9rqqbDwnN8/Bpp22sVz48T71vJ4fYmFWujulwUU=

      # - WIREGUARD_ADDRESSES=10.64.222.21/32

      # Timezone for accurate log times

      - TZ=Asia/Seoul #시간대

      # Server list updater

      - UPDATER_PERIOD= #server.json 업데이트 주기


VPN 서비스에 따라 나라, 지역, 도시 환경변수 값이 조금씩 달라지는데, 각각을 서술하기 보단 예시만 보여드리겠습니다. 자세한 사항은 Gluetun wiki를 확인해 보시길 바랍니다.

Server Countries 값 예시 -출처 : Gluetun wiki

Server Cities 값 예시 -출처 : Gluetun wiki

각자 사용하시는 서비스에서 지원하는 방식에 따라 OpenVPN 또는 Wireguard 값을 기입합니다. 크게 수정할 곳은 빨간 박스를 표시해 둔 3곳 입니다. 아래 예시를 참고하시길 바랍니다.

Gluetun 실 적용 예시

작성 후 저장을 하고, 체크 및 UP을 진행합니다.

설치 완료된 Gluetun

설치한 Gluetun이 정상적으로 VPN 서비스에 연결되었다면, OMV 관리자 페이지에서 [서비스]-[Compose]-[서비스]로 이동하시면 healthy라고 상태가 표시되어 있을 것입니다.

VPN 연결 상태 확인

만약, unhealthy 상태이면 Gluetun의 Compose를 다시 확인해 봅니다.

VPN Container를 설정을 다 하였으니, Transmission에 VPN을 연결해 보겠습니다. 이 방법은 다른 Container에서도 활용 가능하기 때문에, 기본 개념을 알아 두시면 좋습니다. 아래의 설명을 보겠습니다.

Container들을 Gluetun에 연결하는 방법 -출처 : Gluetun wiki

1번은 Container와 VPN을 통합해서 설치할 때 사용하는 옵션입니다. 간단하지만 다른 Container엔 사용할 수 없더라구요. 만약 '나는 VPN은 Transmission만 사용하겠어'라 생각하시는 분들은 이렇게 Transmission을 설치할 때 Compose를 아래처럼 구성하시면 됩니다.

다.

---

version: "3"

services:

  gluetun:

    image: qmcgaw/gluetun:latest

    container_name: gluetun

    cap_add:

      - NET_ADMIN

    devices:

      - /dev/net/tun:/dev/net/tun

    ports:

      - 9091:9091/tcp

    volumes:

      - /ssd/appdata/gluetun:/gluetun

    environment:

      - TZ=Asia/Seoul

      - VPN_SERVICE_PROVIDER=

      - VPN_TYPE=wireguard

      - WIREGUARD_PRIVATE_KEY=

      - WIREGUARD_ADDRESSES=

      - SERVER_CITIES=Tokyo

    restart: unless-stopped

 

  transmission:

    image: linuxserver/transmission:latest

    container_name: transmission

    environment:

      - PUID=1000

      - PGID=1000

      - TZ=Asia/Seoul

      - USER= #optional

      - PASS= #optional

    volumes:

      - /ssd/appdata/transmission:/config

      - /srv/dev-disk-by-uuid-/torrent:/downloads

      - /srv/dev-disk-by-uuid-/torrent:/watch

    restart: unless-stopped

    network_mode: "service:gluetun"


이에 반해 2번 방법은 VPN은 독립적인 Container로 두고, 용도에 따라 다른 Container들을 연결하여 사용할 수 있습니다.

보통 Transmission을 설치한 분들은 직접 통신을 위해 아래와 같이 통신 포트를 설정해 두었을 것입니다.

보통의 Transmission Compose

이런 Transmission을 VPN으로 통신을 할 수 있게 수정을 해 보겠습니다. OMV 관리자 페이지에서 [서비스]-[Compose]-[Files]로 이동 후, DOWN을 클릭하여 Transmission을 정지시킵니다. 그리고 Compose 편집 모드로 진입하여, 이전에 기입해 둔 Port 정보를 삭제하고network_mode: "container:gluetun" 을 입력합니다.

VPN을 적용한 Transmission Compose

혹시 Gluetun Container 명을 수정하셨다면, 수정한 Container 이름을 적습니다. 저장 후 다시 UP을 해주세요.

세팅이 완료되었으니, Transmission이 VPN의 IP 주소로 통신하는지 확인해 보겠습니다. ipleak란 사이트에 접속하여, 스크롤을 내리면 Torrent Address detection이란 메뉴가 보이는데, 찾아 클릭합니다.

Torrent가 통신하는 IP 주소 확인 - 웹사이트 : ipleak

그럼 Magnet Link가 생성이 되는데, Transmission에 추가해 봅니다.

Magnetic Link 추가 화면

그럼 마그넷 링크를 복사해 왔던 창에서 현재 저희가 추가한 torrent가 통신하는 IP 주소가 표시가 될 것입니다.

외국 IP로 통신 중인 Transmission

그 밖에도 Gluetun은 http-proxy, shadowsocks, PIA 등을 지원합니다. 하지만 제가 사용하는 수준에선 이 정도면 충분하여 더 공부해 보진 않았습니다. 다른 기능이 필요하시다면 Gluetun wiki에서 차근차근 따라해 보시길 바랍니다.

어떠셨는지요? 저희가 NAS를 가장 안전하게 사용하는 방법은 내부 네트워크 망에서만 사용하는 것이겠지만, 편리함을 위해선 외부와의 연결을 할 수 밖에 없습니다. 하지만 그 와중에 생길 수 있는 불상사를 대비하기 위해 VPN을 적용해 보는 것도 좋은 것 같습니다.

이상, OMV6에 설치한 Transmission에 VPN을 적용하는 방법을 알아 보았습니다.

감사합니다.

댓글

이 블로그의 인기 게시물

[OMV6] WebDAV 설치 및 설정하기

[OMV6] Transmission 설치 및 설정하기