Transmission은 멀티 플랫폼을 지원하는 경량 토렌트 클라이언트입니다. 서버-클라이언트 구조를 가지고 있어서 서버에 transmission-daemon 서비스를 설치해둔 후 원격 클라이언트를 이용하여 토렌트를 관리할 수 있습니다. 즉, 본체는 NAS나 데스크탑에 설치해두고 스마트폰이나 웹브라우저로 어디서건 접속해서 토렌트를 추가/관리할 수 있어 정말 편리하게 사용할 수 있습니다.


Transmission 서버 구축의 흐름은 아래와 같습니다.

- Transmission 설치: https://wiki.debian.org/BitTorrent/Transmission
- Transmission web client 변경: Shift (옵션, 딱히 추천하지는 않습니다.)
- Remote client 소개: 데탑용 transmission-remote-gui, 안드로이드용 Transmission Remote


1. Transmission 설치

- Debian Wiki에 소개된 네개의 package 중 NAS에 설치할 것은 transmission-daemon 입니다.

1
$ sudo apt-get install transmission-daemon
cs

transmission의 본체로써 Web UI를 포함한 각종 클라이언트의 명령을 받아서, 토렌트를 배포/다운로드하는 역할을 합니다.


2. Transmission 설정

- 설정 파일 수정 전 아래 명령으로 transmission-daemon을 종료해야 합니다. 꼭 status를 확인해서 transmission-daemon이 제대로 종료되었는지 확인하는 것이 좋습니다. 자칫 방심하면 열심히 수정해둔 설정파일이 초기화됩니다. :)

1
2
$ sudo systemctl stop transmission-daemon
$ sudo systemctl status transmission-daemon
cs

참고로 daemon 실행 명령어는 아래와 같습니다. 설정파일 수정 후! 사용합니다.

1
$ sudo systemctl start transmission-daemon
cs

- debian 패키지 기준 설정파일 위치는 /etc/transmission-daemon/settings.json 입니다. settings.json 파일을 에디터로 열어보면 기본 설정이 이미 빼곡하게 기록되어 있습니다. 각 옵션에 대한 상세한 설명은 아래 링크에서 참고할 수 있는데, 아쉽게도 영문입니다. :)
  https://github.com/transmission/transmission/wiki/Editing-Configuration-Files


2.1 주요 설정.
제가 생각하는 주요한 설정 옵션과 다소 중요도는 떨어져도 특이하게 생각되는 옵션을 함께 정리했습니다. 기본설정을 유지한 것은 비록 중요한 내용이라해도 기록하지 않았습니다. 워낙 옵션이 많아서 말이지요.

- "peer-congestion-algorithm": "lp"
  : 토렌트 통신의 우선순위를 낮춰서, 웹브라우징 등 다른 통신이 끊기지 않도록 합니다. 다만 업로드에만 적용되구요. 업로드 속도를 낮춰놓는 것이 더 간단한 방법이기는 합니다만, 누군가가 애써서 만들어준 고급 기능을 누리면서 자원을 최대한 똑똑하게 잘 써보도록 합니다.

단, lp 옵션을 사용하기 위해서는 아래와 같이 TCP_LP 드라이버를 로드해줘야 합니다.

1
2
$ sudo modprobe tcp_lp
$ sudo echo cubic reno lp > /proc/sys/net/ipv4/tcp_allowed_congestion_control
cs

참조 링크 및 설정방법: https://www.irif.fr/~jch//software/bittorrent/tcp-congestion-control.html


- peer-port
  : 피어가 제 토렌트 서비스에 접속할 때 사용하는 포트입니다. 여기서 지정한 포트로 공유기에서 포트 포워딩을 설정해주거나, Upnp를 활성화해줘야 합니다.


- "peer-socket-tos": "default"
  : 공유기에 전달하는 네트워크 우선순위입니다. "default", "lowcost", "throughput", "lowdelay", "reliability" 중 하나로 설정할 수 있는데, 공유기가 TOS 관리를 지원할 경우 lowcost를 추천한다고 합니다.


- "port-forwarding-enabled": true
  : 공유기에 upnp로 자동 포트 포워딩을 요청하는 설정입니다.


- "queue-stalled-minutes": 10
  : 토렌트의 가용성이 1 이하일 경우 새로운 시더가 나타날 때 까지 다운로드를 완료할 수 없습니다. 이 때 가용한 부분을 모두 다운로드 받아서 더 이상 다운로드를 할 수 없는 상태를 stall 이라고 합니다. Stall 발생 시 여기서 설정한 시간(분) 만큼 새 시더를 기다렸다가 queue-download-size와 seed-queue-size에서 해당 토렌트를 제외합니다. 즉, stall 된 토렌트를 대기상태로 전환하고 대기열의 다른 토렌트를 다운받기 시작합니다.


- "ratio-limit-enabled": true 와 "ratio-limit": 1
  : 배포 비율(ratio) 제한을 활성화하고 기본값을 설정합니다. 상기 예시는 배포 비율이 1(100%)에 도달할 경우 배포를 중지하는 설정입니다. ratio-limit를 0으로 설정하면, 다운로드가 완료되는 즉시 배포를 중단합니다.


- "rpc-password": "비밀번호", "rpc-username": "ID"
  : transmission 클라이언트로 transmission-daemon에 RPC 접속할 때 사용하는 ID와 비밀번호를 설정합니다. 설정 파일을 저장한 후 transmission-daemon 실행하면 비밀번호가 암호화되어 다시 저장됩니다. 따라서 비밀번호를 텍스트로 설정파일에 기록한다해도 걱정하실 필요가 없습니다.


- "rpc-whitelist": "127.0.0.1, 192.168.0.*", "rpc-whitelist-enabled": false
  : rpc-whitelist-enabled를 true로 설정하면 rpc-whitelist에 기록한 IP에서만 접속을 허용합니다. 콤마로 구분해서 여러개의 IP를 지정할 수 있으며, *을 사용해서 IP 대역을 지정할 수 있습니다. 한편, rpc-whitelist-enabled를 false(사용하지 않음)로 설정하면 모든 IP의 접속을 허용합니다. 공유기 외부에서도 접속해야한다면 false가 편리할껍니다.


- "script-torrent-done-enabled": false, "script-torrent-done-filename": "/디렉토리/스크립트 파일명"
  : 다운로드 완료 후 스크립트 실행여부를 script-torrent-done-enabled에 설정합니다. script-torrent-done-enabled를 true로 설정하고 script-torrent-done-filename에 스크립트 위치를 지정하면, 다운로드 완료 시 지정한 스크립트가 실행됩니다. 파일명 변경, 잡파일 정리, remux 등 쏠쏠히 써먹을 수 있습니다만 스크립트 작성에 다소의 노력이 필요합니다.


- "seed-queue-enabled": true, "seed-queue-size": 5
  : 동시 배포하는 토렌트의 숫자를 설정합니다. 모든 토렌트를 다 배포하기 보다는 동시 배포 숫자를 제한하여 토렌트 당 전송 속도를 높게 유지하는 것이 시스템 자원도 합리적으로 사용하고, 상대방(피어)에게도 이익입니다. 데이터를 받아가는 피어가 더 이상 없을 경우 다음 대기 순번의 토렌트를 배포합니다. 아까 살펴본 queue-stalled-minutes와 연관이 있습니다.


- 다운로드/업로드 속도 제한 설정
  : 단위는 KB/s입니다. 대개 다운로드는 실효 속도의 80~95% 수준, 업로드는 80% 수준이 적절합니다. 특히 비대칭 광랜을 사용하시는 분들은 업로드 최대 속도를 꼼꼼히 살펴보셔야 합니다. 토렌트는 기본적으로 업로드 속도에 비례해서 다운로드 속도가 결정되는데, 비대칭 광랜은 회선의 한계 상 업로드 속도가 한계가 있어서 무작정 최대 업로드 속도를 높여둘 경우 인터넷 자체가 먹통이 될 수 있습니다.
  "speed-limit-down": 8192,
  "speed-limit-down-enabled": true,
  "speed-limit-up": 4096,
  "speed-limit-up-enabled": true,


- "umask": 18
  : 리눅스 파일 접근권한의 바로 그 umask인데, 10진수로 표기한 것입니다. 리눅스에서 친근하게 사용한 umask는 8진수로 되어 있구요. 통상적으로 사용되는 umask값인 022은 10진수로 변환하면 18입니다.
(0 x 8^2 + 2 x 8 + 2 = 18)


- "upload-slots-per-torrent": 14
  : speed-limit-up ÷ seed-queue-size ÷ upload-slots-per-torrent = peer 당 최저 업로드 속도라는 관계를 가지고 있습니다. 따라서 최대 업로드 속도를 먼저 결정한 후, 동시 업로드 개수와 토렌트 당 업로드 슬롯 숫자를 적절히 정해줄 필요가 있습니다. 단편적으로 seed-queue와 upload-slot을 크게 잡으면, 많은 토렌트를 많은 피어에게 동시에 배포하니까 후한 것 처럼 생각될 수 있지만, 곰곰히 생각해보면 한정된 업로드 대역폭(속도)를 쪼개서 사용해야하므로 꼭 상대방에게 후한 것은 아닙니다. ratio관리 차원에서도 그리 유리하지 않습니다.


2.2 transmission-daemon 유저명 확인
- /lib/systemd/system/transmission-daemon.service 파일을 열어보면 daemon을 실행할 사용자명이 적혀있는데, debian 패키지의 경우 User=debian-transmission 입니다. 그리고 debian-transmission(사용자)은 debian-transmission 그룹에 속해있습니다. 토렌트로 받은 파일을 원활하게 이동/삭제하려면 실제 사용자를 debian-transmission 그룹에 포함시키고, umask는 8로 설정하는 것이 편리합니다. 즉, umask를 8로 설정하면 다운로드한 파일/디렉토리의 권한이 770으로 지정되므로, 실 사용자를 debian-transmission 그룹에 포함했다면 자유롭게 파일을 이동/삭제할 수 있습니다. umask를 0으로 설정해서 토렌트로 받은 파일은 모두 777로 사용하는 사람들도 많아보이네요.



3. Web client 변경 (Shift)

기본 web client는 깔끔하기는 한데, 트래커를 수정할 수 없는 것이 좀 아쉬웠습니다. 그래서 방법을 찾아보았더니 Shift라는 사제 Web UI를 사용하면 된다고 하네요.

설치 방법 참조: https://forum.transmissionbt.com/viewtopic.php?f=8&t=12555

그런데, 막상 써 보니 tracker 수정이 제대로 안되는 것 같습니다. 되는 것 같기도 하다가 어떨 때는 또 안되고.. 제가 제약 조건을 몰라 오해하는지 모르겠습니다만, 저는 그리 잘 활용하지 못하고 있습니다. 그리고 UI가 좀 불편하네요. 순정 UI 대비 세세한 기능을 사용할 때 클릭을 한두번씩 더 해주어야 합니다.


- 다운로드

1
2
3
$ sudo apt-get install git-core
$ cd /opt
$ git clone https://github.com/killemov/Shift.git
cs

/opt/Shift 폴더에 사제 Web UI가 다운로드 되었으며, transmission-deamon이 /opt/Shift 내의 파일을 읽기/실행할 수 있어야 하므로, /opt/Shift와 내용물의 소유자를 debian-transmission으로 변경하거나, others가 rx 권한을 가지도록 퍼미션을 설정합니다.


- web client 변경
TRANSMISSION_WEB_HOME라는 환경 변수에 다운로드한 Shift의 위치를 기록하면 됩니다.
제 경우엔 transmission-daemon을 systemd로 구동하는데, 저 환경 변수는 systemd script 내에 기록해야합니다.

/lib/systemd/system/transmission-daemon.service 에 아래와 같이 환경변수 추가

1
2
3
[Service]
....원래 있던 내용 제일 아래에 아래 줄 추가 (/opt/Shift는 git clone으로 다운받은 바로 그 디렉토리)
Environment=TRANSMISSION_WEB_HOME=/opt/Shift
cs


- http://시드박스ip:9091 로 접속해서 web cient 확인합니다.



4. Remote Client

- 데스크탑용 client

저는 데스크탑 client는 remote-gui를 좋아합니다. 아래 홈페이지에서 받을 수 있습니다.
https://sourceforge.net/projects/transgui/


- 안드로이드용 client

Remote Transmission과 Transmission Remote가 쓸만합니다. 제 눈과 손에는 Remote Transmission이 더 잘 맞는데, 평점은 반대네요. :) 아래 구글 플레이 스토어 링크를 남깁니다
Remote Transmission: https://play.google.com/store/apps/details?id=com.neogb.rtac&hl=en
Transmission Remote: https://play.google.com/store/apps/details?id=net.yupol.transmissionremote.app&hl=en