7922e2ad9387904024f06faf48435fb331e9ecea
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:
- sprawdza IP klienta przez
ALLOW_NET, - sprawdza token ze ścieżki
/proxy/<TOKEN>, - przepisuje
REQUEST_URIna/RPC2, - 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_NETustawione 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.1albo 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. |
Description
Languages
Go
93.5%
Shell
6.5%