HTTP и SOCKS — Xray-core
Универсальные прокси-протоколы. HTTP поддерживает CONNECT и более старый режим прозрачного прокси; SOCKS поддерживает и v4a, и v5 (версия автоматически определяется по первому байту, отправленному клиентом).
HTTP
Входящий
settings для "protocol": "http":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
users | []*HTTPAccount | — | [HTTPAccount] | … | Список учётных записей входящего; та же форма объекта, что и у `accounts`. `users` — более новое имя, появившееся в свежих версиях Xray и принимаемое наряду с `accounts`. |
accounts | []*HTTPAccount | [] | [HTTPAccount] | Список пользователей. Пустой отключает аутентификацию (входящий становится открытым прокси). |
allowTransparent | bool | false | true | false | Если true, входящий принимает запросы без CONNECT и пересылает их как прозрачный HTTP-прокси. |
userLevel | uint32 | 0 | <uint32> | Уровень политики по умолчанию для клиентов без индивидуального переопределения. |
Исходный код: infra/conf/http.go:25-30 · зафиксировано на v26.7.28 (5ca6f4b)
accounts[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
user | string | (required) | <string> | Имя пользователя для HTTP Basic-аутентификации. |
pass | string | (required) | <string> | Пароль для HTTP Basic-аутентификации. |
Исходный код: infra/conf/http.go:13-16 · зафиксировано на v26.7.28 (5ca6f4b)
Исходящий
settings для исходящего с "protocol": "http":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
address | *Address | (unset) | <host> | Упрощённая форма — хост вышестоящего прокси. |
port | uint16 | (required with address) | <port> | Порт вышестоящего прокси. |
level | uint32 | 0 | <uint32> | Уровень политики. |
email | string | (unset) | <string> | Метка в статистике и журналах. |
user | string | (unset) | <string> | Имя пользователя для аутентификации на вышестоящем. |
pass | string | (unset) | <string> | Пароль для аутентификации на вышестоящем. |
servers | []*HTTPRemoteConfig | (use simplified shape) | [HTTPRemoteConfig] | Полная форма с ровно одним сервером. |
headers | map[string]string | {} | {<header>: <value>} | Дополнительные HTTP-заголовки, отправляемые с каждым запросом. |
Исходный код: infra/conf/http.go:58-67 · зафиксировано на v26.7.28 (5ca6f4b)
servers[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
address | *Address | (required) | <host> | Хост вышестоящего прокси. |
port | uint16 | (required) | <port> | Порт вышестоящего прокси. |
users | []json.RawMessage | [] | [HTTPAccount] | Необязательные пользователи для аутентификации (не более одного). |
Исходный код: infra/conf/http.go:52-56 · зафиксировано на v26.7.28 (5ca6f4b)
SOCKS
Входящий
settings для "protocol": "socks":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
auth | string | noauth | noauth | password | Режим аутентификации. Неизвестные значения молча откатываются к `noauth` (`infra/conf/socks.go:45-47`). |
users | []*SocksAccount | — | [SocksAccount] | … | Список учётных записей входящего; та же форма объекта, что и у `accounts`. `users` — более новое имя, появившееся в свежих версиях Xray и принимаемое наряду с `accounts`. |
accounts | []*SocksAccount | [] | [SocksAccount] | Список пользователей для `auth: password`. |
udp | bool | false | true | false | Включить поддержку SOCKS5 UDP-associate. |
ip | *Address | (unset) | <address> | Публичный адрес, объявляемый в ответах UDP-associate. Обязателен, когда слушатель находится за NAT. |
userLevel | uint32 | 0 | <uint32> | Уровень политики по умолчанию. |
Исходный код: infra/conf/socks.go:30-37 · зафиксировано на v26.7.28 (5ca6f4b)
accounts[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
user | string | (required) | <string> | Имя пользователя. |
pass | string | (required) | <string> | Пароль. |
Исходный код: infra/conf/socks.go:13-16 · зафиксировано на v26.7.28 (5ca6f4b)
Исходящий
settings для исходящего с "protocol": "socks":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
address | *Address | (unset) | <host> | Упрощённая форма — хост вышестоящего SOCKS. |
port | uint16 | (required with address) | <port> | Порт вышестоящего SOCKS. |
level | uint32 | 0 | <uint32> | Уровень политики. |
email | string | (unset) | <string> | Метка в статистике. |
user | string | (unset) | <string> | Имя пользователя для аутентификации. |
pass | string | (unset) | <string> | Пароль для аутентификации. |
servers | []*SocksRemoteConfig | (use simplified shape) | [SocksRemoteConfig] | Полная форма с ровно одним сервером. |
Исходный код: infra/conf/socks.go:77-85 · зафиксировано на v26.7.28 (5ca6f4b)
servers[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
address | *Address | (required) | <host> | Хост вышестоящего SOCKS. |
port | uint16 | (required) | <port> | Порт вышестоящего SOCKS. |
users | []json.RawMessage | [] | [SocksAccount] | Необязательные пользователи для аутентификации. |
Исходный код: infra/conf/socks.go:71-75 · зафиксировано на v26.7.28 (5ca6f4b)
Примеры
Входящий HTTP с двумя пользователями:
{
"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:
{
"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-прокси:
{
"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)
