Перейти к содержанию

ACL

ACL, часто используемый в сочетании с исходящими каналами, — это очень мощная функция сервера Hysteria, позволяющая настраивать обработку запросов клиентов. Например, вы можете использовать ACL для блокировки определённых адресов или для использования разных исходящих каналов для разных сайтов.

Синтаксис

Допустимое правило ACL должно быть в одном из следующих форматов:

  • outbound(address)
  • outbound(address, proto/port)
  • outbound(address, proto/port, hijack_address)
  • # Это комментарий

Типы адресов

Поле address может быть одним из следующих:

  • Один IPv4/IPv6-адрес, например 1.1.1.1 или 2606:4700:4700::1111
  • IPv4/IPv6 CIDR, например 73.0.0.0/8 или 2001:db8::/32
  • Доменное имя, например example.com (не включает поддомены)
  • Доменное имя с подстановочным знаком, например *.example.com или *.google.*
  • Суффикс домена, например suffix:example.com (соответствует example.com и всем его поддоменам)
  • Код страны GeoIP, например geoip:cn или geoip:us
  • Категория GeoSite, например geosite:netflix или geosite:google (поддерживает атрибуты, например geosite:google@cn)
  • all — соответствует всем адресам. Обычно размещается в конце как правило по умолчанию для всего остального.

Чтобы увидеть доступные категории GeoSite, посмотрите здесь:

Протокол/порт

  • tcp или tcp/* — все TCP-порты
  • udp или udp/* — все UDP-порты
  • tcp/80 — TCP-порт 80
  • udp/53 — UDP-порт 53
  • udp/20000-30000 — UDP-порты с 20000 по 30000
  • */443 — TCP и UDP порт 443
  • *, */* или опущено — оба протокола и все порты

Подмена адреса

Если указан, соединение, соответствующее этому правилу, будет перенаправлено на указанный адрес. Адрес подмены должен быть IPv4/IPv6-адресом, а не доменным именем.

Поведение сопоставления

Сопоставление доменов и IP

При обработке запросов на основе доменов Hysteria сначала разрешает домен, а затем пытается сопоставить результат как с доменными, так и с IP-правилами. Это означает, что правило, основанное на IP-адресе, будет применяться ко всем соединениям, которые в конечном итоге ведут к этому IP, независимо от того, использовал ли клиент IP-адрес или доменное имя.

Порядок правил

Гарантируется, что правила проверяются сверху вниз. Используется первое правило, соответствующее запросу. Если ни одно правило не соответствует, используется исходящий канал по умолчанию (первый в списке).

Встроенные исходящие каналы

Если явно не переопределены в списке исходящих каналов, Hysteria предоставляет следующие встроенные каналы:

  • direct — прямой исходящий канал с конфигурацией по умолчанию (auto, без привязки)
  • reject — отклонить соединение
  • default — использовать первый исходящий канал в списке; если список пуст, эквивалентно direct

Примеры

Предположим следующий список исходящих каналов:

outbounds:
  - name: v4_only
    type: direct
    direct:
      mode: 4
  - name: v6_only
    type: direct
    direct:
      mode: 6
  - name: some_proxy
    type: socks5
    socks5:
      addr: ohno.moe:1080
# Использовать v6_only для Google
v6_only(suffix:google.com)

# Использовать v4_only для Twitter
v4_only(suffix:twitter.com)

# Использовать some_proxy для ipinfo.io
some_proxy(ipinfo.io)

# Неанглийские IDN-домены также поддерживаются
v6_only(战狼*.中国)

# Блокировать протокол QUIC
reject(all, udp/443)

# Блокировать протокол SMTP
reject(all, tcp/25)

# Блокировать Китай и Северную Корею
reject(geoip:cn)
reject(geoip:kp)

# Блокировать Facebook и рекламу Google
reject(geosite:facebook)
reject(geosite:google@ads)

# Блокировать случайные диапазоны
reject(73.0.0.0/8)
reject(2601::/20)

# Подменить 8.8.8.8 на 1.1.1.1, используя исходящий канал по умолчанию (первый)
default(8.8.8.8, *, 1.1.1.1)

# Подменить 8.8.4.4 на 1.1.1.1, используя канал по умолчанию, но только UDP 53
default(8.8.4.4, udp/53, 1.1.1.1)

# Прямое соединение для всего остального
direct(all)

ПРИМЕЧАНИЕ: ACL полностью функционален без пользовательских исходящих каналов. Встроенные каналы всегда доступны, даже если список исходящих каналов пуст. Фактически, одно из самых распространённых применений ACL — просто блокировка некоторых адресов:

reject(geoip:cn)
reject(geosite:facebook)
reject(10.0.0.0/8)
reject(172.16.0.0/12)
reject(192.168.0.0/16)
reject(fc00::/7)