RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


linux:transmission

Torrent: Установка Transmission в CentOS 7

Transmission

Установка и базовая настройка

Смотрим доступные пакеты

# yum search transmission 

---CUT---

transmission-cli.x86_64 : Transmission command line implementation
transmission-common.x86_64 : Transmission common files
transmission-daemon.x86_64 : Transmission daemon
transmission-gtk.x86_64 : Transmission GTK interface
transmission-qt.x86_64 : Transmission Qt interface
transmission.x86_64 : A lightweight GTK+ BitTorrent client

Устанавливаем transmission

# yum install transmission-daemon transmission-common

Запускаем и останавливаем transmission. При первом запуске будет создан конфигурационный файл /var/lib/transmission/.config/transmission-daemon/settings.json

# systemctl start transmission-daemon
# systemctl stop transmission-daemon

Важное замечание. Если перед внесением изменений в конфигурацию не остановить демон, то после рестарта демона ваши изменения будут заменены данными, которые были ранее. Поэтому перед тем, как начать менять настройки остановите transmission.

После перезапуска в settings.json вместо пароля будет указан его хэш.

По-умолчанию transmission сохраняет файлы в каталог /var/lib/transmission/Downloads

Все настройки связанные с web-доступом имеют префикс rpc-*.

rpc-bind-address: для тех у кого несколько интерфейсов или адресов
rpc-enabled: включает веб-доступ
rpc-whitelist-enabled: поставьте false или добавьте ваши адреса разделенные запятой в rpc-whitelist
rpc-authentication-required: требовать аутентификацию
rpc-password: пароль
rpc-username: логин

Снова запускаем transmission и добавляем в автозагрузку

# systemctl start transmission-daemon
# systemctl enable transmission-daemon

Смотрим через lsof работает ли демон

# lsof -i tcp:9091

Пробуем перейти по адресу http://torrents.example.com:9091

Если вам не нужен SSL, но хочется заходить в веб-интерфейс без указания порта, то можно изменить rpc-port в settings.json, указав вместо 9091 порта стандартный http 80 порт.

Но тут нас ждёт сюрприз. Это не сработает, т.к. порты <1024 являются привилегированными портами и доступны только пользователю root. Об этом можно почитать в RFC4340 (пункт 19.9 Port Numbers Registry) или на stackexchange.

Поэтому запускаем сервис от root'а либо разрешаем работать на привилегированном порту через CAP_NET_BIND_SERVICE

# setcap cap_net_bind_service+ep /usr/bin/transmission-daemon

Если вам нужен SSL, то смотрите ниже пример для Apache и Nginx.

Firewall

iptables -A INPUT -m state --state RELATED,ESTABLISHED -p udp --dport 51413 -j ACCEPT
iptables -A OUTPUT -p udp --sport 51413 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 9091 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 51413 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 49153:65534 -j ACCEPT
==> /etc/firewalld/services/transmission.xml <==
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Transmission Daemon</short>
  <description>Transmission Daemon provides an interface to manage Transmission BitTorrent client.</description>
  <port protocol="tcp" port="9091"/>
</service>

Apache SSL

1) torrents.example.com

/etc/httpd/conf.d/transmisssion.conf

Self-signed сертификат создаём командой

# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -out /etc/ssl/certs/torrent.crt -keyout /etc/ssl/certs/torrent.key
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName torrents.example.com
    
    ErrorLog logs/torrents.example.com-error_log
    CustomLog logs/torrents.example.com-access_log common

    RewriteEngine On

    RewriteCond %{SERVER_PORT} =80
    RewriteRule ^/(.*)$ https://%{SERVER_NAME}:443/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName torrents.example.com

    ErrorLog logs/torrents.example.com-ssl_error_log
    CustomLog logs/torrents.example.com-ssl_access_log common

    SSLEngine On
    SSLCertificateFile "/etc/ssl/certs/torrent.crt"
    SSLCertificateKeyFile "/etc/ssl/certs/torrent.key"

    ProxyPass        / http://torrents.example.com:9091/
    ProxyPassReverse / http://torrents.example.com:9091/
</VirtualHost>

2) https://example.com/torrents/

<VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        Redirect permanent / https://example.com/torrents
</Virtualhost>

<VirtualHost *:443>
        ServerName example.com
        ServerAlias www.example.com
        Redirect permanent / https://example.com/transmission

        RewriteEngine on
        RewriteRule /transmission[/]?$ /transmission/web/ [R=permanent]

        SSLEngine on
        SSLCertificateFile    /etc/ssl/certs/torrent.crt
        SSLCertificateKeyFile /etc/ssl/certs/torrent.key
        
        SSLProxyEngine On ???
        SSLProxyCheckPeerCN on ???
        SSLProxyCheckPeerExpire on ???
 
        ProxyRequests On
        ProxyPreserveHost Off 
        
        <Proxy *>
        Order allow,deny
        Allow from all 
        </Proxy>

        ProxyPass /transmission http://127.0.0.1:9091/transmission
        ProxyPassReverse /transmission http://127.0.0.1:9091/transmission
</Virtualhost>

Дополнительная защита паролем

<Location /transmission/web/>
  AuthType Basic
  AuthName "Password Required"
  AuthUserFile <full path to password file>
  Require valid-user
</Location>
# a2enmod proxy proxy_http rewrite ssl

SSLStrictSNIVHostCheck off

SSL

nginx SSL/HTTP2

upstream transmission {
      server 127.0.0.1:9091;
}

server {
    listen 443 ssl http2;
    server_name example.com;
    auth_basic            "No pasaran!";
    auth_basic_user_file  /var/www/myWebSite/web/.htpasswd;
      
    # Path to the root of your installation
    error_log /var/www/myWebSite/logs/error.log;
    access_log /var/www/myWebSite/logs/access.log;
      
    ### SSL files ###
    ssl_certificate /var/www/myWebSite/ssl/advert.crt;
    ssl_certificate_key /var/www/myWebSite/ssl/advert.key;

    ### Add SSL specific settings here ###
    ssl_session_timeout 10m;
      
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;
      
    location / {
        return 301 https://$server_name/transmission/;
    }
      
    location ^~ /transmission { 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass_header X-Transmission-Session-Id;
        add_header Front-End-Https on;
      
    location /transmission/rpc {
        proxy_pass http://transmission;
    }
    location /transmission/web/ {
        proxy_pass http://transmission;
    } 
    location /transmission/upload {
        proxy_pass http://transmission;
    }
    location /transmission/web/style/ {
        alias /usr/share/transmission/web/style/;
    } 
    location /transmission/web/javascript/ {
        alias /usr/share/transmission/web/javascript/;
    }
    location /transmission/web/images/ {
        alias /usr/share/transmission/web/images/;
    }        
    location /transmission/ {
        return 301 https://$server_name/transmission/web;
    }
  }
}

Transmission Remote GUI

https://sourceforge.net/projects/transgui/

Вот так выглядит remote GUI

Веб-интерфейс

При работе по httpS на 443 порту возникает ошибка Connection reset by peer. При работе на стандартном порту 9091 такой ошибки нет.

Нашел аналогичную проблему на sourceforge. В качестве решения предлагают увеличить Data refresh interval.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/transmission.txt · Последнее изменение: 2017/09/25 14:15 — 127.0.0.1