개요
예전 서버포럼에서 시놀로지 위에 Wireguard망을 이용해 qbittorrent 도커를 돌리는 글을 올린 적이 있었는데, 2년이 지난 지금도 이 글을 통해 질문이 가끔씩 들어오는 걸 보고 제대로 정리해야겠다는 생각이 들어 작성합니다.
시놀로지의 DSM은 리눅스에 비해 커널 버전도 낮고 트윅된 OS라 도커 이미지 선택에 약간의 제약이 따릅니다.
Wireguard 접속기로 사용할 도커 이미지도, 아무거나 사용하면 iptables오류를 뿜어내며 작동을 거부하죠.
그런데, 당시 늅늅했던 제가 수많은 이미지를 테스트하다가 딱 하나, DSM위에서 잘 돌아가는 VPN접속기 이미지를 찾았는데 그게 바로 gluetun이었습니다.
그래서 뭐요?
DSM버전이 달라지면서 qbittorrent 권한 문제도 고치고, 도메인 뒤의 숫자가 계속 바뀌는 국내 사이트들을 잡아주는 It’s torr(를 내재한 tsharp)도 사용할 겸 docker-compose를 다시 구성했습니다.
토렌트에 VPN을 씌워서 사용하는 이유는, 내가 어떤 자료를 토렌트로 받았는지 감추기 위한 목적이 큽니다. IP주소만으로 누가 어떤 자료를 받았는지 다 알 수 있기 때문에, 개인정보 보호가 주목적이라고 볼 수 있는 거죠. 범법행위를 감추기 위한 목적으로는 효용이 없음을 미리 말씀드립니다.
Docker-compose.yml
compose전문
개인 환경에 맞게 수정해야 할 부분을 하이라이트 처리했습니다.
시놀로지의 Container Manager를 사용하셔도 좋고, Portainer로 사용하셔도 좋습니다.
version: "3"
services:
vpn:
container_name: gluetun
image: qmcgaw/gluetun
cap_add:
- NET_ADMIN
ports: # 하단에 각자의 토렌트 포트포워딩 추가
- 8080:8080 #tsharp
- 8181:8181 #qBit Web GUI 포트
- 6881:6881 #qBittorrent
- 6881:6881/udp #qBittorrent
- 51413:51413 #Transmission
- 51413:51413/udp #Transmission
- 8888:8888/tcp # HTTP proxy
- 8388:8388/tcp # Shadowsocks
- 8388:8388/udp # Shadowsocks
volumes: # 하단에 각자의 볼륨매핑 추가
- /path/to/data:/gluetun # gluetun 폴더로 사용할 폴더 매핑
- /dev/net/tun dev/net/tun none bind create=file
environment:
- privileged
- VPN_SERVICE_PROVIDER= # "="옆에 VPN서비스명 기입
- VPN_TYPE=wireguard
- VPN_ENDPOINT_IP= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- VPN_ENDPOINT_PORT= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- WIREGUARD_PUBLIC_KEY= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- WIREGUARD_PRIVATE_KEY= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- WIREGUARD_ADDRESSES= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- TZ=Asia/Seoul
restart: always
qbittorrent:
image: linuxserver/qbittorrent:latest
container_name: qbittorrent
network_mode:
service:vpn
cap_add:
- NET_ADMIN
environment:
- PUID=1026
- PGID=101 # PUID, PGID기입
- TZ=Asia/Seoul
- WEBUI_PORT=8181 # qbittorrent 웹 UI접속포트 설정
volumes:
- /path/to/config:/config # config폴더 매핑
- /path/to/downloads:/downloads # 다운로드폴더 지정
depends_on:
- vpn
restart: always
tsharp:
container_name: tsharp
image: banyazavi/tsharp:latest
volumes:
- /path/to/data:/data # tsharp 폴더 매핑
- /path/to/torr:/var/www/html/torr # torr.php파일 확인용
network_mode:
service:vpn
depends_on:
- vpn
environment:
- TZ=Asia/Seoul
restart: always
Ports 수정
services:
vpn:
ports: # 하단에 각자의 토렌트 포트포워딩 추가
- 8181:8181 #qBit Web GUI 포트
- 6881:6881 #torrent
- 6881:6881/udp #torrent
qbittorrent:
environment:
- WEBUI_PORT=8181 # qbittorrent 웹 UI접속포트 설정
원래 qbittorrent도 8080포트를 사용하고 tsharp도 8080포트를 사용합니다. 그래서 임의로 qbittorrent 포트를 변경해 주었는데, 다른 포트를 사용하시려면 이 곳에서 다시 수정해주셔야 합니다.
Web GUI포트를 변경하려 할 경우 아래 qbittorrent쪽의 접속포트도 함께 바꾸셔야 하는 것을 잊지 마세요.
Volumes 수정
services:
vpn:
volumes: # 하단에 각자의 볼륨매핑 추가
- /path/to/data:/gluetun # gluetun 폴더로 사용할 폴더 매핑
qbittorrent:
volumes:
- /path/to/config:/config # config폴더 매핑
- /path/to/downloads:/downloads # 다운로드폴더 지정
tsharp:
volumes:
- /path/to/data:/data # tsharp 폴더 매핑
- /path/to/torr:/var/www/html/torr # torr.php파일 확인용
gluetun은 데이터가 저장될 폴더 하나만 매핑해주면 됩니다. 몇몇 vpn이미지들은 VPN conf파일을 매핑하는 것을 요구하기도 하는데, gluetun은 docker-compose에 conf내용을 수기로 기입하기 때문에, 폴더 하나만 매핑해주면 됩니다.
qbittorrent는 최소한 두 개의 폴더를 매핑해주어야 합니다. qbittorrent 설정이 저장될 config폴더와 다운로드 받은 파일이 저장될 downloads폴더입니다.
미완성 다운로드 폴더 등도 지정할 수 있지만, 일단 간단하게 이렇게만 갑니다.
tsharp는.. 그냥 폴더 두 개 매핑하시면 됩니다.
시놀로지의 폴더트리는 File Station으로 보는 것과 다릅니다. 눈으로 보기에는 공유폴더명이 경로의 처음인 것 같지만, 실제로는 /volume1 /volume2 이렇게 시작합니다.
예를 들어, 아래 사진 속 폴더의 text파일의 경로는 /test/example/LINK.txt 인 것 같지만,
실제로는 /volume1/test/example/LINK.txt입니다.
유념하면서 매핑해주세요.
Gluetun environment 기입
services:
vpn:
environment:
- privileged
- VPN_SERVICE_PROVIDER= # "="옆에 VPN서비스명 기입
- VPN_TYPE=wireguard
- VPN_ENDPOINT_IP= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- VPN_ENDPOINT_PORT= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- WIREGUARD_PUBLIC_KEY= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- WIREGUARD_PRIVATE_KEY= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- WIREGUARD_ADDRESSES= #VPN의 wireguard접속 프로필 *.conf에 있는 내용을 기입
- TZ=Asia/Seoul
restart: always
이 구간은 각 VPN의 conf파일을 보고 수기로 기입해야 합니다. 가입하신 VPN에서 Wireguard conf파일을 다운로드 받아 직접 기입하시면 됩니다. 이 부분에 대해선 넘어가겠습니다.
PUID, PGID 수정
services:
qbittorrent:
environment:
- PUID=1026
- PGID=101 # PUID, PGID기입
이 부분은 시놀로지 계정의 PUID, PGID를 기입하는 곳입니다.
시놀로지 설정 시 최초 설정된 관리자 계정을 사용하는게 편합니다. 해당 계정의 설정을 딱히 건들지 않았다면 1026,101을 따라가겠지만, 보안이나 기타 이유로 이를 변경했다면 이를 찾아 입력해야 합니다.
찾는 방법은, 관리자 계정으로 SSH에 접속해 id를 입력하면 됩니다.
여기까지 수정했다면, 필수적으로 건드려야 하는 것은 모두 끝났습니다. 기타 그 외 qbittorrent설정법, tsharp사용법은 생략하겠습니다.
제대로 설정되었다면 아래처럼 Image Pull 과정을 거친 뒤,
vpn컨테이너 쪽 로그를 확인해보면 ‘Healthy!’를 확인할 수 있습니다. 이제부터 qBittorrent와 tsharp(Transmission)은 VPN을 통해 통신하고, VPN연결이 끊기면 같이 끊어집니다(Kill Switch)
IP주소:8080으로 tsharp를 확인할 수 있으며,
IP주소:8181로 qbittorrent Web UI도 접속할 수 있습니다.
qBittorrent 최초 접속 시 임시 비밀번호는 컨테이너 로그에 출력됩니다.
VPN망 IP를 확인할 수 있습니다.
문제 해결(Trouble Shooting)
메타데이터 내려받는 중(Downloading metadata)에서 멈춤 문제
DSM 7.01버전대와는 다르게 7.1버전에서 Container Manager가 도입되면서, 정확히 무엇이 달라졌는지 모르겠지만, NET_ADMIN Capability가 추가되지 않으면, 피어조차 찾지 못하는 문제가 있습니다.
Docker-compose구문에 이를 반영해 놓았지만, 혹시 그래도 안된다면 아래 사진처럼 컨테이너 설정 – 기능 쪽에서 NET_ADMIN을 체크해 보시기 바랍니다.
여기서 ‘높은 권한을 사용하여 컨테이너 실행’ 옵션을 체크해도 문제는 해결되지만, 컨테이너에 root계정 권한을 할당하는 옵션이므로 권장하지 않습니다.
또한, 공유기가 UPnP를 지원하지 않는다면 포트포워딩이 필요할 수도 있습니다. 이 글대로 작성했다면 qBittorrent는 통신을 위해 6881포트를 필요로 하므로, 공유기 관리자 페이지에서 시놀로지 IP로 6881포트를 허용해 주어야 합니다.
I/O오류
대체로 쓰기권한 문제일 가능성이 높습니다. PUID, PGID설정이 제대로 이루어지지 않았거나, 연동된 계정이 관리자가 아니거나, 맵핑된 폴더에 권한이 없을 가능성이 높습니다.
일반적으로 관리자 계정은 모든 폴더에 권한을 갖고 있지만, 사용자의 의도로 폴더에 대한 권한이 제거되었을 수 있으니, 권한 부분을 확인해 보시는게 좋습니다.
무턱대고 Everyone을 부여하는 것은 좋지 않습니다.
driver failed programming external connectivity on endpoint 에러
지정한 포트 중 하나 이상의 포트가 다른 컨테이너에서 사용중일 경우 발생합니다. 다른 컨테이너에서 포트를 사용하지 않는데도 이러한 에러 문구가 출력될 경우, SSH에 접속해 아래와 같이 입력해 줍니다.
sudo -i
service docker stop
rm /volume1/@docker/network/files/local-kv.db
service docker start
이 때, 3번째 줄의 docker경로는 Container Manager 패키지가 설치된 경로이므로 volume1인지 volume2인지는 개별 환경마다 다릅니다.
이를 찾기 위해서, 이렇게 입력해주면 됩니다.
find / | grep local-kv.db
이후, 모든 컨테이너를 재시작 해 줍니다.
관련 글
2025.01.22 - [Torrent] - 라즈베리파이로 토렌트 머신 구축하기
라즈베리파이로 토렌트 머신 구축하기
개요토렌트 머신은 아무래도 전력에 민감합니다. 시드가 많지 않은 파일 다운로드, RSS 등을 활용한 자동화, 시딩 등 24시간 켜놓을 일이 많기 때문입니다.Proxmox, ESXi 등 가상화 서버를 운용하고
worklazy.net