Jak uruchomić most Tor z obfs4 na własnym VPS
Instrukcja konfiguracji mostu Tor z wykorzystaniem obfs4 na serwerze VPS. Omówiono parametry pliku torrc, wybór portów, reguły firewall oraz weryfikację logów działania.
Czym jest most Tor i dlaczego istnieje
Most Tor to punkt wejściowy do sieci Tor, którego adres nie jest publikowany na publicznej liście przekaźników. Lista ta, zwana konsensusem, jest podpisanym dokumentem, który może pobrać każdy, w tym również cenzor. Zablokowanie sieci Tor za jej pomocą zajmuje jedno popołudnie: wystarczy pobrać konsensus, a następnie zablokować na granicy sieci wszystkie zawarte w nim adresy. Mosty istnieją, ponieważ opublikowana lista jest słabym punktem. Adresy mostów są udostępniane po kilka sztuk, więc pojedyncze żądanie nie ujawnia całego zestawu.
Niepubliczny adres to tylko połowa rozwiązania. Głęboka inspekcja pakietów (DPI), która klasyfikuje ruch na podstawie jego zawartości, a nie adresu, rozpoznaje połączenie Tor po charakterystyce jego handshake'u TLS (transport layer security). Cenzor nieposiadający listy nadal może stwierdzić, że "to wygląda jak Tor" i odrzucić połączenie. Pluggable transport usuwa ten sygnał. Opakowuje on strumień Tor w inny protokół po stronie klienta, a most go rozpakowuje.
obfs4 to transport używany przez większość mostów. Przekształca on strumień w bajty bez nagłówka i bez stałego handshake'u, dzięki czemu DPI nie znajduje wzorca do dopasowania. Protokół ten uwierzytelnia również klienta. Wartość cert= w linii konfiguracyjnej mostu to klucz, który klient musi posiadać, aby most w ogóle odpowiedział. Zapobiega to aktywnemu sondowaniu: cenzor, który łączy się z adresem, aby sprawdzić, czy obsługuje on protokół Tor, nie otrzymuje żadnej odpowiedzi i nie uzyskuje żadnych informacji.
Który transport wtyczkowy (pluggable transport) uruchomić?
- obfs4 wymaga jednego VPS, dwóch portów TCP i nie potrzebuje nazwy domeny. Jest to najprostsze użyteczne rozwiązanie, które można uruchomić, i stanowi przedmiot niniejszego przewodnika.
- WebTunnel ukrywa połączenie wewnątrz zwykłego ruchu HTTPS kierowanego do rzeczywistej witryny internetowej. Tor Project określa wymagania jako: statyczny adres IPv4, kontrolowaną domenę, działający serwer WWW, taki jak NGINX lub Apache, ważny certyfikat TLS oraz co najmniej 1 GB pamięci RAM (zalecane 4 GB). Rozwiązanie to sprawdza się w sieciach, w których ruch o losowym wyglądzie jest sam w sobie podejrzany, ponieważ kraje ograniczające dostęp do sieci zazwyczaj zezwalają na ruch HTTPS.
- Snowflake to inny rodzaj wkładu. Wolontariusze uruchamiają krótkotrwałe proxy WebRTC, dzięki czemu punkty wejściowe stale się zmieniają i nie ma stałego adresu, który cenzor mógłby zablokować. W tym przypadku nie uruchamia się mostka (bridge). Uruchamia się proxy, które nie wymaga stałego adresu.
Należy zacząć od obfs4. Mostek WebTunnel można dodać później, na drugim adresie: uruchomienie obu na jednym adresie IP oznacza, że zablokowanie tego jednego adresu wyeliminuje oba rozwiązania.
Jakie są koszty utrzymania mostka?
The data behind this chart
[
{
"label": "Bridge, minimum",
"min_upstream_mbit": 1
},
{
"label": "Guard or middle relay, minimum",
"min_upstream_mbit": 10
},
{
"label": "Guard or middle relay, recommended",
"min_upstream_mbit": 16
}
]Według stanu na sierpień 2026 r. Tor Project wymaga od mostka przepustowości wysyłania i pobierania na poziomie co najmniej 1 Mbit/s. Od przekaźnika typu guard lub middle relay oczekuje się 10 Mbit/s, przy czym zalecana wartość to 16 Mbit/s. Są to opublikowane wymagania, a nie pomiary. Nowy mostek zazwyczaj przez wiele tygodni utrzymuje się znacznie poniżej własnego minimum. Ta sama strona z wymaganiami określa minimalny ruch wychodzący dla przekaźnika na 100 GB miesięcznie, co pokrywają już najmniejsze plany hostingowe, dlatego przed wyborem większej instancji warto sprawdzić ile faktycznie kosztuje mały VPS miesięcznie.
Powierzchnia ataku jest niewielka i jest to kwestia często błędnie interpretowana. Mostek stanowi pierwszy przeskok. Ruch opuszczający serwer trafia do innego przekaźnika sieci Tor, a nie bezpośrednio do witryny wybranej przez użytkownika. Adres IP operatora nigdy nie pojawia się w logach serwerów WWW jako źródło żądania, więc skargi, z którymi mierzą się operatorzy exit relay, tutaj nie docierają. Mimo to należy zapoznać się z polityką dopuszczalnego użytkowania (AUP) dostawcy, ponieważ niektórzy usługodawcy traktują każdą usługę Tor jako przypadek szczególny.
Czego nie należy robić: nie należy przekształcać istniejącego publicznego przekaźnika w mostek pod tym samym adresem. Zalecenie Tor Project w takim przypadku brzmi: należy zmienić „adres IP, nazwę oraz odcisk klucza (fingerprint)”, ponieważ stary adres znajduje się już w konsensusie pobieranym przez systemy cenzurujące. Mostek, który jeszcze tydzień temu był publicznym przekaźnikiem, jest mostkiem, który już znajduje się na czarnej liście.
Czas pracy (uptime) jest ważniejszy niż szybkość. Wymagania dotyczące przekaźników wskazują, że „jeśli przekaźnik nie działa przez ponad 2 godziny dziennie, jego użyteczność jest ograniczona”. W przypadku mostka sytuacja jest jeszcze trudniejsza, ponieważ każdy klient korzysta z jednego adresu i nie ma mechanizmu przełączania awaryjnego. Restart powoduje rozłączenie wszystkich użytkowników. Warto skonfigurować sprawdzanie portu TCP w Uptime Kuma dla portu obfs4, aby otrzymać powiadomienie w momencie, gdy usługa przestanie odpowiadać.
Instalacja Tor z repozytorium Tor Project
Pakiety dystrybucyjne są przestarzałe, a bridge to oprogramowanie zabezpieczające, które powinno być aktualne. Najpierw należy dodać repozytorium projektu.
sudo apt update
sudo apt install -y apt-transport-https gnupg wget lsb-release
wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/nullTeraz należy utworzyć plik źródłowy. Linia Suites: musi zawierać nazwę kodową wydania, dlatego należy odczytać ją z systemu, zamiast wpisywać z pamięci.
sudo tee /etc/apt/sources.list.d/tor.sources >/dev/null <<EOF
Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: $(lsb_release -cs)
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg
EOF
sudo apt update
sudo apt install -y tor deb.torproject.org-keyring obfs4proxyJeśli apt update zgłosi, że repozytorium nie posiada pliku Release dla danej nazwy kodowej, oznacza to, że Tor Project nie wspiera tego wydania. Należy usunąć /etc/apt/sources.list.d/tor.sources, ponownie uruchomić sudo apt update i zainstalować pakiet tor dostarczany przez dystrybucję. Wszystkie poniższe kroki pozostają bez zmian.
Pakiet obfs4proxy pochodzi bezpośrednio z Debian oraz Ubuntu (wersja 0.0.14 w Debian 13, stan na sierpień 2026). Należy potwierdzić lokalizację pliku binarnego, ponieważ jego ścieżka jest wymagana w konfiguracji:
command -v obfs4proxy || command -v lyrebirdTwórcy zmienili nazwę projektu na lyrebird, więc nowszy pakiet może zainstalować /usr/bin/lyrebird. Należy użyć ścieżki zwróconej przez to polecenie.
Konfiguracja mostka w /etc/tor/torrc
BridgeRelay 1
ORPort 8443
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ServerTransportListenAddr obfs4 0.0.0.0:9443
ExtORPort auto
ContactInfo you@example.com
Nickname PickANickname
BridgeDistribution anyKażda z tych linii wiąże się z ryzykiem błędu, dlatego należy je wprowadzać pojedynczo.
BridgeRelay 1 instruuje tor, aby wysyłał deskryptor do urzędu mostków (bridge authority), zamiast do publicznego konsensusu. Ta pojedyncza linia sprawia, że przekaźnik nie jest wymieniony na publicznej liście.
ORPort to właściwy port ORPort. Musi być on osiągalny z Internetu, ponieważ tor testuje go i odmawia publikacji deskryptora, dopóki test nie zakończy się powodzeniem.
ServerTransportPlugin przekazuje polecenie uruchomienia dla tor. tor uruchamia obfs4proxy jako proces potomny i komunikuje się z nim przez potok, dlatego obfs4proxy nie posiada własnej jednostki serwisowej i nigdy nie pojawia się w systemctl status.
ServerTransportListenAddr ustala port, na którym nasłuchuje obfs4proxy. Pominięcie tej linii spowoduje, że obfs4proxy wybierze wolny port przy starcie, a po większości restartów inny, co sprawi, że każda udostępniona linia mostka będzie wskazywać na port, na którym nikt nie nasłuchuje. Klienci otrzymają odmowę połączenia i przestaną podejmować próby.
ExtORPort auto otwiera rozszerzony ORPort, kanał loopback, którego obfs4proxy używa do przekazywania zakończonych połączeń z powrotem do tor wraz z adresem klienta. Przewodnik konfiguracji The Tor Project uwzględnia go przy każdym mostku, ponieważ bez niego transport nie może zgłosić tego adresu do tor.
ContactInfo oraz Nickname są publiczne. Należy użyć adresu, który jest sprawdzany, ponieważ w ten sposób The Tor Project kontaktuje się w sprawie niedziałającego mostka, oraz wybrać pseudonim, który nie identyfikuje użytkownika, jeśli preferowana jest dyskrecja.
BridgeDistribution określa, który dystrybutor przekazuje adres użytkownikom. Akceptowane wartości to https, email, telegram, settings, none oraz any. Należy użyć any dla pierwszego mostka i pozwolić systemowi na wybór. Należy użyć none dla prywatnego mostka udostępnianego samodzielnie, co całkowicie wyklucza adres z publicznej dystrybucji.
Dlaczego wybór portu ma znaczenie
Należy unikać portu 9001 dla obu usług. Tor Project wyraźnie to odradza, ponieważ 9001 to tradycyjny port ORPort, a systemy cenzury skanują pod jego kątem całą sieć. Oba porty muszą się od siebie różnić, gdyż tor oraz obfs4proxy uruchamiają własne procesy nasłuchujące.
Najlepszym wyborem dla obfs4 jest port 443. Ruch wychodzący na porcie 443 jest dozwolony w niemal każdej restrykcyjnej sieci, a długotrwałe połączenie z nim wygląda jak zwykła sesja przeglądarki. Powiązanie z portem poniżej 1024 wymaga dodatkowego kroku, ponieważ obfs4proxy nie działa z uprawnieniami root:
sudo setcap cap_net_bind_service=+ep /usr/bin/obfs4proxy
sudo systemctl edit tor@.service tor@default.serviceDodaj poniższe dwie linie w każdym otwartym edytorze:
[Service]
NoNewPrivileges=noSama zdolność (capability) nie wystarczy. Opcja NoNewPrivileges w systemd uniemożliwia procesowi uzyskanie jakichkolwiek uprawnień, których nie posiadał proces nadrzędny, a zdolność pliku jest właśnie takim uprawnieniem, dlatego obfs4proxy nie może powiązać się z portem 443, gdy to ustawienie pozostaje aktywne.
Jeśli wolisz pominąć ten krok, wybierz niepozorny port z wysokiego zakresu i zapisz go. Niezależnie od wyboru, nie zmieniaj portu obfs4 w przyszłości. Linia bridge wiąże ze sobą adres, port, odcisk palca (fingerprint) oraz certyfikat, więc każda kopia zapisana w przeglądarce użytkownika przestanie działać w momencie zmiany portu.
Otwarcie portów na obu zaporach sieciowych
sudo ufw allow 8443/tcp
sudo ufw allow 9443/tcp
sudo ufw statusOba porty muszą być otwarte. Większość dostawców stosuje dodatkową zaporę sieciową w panelu sterowania, o której ufw nie posiada informacji. Reguła istniejąca na serwerze, lecz nieobecna w panelu, tworzy most, który jest nieosiągalny i nigdy nie publikuje deskryptora. Jeśli którykolwiek z tych elementów jest nowy, reguły ufw wymagane dla nowego VPS oraz czym w rzeczywistości jest port nasłuchujący w systemie Linux zawierają niezbędne wyjaśnienia. Przy okazji warto zabezpieczyć SSH za pomocą kluczy i wzmocnionej konfiguracji sshd. Niezabezpieczony most na serwerze z uwierzytelnianiem SSH hasłem nadal pozostaje serwerem z uwierzytelnianiem SSH hasłem.
Uruchomienie i odczyt dziennika
sudo systemctl enable --now tor.service
sudo systemctl restart tor.service
sudo journalctl -e -u tor@defaultSystemy Debian i Ubuntu dostarczają dwie jednostki. tor.service to niewielki skrypt opakowujący, a tor@default.service to proces wykonujący właściwe zadania. Z tego powodu journalctl -u tor wydaje się niemal pusty, podczas gdy poszukiwany dziennik znajduje się pod tor@default.
Dwie linie potwierdzają poprawne działanie:
Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.
Registered server transport 'obfs4' at '0.0.0.0:9443'Pierwsza oznacza, że test osiągalności zakończył się powodzeniem, a deskryptor został wysłany do urzędu mostów (bridge authority). Jeśli komunikat się nie pojawia, oznacza to, że jakiś element między Internetem a serwerem blokuje ruch do ServerTransportListenAddr. Druga linia musi wskazywać port skonfigurowany przez użytkownika. Inny port w tym miejscu oznacza, że tor nie zastosował ServerTransportListenAddr, co zazwyczaj wynika z niezgodności nazw transportu: muszą one być identyczne jako obfs4 w obu dyrektywach.
Należy potwierdzić istnienie dwóch procesów nasłuchujących:
sudo ss -lntp | grep -E 'tor|obfs4|lyrebird'Gdzie znajduje się moja linia bridge?
obfs4proxy zapisuje szablon w katalogu danych tor:
sudo cat /var/lib/tor/pt_state/obfs4_bridgeline.txtKatalog ten należy do użytkownika tor i posiada uprawnienia 700, więc bez sudo wystąpi błąd Permission denied. Plik zawiera linię o następującym formacie:
Bridge obfs4 <IP ADDRESS>:<PORT> <FINGERPRINT> cert=<CERTIFICATE> iat-mode=0Zastąp <IP ADDRESS> publicznym adresem serwera, <PORT> portem obfs4 (nie ORPort), a <FINGERPRINT> odciskiem palca (fingerprint) tożsamości, który tor zapisał w swoim katalogu danych:
sudo cat /var/lib/tor/fingerprint
sudo cat /var/lib/tor/hashed-fingerprintPierwszy plik zawiera nazwę (nickname) oraz odcisk palca tożsamości, który należy umieścić w linii bridge. Drugi plik zawiera zahaszowany odcisk palca; należy go wkleić w Relay Search, aby sprawdzić, czy bridge działa i ilu klientów mniej więcej z niego korzysta. Te dwie wartości nie są zamienne. Linia bridge zawierająca zahaszowaną wartość nie pasuje do klucza tożsamości prezentowanego przez bridge, przez co klient odrzuca właśnie otwarte połączenie.
W jaki sposób bridge dociera do użytkowników?
Bridge line nie jest przekazywany nikomu osobiście. Gdy deskryptor dotrze do bridge authority, system dystrybucji (rdsys, następca BridgeDB) przypisuje bridge do jednego z dystrybutorów, a użytkownicy zwracają się do niego z prośbą o bridge. Według stanu na sierpień 2026 r. ścieżki dystrybucji są następujące:
- Formularz internetowy pod adresem bridges.torproject.org/options, który udostępnia bridge line po rozwiązaniu captcha.
- Wiadomość e-mail wysłana na adres bridges@torproject.org z konta Gmail lub Riseup, w odpowiedzi na którą przesyłane są bridge line. Ograniczenie dostawców wynika z faktu, że nieograniczona liczba darmowych kont pozwoliłaby cenzorowi na wyliczenie wszystkich dostępnych bridge.
- Bot Telegram @GetBridgesBot. Należy wysłać
/start, a następnie/obfs4lub/webtunnel. - Sam Tor Browser, w sekcji Ustawienia, a następnie Połączenie, gdzie opcja "Request bridges" pobiera je przez kanał moat.
Nowy bridge pojawia się w Relay Search około trzy godziny po konfiguracji. Użytkownicy pojawiają się znacznie później: według oficjalnej dokumentacji Tor Project "może minąć kilka dni lub tygodni, zanim zauważysz stałą grupę użytkowników". Spokojne pierwsze dwa tygodnie są zjawiskiem normalnym, a nie błędem.
Ustawienie BridgeDistribution none wyłącza wszystkie powyższe mechanizmy. W takim przypadku bridge line należy przekazać samodzielnie osobom, które go potrzebują, korzystając z kanału komunikacji, który nie jest monitorowany przez cenzora.
Gdy coś nie działa
Brak linii testu własnego w dzienniku. ORPort jest nieosiągalny. Przetestuj go z innej maszyny za pomocą nc -vz your.ip 8443. Zawieszenie oznacza, że pakiety są odrzucane, więc sprawdź ufw oraz panel dostawcy. Odmowa połączenia oznacza, że tor nie nasłuchuje, więc sprawdź ss -lntp i odczytaj dziennik w poszukiwaniu błędu konfiguracji.
Zarejestrowany transport wskazuje port, którego nie wybrano. tor zignorował ServerTransportListenAddr. Nazwa transportu musi być dokładnie zgodna z tą w ServerTransportPlugin, a obie muszą być obfs4.
obfs4proxy nie może powiązać portu 443. Potwierdź uprawnienia za pomocą getcap /usr/bin/obfs4proxy, a następnie sprawdź, czy nadpisanie dotarło do jednostki za pomocą systemctl show tor@default -p NoNewPrivileges. Jeśli polecenie zwraca NoNewPrivileges=yes, plik drop-in został przypisany do jednostki, która nie jest uruchomiona.
Brak zawartości w /var/lib/tor/pt_state/. tor nie uruchomił transportu, co oznacza, że ścieżka w ServerTransportPlugin jest błędna. Porównaj ją z wynikiem command -v obfs4proxy.
Klienci przestali się łączyć po wprowadzeniu zmian. Każda zmiana adresu lub portu obfs4 unieważnia wszystkie linie bridge, które zostały już rozpowszechnione. Sprawdź, czy publiczny adres IP serwera również uległ zmianie, co zdarza się podczas przebudowy instancji u niektórych dostawców.
tor w ogóle się nie uruchamia. Uruchom sudo -u debian-tor tor --verify-config -f /etc/tor/torrc. Polecenie to analizuje plik, wyświetla linię, do której zgłasza zastrzeżenia, i nie ingeruje w działającą usługę.
FAQ
Czy dostawca VPS będzie miał zastrzeżenia do mostka Tor?
Mostek jest punktem wejściowym, więc ruch opuszczający serwer kierowany jest do innych przekaźników sieci Tor, a nie do witryn odwiedzanych przez użytkowników. Adres IP serwera nie pojawia się w dziennikach stron jako źródło żądania, co eliminuje skargi, z którymi mierzą się operatorzy przekaźników wyjściowych. Zasady hostingu różnią się jednak w zależności od dostawcy, a niektórzy traktują każdą usługę Tor jako przypadek szczególny. Należy zapoznać się z regulaminem świadczenia usług przed rozpoczęciem pracy i podać adres e-mail, który jest regularnie sprawdzany, w ContactInfo.
Ile pasma zużywa mostek Tor?
Publikowane minimum to 1 Mbit/s w górę i w dół, w porównaniu do 10 Mbit/s dla przekaźnika typu guard lub middle. Rzeczywiste zużycie zaczyna się od zera, ponieważ mostek obsługuje ruch tylko dla użytkowników skierowanych przez dystrybutorów. Aby nałożyć twardy limit, należy ustawić RelayBandwidthRate oraz RelayBandwidthBurst w pliku torrc.
Dlaczego nikt nie łączy się z moim nowym mostkiem?
Pojawienie się mostka w Relay Search zajmuje około trzech godzin, a według wytycznych Tor Project zbudowanie stałej grupy użytkowników trwa od kilku dni do kilku tygodni. Należy sprawdzić, czy deskryptor został opublikowany (wiersz self-testing w journalctl -u tor@default), wyszukać swój skrót odcisku palca (hashed fingerprint) w Relay Search i potwierdzić, że BridgeDistribution nie jest ustawione na none.
Czy uruchomić obfs4 czy WebTunnel?
W przypadku pierwszego mostka należy wybrać obfs4: jeden VPS, dwa porty, brak domeny, brak certyfikatu. WebTunnel należy uruchomić tam, gdzie blokowany jest nawet ruch wyglądający na losowy, ponieważ wymaga on posiadania własnej domeny, działającego serwera WWW, ważnego certyfikatu TLS oraz co najmniej 1 GB pamięci RAM. W przypadku uruchamiania obu usług należy umieścić je na różnych adresach IP, ponieważ zablokowanie jednego adresu spowoduje wyłączenie obu mostków jednocześnie.
Co się stanie, jeśli zmienię port obfs4 w późniejszym czasie?
Każdy już rozpowszechniony wiersz mostka przestanie działać. Wiersz mostka wiąże ze sobą adres, port, odcisk palca oraz certyfikat, więc klient posiadający stary wiersz otworzy połączenie z portem, na którym nikt nie nasłuchuje, i przerwie próbę połączenia. To samo dotyczy zmiany publicznego adresu IP serwera. Port należy wybrać podczas konfiguracji i nie zmieniać go później.