Files
rtorrent-scgi-proxy/README.md
Mateusz Gruszczyński 7922e2ad93 first commit
2026-05-02 20:45:07 +02:00

3.4 KiB

rtorrent-scgi-proxy

Mały broker SCGI -> SCGI dla rTorrenta. Zachowuje protokół SCGI, sprawdza token w ścieżce, ogranicza źródłowy adres IP/CIDR i przekazuje request do lokalnego backendu rTorrent.

Repozytorium: https://git.linuxiarz.pl/gru/rtorrent-scgi-proxy

Szybkie pobranie:

git clone https://git.linuxiarz.pl/gru/rtorrent-scgi-proxy.git
cd rtorrent-scgi-proxy/bin

Archiwum:

wget https://git.linuxiarz.pl/gru/rtorrent-scgi-proxy/archive/main.tar.gz -O rtorrent-scgi-proxy.tar.gz

Jak to działa

Klient łączy się po SCGI do proxy, np.:

scgi://10.10.110.11:5050/proxy/TWOJ_TOKEN

Proxy:

  1. sprawdza IP klienta przez ALLOW_NET,
  2. sprawdza token ze ścieżki /proxy/<TOKEN>,
  3. przepisuje REQUEST_URI na /RPC2,
  4. forwarduje request do lokalnego rTorrenta po TCP albo unix sockecie.

Konfiguracja

Plik env dla systemd:

/etc/rtorrent-scgi-proxy.env

Przykład:

LISTEN_ADDR=10.10.110.11:5050
TOKEN=change-me-long-random-token
TARGET_NETWORK=tcp
TARGET_ADDRESS=127.0.0.1:5000
TARGET_URI=/RPC2
ALLOW_NET=10.10.0.0/16
READ_TIMEOUT=15s
WRITE_TIMEOUT=30s
DIAL_TIMEOUT=5s
MAX_HEADER_BYTES=65536
MAX_CONTENT_BYTES=10485760

Backend przez unix socket:

TARGET_NETWORK=unix
TARGET_ADDRESS=/run/rtorrent/rtorrent.sock

Budowa i testy

cd bin
go test ./...
./scripts/build.sh

Wynik:

dist/rtorrent-scgi-proxy-linux-amd64

Cross-build:

GOOS=linux GOARCH=arm64 ./scripts/build.sh

Instalacja przez systemd

cd bin
sudo ./scripts/install.sh
sudo nano /etc/rtorrent-scgi-proxy.env
sudo systemctl enable --now rtorrent-scgi-proxy
sudo systemctl status rtorrent-scgi-proxy

Ręcznie:

sudo useradd --system --no-create-home --shell /usr/sbin/nologin rtproxy
sudo install -m 0755 dist/rtorrent-scgi-proxy-linux-amd64 /usr/local/bin/rtorrent-scgi-proxy
sudo install -m 0644 systemd/rtorrent-scgi-proxy.service /etc/systemd/system/rtorrent-scgi-proxy.service
sudo install -m 0600 examples/rtorrent-scgi-proxy.env /etc/rtorrent-scgi-proxy.env
sudo systemctl daemon-reload
sudo systemctl enable --now rtorrent-scgi-proxy

Wrzucenie do repo

Z katalogu głównego repo:

git add bin
git commit -m "Add rTorrent SCGI proxy binary project"
git push origin main

Bezpieczeństwo

Nie wystawiaj tego publicznie bez dodatkowej ochrony. Zalecane minimum:

  • ALLOW_NET ustawione na prywatną podsieć/VPN,
  • długi losowy TOKEN,
  • firewall na porcie LISTEN_ADDR,
  • najlepiej WireGuard albo inny prywatny tunel,
  • rTorrent SCGI tylko lokalnie: 127.0.0.1 albo unix socket.

SCGI nie ma wbudowanego TLS ani auth. Ten proxy dodaje prostą autoryzację tokenem i allowlistę IP, ale nie zastępuje VPN/TLS.

Zmienne środowiskowe

Zmienna Domyślnie Opis
LISTEN_ADDR 127.0.0.1:5050 Adres nasłuchu proxy.
TOKEN brak Wymagany token w ścieżce /proxy/<TOKEN>.
TARGET_NETWORK tcp tcp albo unix.
TARGET_ADDRESS 127.0.0.1:5000 Lokalny backend rTorrent SCGI.
TARGET_URI /RPC2 URI przekazywane do rTorrenta.
ALLOW_NET 127.0.0.1 Dozwolony IP, CIDR, lista po przecinku albo *.
READ_TIMEOUT 15s Timeout czytania klienta.
WRITE_TIMEOUT 30s Timeout zapisu/odpowiedzi.
DIAL_TIMEOUT 5s Timeout połączenia z backendem.
MAX_HEADER_BYTES 65536 Limit nagłówków SCGI.
MAX_CONTENT_BYTES 10485760 Limit body XML-RPC.