Skip to content

HTTP и SOCKS — Xray-core

Универсальные прокси-протоколы. HTTP поддерживает CONNECT и более старый режим прозрачного прокси; SOCKS поддерживает и v4a, и v5 (версия автоматически определяется по первому байту, отправленному клиентом).

HTTP

Входящий

settings для "protocol": "http":

ПолеТипПо умолчаниюДопустимые значенияОписание
users[]*HTTPAccount[HTTPAccount] | …Список учётных записей входящего; та же форма объекта, что и у `accounts`. `users` — более новое имя, появившееся в свежих версиях Xray и принимаемое наряду с `accounts`.
accounts[]*HTTPAccount[][HTTPAccount]Список пользователей. Пустой отключает аутентификацию (входящий становится открытым прокси).
allowTransparentboolfalsetrue | falseЕсли true, входящий принимает запросы без CONNECT и пересылает их как прозрачный HTTP-прокси.
userLeveluint320<uint32>Уровень политики по умолчанию для клиентов без индивидуального переопределения.

Исходный код: infra/conf/http.go:25-30 · зафиксировано на v26.7.28 (5ca6f4b)

accounts[]

ПолеТипПо умолчаниюДопустимые значенияОписание
userstring(required)<string>Имя пользователя для HTTP Basic-аутентификации.
passstring(required)<string>Пароль для HTTP Basic-аутентификации.

Исходный код: infra/conf/http.go:13-16 · зафиксировано на v26.7.28 (5ca6f4b)

Исходящий

settings для исходящего с "protocol": "http":

ПолеТипПо умолчаниюДопустимые значенияОписание
address*Address(unset)<host>Упрощённая форма — хост вышестоящего прокси.
portuint16(required with address)<port>Порт вышестоящего прокси.
leveluint320<uint32>Уровень политики.
emailstring(unset)<string>Метка в статистике и журналах.
userstring(unset)<string>Имя пользователя для аутентификации на вышестоящем.
passstring(unset)<string>Пароль для аутентификации на вышестоящем.
servers[]*HTTPRemoteConfig(use simplified shape)[HTTPRemoteConfig]Полная форма с ровно одним сервером.
headersmap[string]string{}{<header>: <value>}Дополнительные HTTP-заголовки, отправляемые с каждым запросом.

Исходный код: infra/conf/http.go:58-67 · зафиксировано на v26.7.28 (5ca6f4b)

servers[]

ПолеТипПо умолчаниюДопустимые значенияОписание
address*Address(required)<host>Хост вышестоящего прокси.
portuint16(required)<port>Порт вышестоящего прокси.
users[]json.RawMessage[][HTTPAccount]Необязательные пользователи для аутентификации (не более одного).

Исходный код: infra/conf/http.go:52-56 · зафиксировано на v26.7.28 (5ca6f4b)

SOCKS

Входящий

settings для "protocol": "socks":

ПолеТипПо умолчаниюДопустимые значенияОписание
authstringnoauthnoauth | passwordРежим аутентификации. Неизвестные значения молча откатываются к `noauth` (`infra/conf/socks.go:45-47`).
users[]*SocksAccount[SocksAccount] | …Список учётных записей входящего; та же форма объекта, что и у `accounts`. `users` — более новое имя, появившееся в свежих версиях Xray и принимаемое наряду с `accounts`.
accounts[]*SocksAccount[][SocksAccount]Список пользователей для `auth: password`.
udpboolfalsetrue | falseВключить поддержку SOCKS5 UDP-associate.
ip*Address(unset)<address>Публичный адрес, объявляемый в ответах UDP-associate. Обязателен, когда слушатель находится за NAT.
userLeveluint320<uint32>Уровень политики по умолчанию.

Исходный код: infra/conf/socks.go:30-37 · зафиксировано на v26.7.28 (5ca6f4b)

accounts[]

ПолеТипПо умолчаниюДопустимые значенияОписание
userstring(required)<string>Имя пользователя.
passstring(required)<string>Пароль.

Исходный код: infra/conf/socks.go:13-16 · зафиксировано на v26.7.28 (5ca6f4b)

Исходящий

settings для исходящего с "protocol": "socks":

ПолеТипПо умолчаниюДопустимые значенияОписание
address*Address(unset)<host>Упрощённая форма — хост вышестоящего SOCKS.
portuint16(required with address)<port>Порт вышестоящего SOCKS.
leveluint320<uint32>Уровень политики.
emailstring(unset)<string>Метка в статистике.
userstring(unset)<string>Имя пользователя для аутентификации.
passstring(unset)<string>Пароль для аутентификации.
servers[]*SocksRemoteConfig(use simplified shape)[SocksRemoteConfig]Полная форма с ровно одним сервером.

Исходный код: infra/conf/socks.go:77-85 · зафиксировано на v26.7.28 (5ca6f4b)

servers[]

ПолеТипПо умолчаниюДопустимые значенияОписание
address*Address(required)<host>Хост вышестоящего SOCKS.
portuint16(required)<port>Порт вышестоящего SOCKS.
users[]json.RawMessage[][SocksAccount]Необязательные пользователи для аутентификации.

Исходный код: infra/conf/socks.go:71-75 · зафиксировано на v26.7.28 (5ca6f4b)

Примеры

Входящий HTTP с двумя пользователями:

json
{
  "inbounds": [
    {
      "tag": "http-in",
      "listen": "127.0.0.1",
      "port": 1080,
      "protocol": "http",
      "settings": {
        "accounts": [
          { "user": "alice", "pass": "<password>" },
          { "user": "bob",   "pass": "<password>" }
        ],
        "allowTransparent": false
      }
    }
  ]
}

Входящий SOCKS5 с UDP-associate:

json
{
  "inbounds": [
    {
      "tag": "socks-in",
      "listen": "0.0.0.0",
      "port": 1081,
      "protocol": "socks",
      "settings": {
        "auth": "password",
        "accounts": [{ "user": "alice", "pass": "<password>" }],
        "udp": true,
        "ip": "203.0.113.10"
      }
    }
  ]
}

Исходящий к вышестоящему HTTP-прокси:

json
{
  "outbounds": [
    {
      "tag": "via-http",
      "protocol": "http",
      "settings": {
        "address": "upstream.example.com",
        "port": 8080,
        "user": "alice",
        "pass": "<password>",
        "headers": { "X-Forwarded-Proto": "https" }
      }
    }
  ]
}

Примечания

  • Входящий HTTP без учётных записей работает как открытый прокси. Ограничьте его с помощью listen: "127.0.0.1", правила маршрутизации, отбрасывающего внешние источники, или того и другого сразу.
  • allowTransparent: true редко бывает тем, что нужно. Он включает старый режим V2Ray «использовать входящий как прозрачный форвардер», который конфликтует с явным прокси-методом CONNECT. Оставьте выключенным, если нет конкретного сценария.
  • auth: "password" — единственный способ требовать учётные данные на SOCKS. Неизвестные строки метода аутентификации молча деградируют до noauth — опечатки не дают ошибки (infra/conf/socks.go:45-47).
  • Поле ip у SOCKS — это публично достижимый адрес, объявляемый в ответах UDP-associate. Без него клиенты по ту сторону NAT получат немаршрутизируемый внутренний адрес.
  • Исходящие и HTTP, и SOCKS используют шаблон «упрощённая форма против servers[]» — в servers[] должен быть ровно один элемент.

Сравнение с другими ядрами

  • sing-box объединяет HTTP и SOCKS в одном исходном файле (option/simple.go) и предлагает третий, «смешанный» (mixed) входящий, обслуживающий оба протокола на одном порту. См. HTTP и SOCKS — sing-box.
  • mihomo использует username/password (а не user/pass) на исходящем, делит входящие слушатели на три типа (http, socks, mixed) и поддерживает HTTP/SOCKS в TLS-обёртке через поле сертификата слушателя. См. HTTP и SOCKS — mihomo.

Исходный код: infra/conf/http.go:13-67 · v26.7.28 (5ca6f4b)

Core Tutorial от Argsment