obfs4
obfs4 (obfsproxy 4-е поколение) — pluggable transport для Tor, самый ходовой. Задача: сделать так, чтобы трафик между клиентом и Tor-мостом выглядел как случайный шум, без узнаваемых сигнатур.
Как работает
- Клиент и мост заранее знают общий NodeID (публичный ключ моста).
- Клиент шлёт handshake, шифрованный так, что каждый его байт статистически неотличим от случайного. Никаких магических констант, никаких фиксированных длин.
- Мост проверяет что клиент знает ключ (защита от активного пробинга: если у тебя нет ключа, ты не отличишь ответ моста от случайного шума).
- После handshake — весь дальнейший трафик тоже равномерно случайный.
DPI видит в проводе поток байт с идеальной энтропией. Не HTTP, не TLS, не что-то знакомое. И детектор не может тестить активным пробингом — «на любой байт получаешь случайные байты в ответ», не отличишь настоящий obfs4-сервер от чёрной дыры.
Криптография
- Curve25519 (X25519) для DH-обмена.
- NaCl secretbox (XSalsa20-Poly1305) для шифрования потока.
- HMAC-SHA256 для аутентификации handshake.
- Все ключи эфемерные, forward secrecy обеспечена.
IAT-mode
Inter-Arrival Time mode — искусственно рандомизирует задержки и размеры пакетов. Три значения:
IAT-MODE=0— отключено (по умолчанию, быстрее).IAT-MODE=1— включено (медленнее, но труднее детектить по timing-анализу).IAT-MODE=2— параноидальный режим.
В большинстве случаев IAT-MODE=0 достаточно. Включать при сильном DPI (Иран, Китай, Туркменистан).
Формат bridge line
obfs4 IP:PORT FINGERPRINT cert=BASE64_CERT iat-mode=0
Где:
- IP:PORT — адрес моста.
- FINGERPRINT — SHA-1 длинного идентификатора моста.
- cert — публичный ключ моста + node-id, base64.
- iat-mode — режим IAT.
Ограничения
- IP статичен. Один obfs4-мост = один IP. Как только IP попадает в блок-лист — мосту конец, надо новый. Отсюда постоянная ротация мостов через bridges.torproject.org.
- Random-байты подозрительны. В 2023-2024 Китай начал блокировать любой полностью случайный TCP-поток на нестандартных портах — не потому что распознал obfs4, а по принципу «легитимный трафик всегда с сигнатурой». В таких сценариях обычно переходят на snowflake или meek.
- Timing-анализ. Если DPI анализирует межпакетные интервалы, obfs4 без IAT детектится. Включить
iat-mode=1.
Запуск собственного obfs4-моста
Помогает Tor и людям, у которых заблокировано. На VPS:
apt install tor obfs4proxy
# В /etc/tor/torrc:
BridgeRelay 1
ORPort 9001
ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy
ServerTransportListenAddr obfs4 0.0.0.0:9002
ExtORPort auto
ContactInfo your@email
Nickname MyBridge
Ждёшь пару недель, чтобы мост попал в BridgeDB и стал доступен другим.