Содержание
Torrent: Установка Transmission в CentOS 7
Установка и базовая настройка
Смотрим доступные пакеты
# 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
.
Обсуждение