- Shell 70.1%
- Batchfile 29.9%
| configSocksHttp.yaml | ||
| configTun.yaml | ||
| README.md | ||
| run.bat | ||
| run.sh | ||
Пример конфигурации клиента
server: example.com:443
auth: Password
tls:
sni: example.com
# insecure: false
# ----------- Для тоннеля -----------
tun:
name: hytun
mtu: 1400
address:
ipv4: 100.100.100.101/30
ipv6: "2001::ffff:ffff:ffff:fff1/126"
route:
ipv4: [0.0.0.0/0]
ipv6: ["2000::/3"]
ipv4Exclude:
- 0.0.0.0/32
# ----------- Для тоннеля -----------
# ----------- Скорость -----------
bandwidth:
up: 20 mbps
down: 100 mbps
# ----------- Скорость -----------
# ----------- Socks5h -----------
socks5:
listen: 127.0.0.1:1080
# ----------- Socks5h -----------
# ----------- Http -----------
http:
listen: 127.0.0.1:1080
# ----------- Http -----------
Полная конфигурация клиента
Примечание: в конфигурации часто используется «селектор типа»:
example: type: a a: something: something b: something: something
typeопределяет активный режим и обрабатываемое подполе. Если выбранa, блокиbиcигнорируются.
Адрес сервера
server — адрес сервера Hysteria в виде host:port или просто host. Если порт не указан, используется 443.
server: example.com
Можно указать URI Hysteria 2. В таком случае пароль и часть других параметров уже содержатся в URI и отдельно в YAML их указывать не нужно.
server: hysteria2://user:[email protected]/
Поддерживается URI Hysteria Realms для подключения к серверу в P2P-режиме:
server: realm://[email protected]/your-realm-name
Realm
Тонкая настройка Hysteria Realms. Все параметры необязательны.
realm:
stunServers:
- stun.nextcloud.com:3478
- global.stun.twilio.com:3478
stunTimeout: 5s
punchTimeout: 5s
insecure: false
ipMode: dual
portMapping:
enabled: false
timeout: 10s
lifetime: 10m
stunServers— STUN-серверы для определения публичного UDP-адреса клиента.stunTimeout— таймаут запроса к отдельному STUN-серверу.punchTimeout— максимальное время ожидания успешного UDP hole punching.insecure— отключает проверку TLS rendezvous-сервера с самоподписанным сертификатом; предназначено только для разработки.ipMode— семейство IP для NAT traversal:dual,v4илиv6.portMapping.enabled— попытка создать UPnP/NAT-PMP port mapping на шлюзе.portMapping.timeout— таймаут одной операции с роутером.portMapping.lifetime— время аренды проброса порта; продлевается автоматически.
Аутентификация
auth: some_password
Если сервер использует аутентификацию userpass, формат должен быть таким:
auth: username:password
TLS
tls:
sni: another.example.com
insecure: false
pinSHA256: BA:88:45:17:A1...
ca: custom_ca.crt
clientCertificate: client.crt
clientKey: client.key
ech: AEz+DQBIAAAg...
sni— имя для TLS-проверки. Если не указано, извлекается изserver.insecure— отключает проверку TLS-сертификата.pinSHA256— SHA-256 fingerprint сертификата сервера.
openssl x509 -noout -fingerprint -sha256 -in your_cert.crt
ca— пользовательский CA-сертификат.clientCertificateиclientKey— клиентский сертификат и ключ для mTLS.ech— ECH config list от сервера в base64 либо путь к файлу с ним. ECH должен быть включён и на сервере.
Транспорт
Секция transport задаёт базовый транспорт QUIC. Сейчас доступен только UDP.
transport:
type: udp
udp:
hopInterval: 30s
Либо можно задать случайный интервал смены портов:
transport:
type: udp
udp:
minHopInterval: 15s
maxHopInterval: 45s
Нельзя одновременно указывать hopInterval и пару minHopInterval/maxHopInterval. Если ничего не указано, используется hopInterval: 30s.
Обфускация
По умолчанию Hysteria похожа на HTTP/3. Если сеть блокирует QUIC/HTTP3, но не UDP целиком, можно включить обфускацию.
salamanderпревращает пакеты в случайные байты.gecko— экспериментальная надстройка над Salamander, дополнительно фрагментирующая QUIC handshake-пакеты.
Пароль должен совпадать с серверным. Неправильный пароль проявится как таймаут подключения.
Salamander
obfs:
type: salamander
salamander:
password: cry_me_a_r1ver
Gecko
obfs:
type: gecko
gecko:
password: cry_me_a_r1ver
minPacketSize: 512
maxPacketSize: 1200
maxPacketSize должен быть не меньше minPacketSize и не больше 2048.
Параметры QUIC
quic:
initStreamReceiveWindow: 8388608
maxStreamReceiveWindow: 8388608
initConnReceiveWindow: 20971520
maxConnReceiveWindow: 20971520
maxIdleTimeout: 30s
keepAlivePeriod: 10s
disablePathMTUDiscovery: false
disableChromeParrot: false
sockopts:
bindInterface: eth0
fwmark: 1234
fdControlUnixSocket: ./test.sock
initStreamReceiveWindow,maxStreamReceiveWindow— начальное и максимальное окно приёма QUIC-потока.initConnReceiveWindow,maxConnReceiveWindow— начальное и максимальное окно приёма QUIC-соединения.maxIdleTimeout— период отсутствия пакетов, после которого соединение считается неактивным.keepAlivePeriod— частота keepalive-пакетов.disablePathMTUDiscovery— отключает Path MTU Discovery.disableChromeParrot— отключает имитацию QUIC fingerprint Google Chrome.sockopts.bindInterface— принудительная отправка QUIC через указанный Linux-интерфейс.sockopts.fwmark—SO_MARKдля QUIC-пакетов на Linux.sockopts.fdControlUnixSocket— Unix socket для передачи файлового дескриптора QUIC-сокета другому процессу.
Значения окон по умолчанию — 8 MiB на поток и 20 MiB на соединение. Документация не рекомендует менять их без необходимости; при изменении рекомендуется сохранять пропорцию 2:5.
При включённой имитации Chrome параметры Chrome переопределяют часть настроек: maxIdleTimeout фиксируется на 30 секундах, а receive windows стартуют со значений Chrome. Сертификат Ed25519 в этом режиме не сможет завершить handshake; используйте ECDSA или RSA. v2.hysteria
Mimic
mimic маскирует соединение под TCP. Работает только на Linux и требует установленный mimic, его kernel module и запуск Hysteria с правами root.
mimic:
enabled: true
interface: eth0
xdpMode: skb
path: /usr/bin/mimic
extraArgs: []
enabledдолжен совпадать на клиенте и сервере.interface— интерфейс, к которому подключается XDP; по умолчанию определяется автоматически.xdpMode—nativeилиskb.path— путь к бинарникуmimic.extraArgs— дополнительные параметры процессаmimic.
Mimic несовместим с port hopping и отключает UDP GSO, уменьшая пропускную способность. v2.hysteria
Управление перегрузкой
congestion:
type: bbr
bbrProfile: standard
Поддерживаются:
bbr— Google BBR v1, значение по умолчанию.reno— New Reno.
Профили BBR:
standardconservativeaggressive
Настройка локальна: она не согласовывается с сервером по протоколу. Она используется, если для соответствующего направления не выбран Brutal через bandwidth.
Полоса пропускания
bandwidth:
up: 100 mbps
down: 200 mbps
disableLossCompensation: false
up— лимит исходящего трафика клиента.down— лимит входящего трафика клиента.- Наличие значения
upилиdownопределяет применение Brutal congestion control в соответствующем направлении. disableLossCompensation: trueотключает компенсацию потерь у Brutal.
Если нужен BBR/Reno вместо Brutal, удали соответствующее поле скорости или весь блок bandwidth.
Поддерживаемые единицы:
bps, b
kbps, kb, k
mbps, mb, m
gbps, gb, g
tbps, tb, t
Не устанавливай скорость выше реальной пропускной способности соединения: это вызывает перегрузку, потери пакетов и нестабильность. Реальная скорость ограничивается меньшим значением между лимитом клиента и соответствующим лимитом сервера. v2.hysteria
Fast Open
fastOpen: true
Позволяет сэкономить один RTT, но меняет семантику SOCKS5/HTTP proxy: клиент принимает входящее соединение до подтверждения, что сервер может открыть целевое соединение.
Lazy
lazy: true
Клиент не подключается к серверу сразу при запуске, а ждёт первого входящего соединения от включённого режима. Это полезно при нестабильной сети во время старта системы или если прокси используется редко.
SOCKS5
socks5:
listen: 127.0.0.1:1080
username: user
password: pass
disableUDP: false
SOCKS5 поддерживает TCP и UDP.
HTTP-proxy
http:
listen: 127.0.0.1:8080
username: king
password: kong
realm: martian
Поддерживаются HTTP и HTTPS через CONNECT.
Начиная с Hysteria 2.4.1, SOCKS5 и HTTP могут одновременно слушать один порт, если их listen совпадают. v2.hysteria
TCP forwarding
tcpForwarding:
- listen: 127.0.0.1:6600
remote: 127.0.0.1:6600
- listen: 127.0.0.1:6601
remote: other.machine.internal:6601
listen — локальный адрес на клиенте, remote — адрес, доступный с сервера или его сети.
UDP forwarding
udpForwarding:
- listen: 127.0.0.1:5300
remote: 127.0.0.1:5300
timeout: 20s
- listen: 127.0.0.1:5301
remote: other.machine.internal:5301
timeout: 20s
timeout — время жизни неактивной UDP-сессии. По умолчанию — 60s.
TCP TProxy
Только Linux. Режим прозрачного проксирования TCP.
tcpTProxy:
listen: :2500
UDP TProxy
Только Linux. Режим прозрачного проксирования UDP.
udpTProxy:
listen: :2500
timeout: 20s
Если timeout не указан, используется 60s.
TCP Redirect
Старый Linux-способ прозрачного TCP-проксирования через REDIRECT. Если ядро поддерживает TPROXY, рекомендуется TPROXY.
tcpRedirect:
listen: :3500
Пример iptables:
iptables -t nat -N HYSTERIA
iptables -t nat -A HYSTERIA -d 0.0.0.0/8 -j RETURN
iptables -t nat -A HYSTERIA -d 10.0.0.0/8 -j RETURN
iptables -t nat -A HYSTERIA -d 127.0.0.0/8 -j RETURN
iptables -t nat -A HYSTERIA -d 169.254.0.0/16 -j RETURN
iptables -t nat -A HYSTERIA -d 172.16.0.0/12 -j RETURN
iptables -t nat -A HYSTERIA -d 192.168.0.0/16 -j RETURN
iptables -t nat -A HYSTERIA -d 224.0.0.0/4 -j RETURN
iptables -t nat -A HYSTERIA -p tcp -j REDIRECT --to-ports 3500
iptables -t nat -A OUTPUT -p tcp -j HYSTERIA
iptables -t nat -A PREROUTING -p tcp -j HYSTERIA
TUN
TUN — кроссплатформенный режим прозрачного проксирования для Windows, Linux и macOS. Hysteria создаёт виртуальный сетевой интерфейс, настраивает адреса и маршруты, затем перехватывает TCP/UDP-трафик.
В отличие от WireGuard/OpenVPN, TUN Hysteria не поддерживает ICMP и другие не-TCP/UDP протоколы. Например,
pingчерез него не проходит.
tun:
name: hytun
mtu: 1500
timeout: 5m
address:
ipv4: 100.100.100.101/30
ipv6: 2001::ffff:ffff:ffff:fff1/126
route:
ipv4: [0.0.0.0/0]
ipv6: ["2000::/3"]
ipv4Exclude: [192.0.2.1/32]
ipv6Exclude: ["2001:db8::1/128"]
name— имя TUN-интерфейса.mtu— MTU интерфейса, по умолчанию1500.timeout— UDP idle timeout, по умолчанию5m.address.ipv4,address.ipv6— адреса интерфейса; выбери приватные адреса, не конфликтующие с LAN.route.ipv4,route.ipv6— сети, направляемые в TUN.route.ipv4Exclude,route.ipv6Exclude— исключения из TUN-маршрутизации.
В ipv4Exclude и/или ipv6Exclude обязательно нужно добавить IP-адрес Hysteria-сервера, иначе получится петля: пакет к самому серверу тоже уйдёт в TUN и соединение перестанет работать.
Например, если сервер доступен по IPv4 203.0.113.10:
tun:
name: hytun
address:
ipv4: 100.100.100.101/30
route:
ipv4: [0.0.0.0/0]
ipv4Exclude: [203.0.113.10/32]
На Linux иногда требуется отключить строгий reverse path filtering:
sysctl net.ipv4.conf.default.rp_filter=2
sysctl net.ipv4.conf.all.rp_filter=2
Известные ограничения:
| ОС | Особенность |
|---|---|
| macOS | Имя интерфейса должно соответствовать формату utun<number>, например utun123 |
| Windows Server 2022 | Для работы требуется отключить Windows Firewall |
| CentOS 7 | Требуется отключить firewall; на ядрах ниже 4.17 автоматически добавляемые маршруты работают некорректно |
| FreeBSD | Не поддерживается |