Транспорт

Транспорт (transport) - это способ, которым текущий узел Xray взаимодействует с другими узлами.

Транспорт определяет способ передачи данных. Обычно оба конца сетевого подключения должны использовать одинаковый транспорт.
Например, если один конец использует WebSocket, то другой конец также должен использовать WebSocket, иначе соединение не будет установлено.

StreamSettingsObject

StreamSettingsObject соответствует полю streamSettings во входящем или исходящем подключении.
Каждое входящее или исходящее подключение может иметь свои собственные настройки транспорта.

{
  "network": "tcp",
  "security": "none",
  "tlsSettings": {},
  "tcpSettings": {},
  "kcpSettings": {},
  "wsSettings": {},
  "httpSettings": {},
  "grpcSettings": {},
  "httpupgradeSettings": {},
  "splithttpSettings": {},
  "sockopt": {
    "mark": 0,
    "tcpMaxSeg": 1440,
    "tcpFastOpen": false,
    "tproxy": "off",
    "domainStrategy": "AsIs",
    "dialerProxy": "",
    "acceptProxyProtocol": false,
    "tcpKeepAliveInterval": 0,
    "tcpKeepAliveIdle": 300,
    "tcpUserTimeout": 10000,
    "tcpCongestion": "bbr",
    "interface": "wg0",
    "v6only": false,
    "tcpWindowClamp": 600,
    "tcpMptcp": false,
    "tcpNoDelay": false,
    "customSockopt": []
  }
}

network: "tcp" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "splithttp"

Тип транспорта, используемый для передачи данных.
Значение по умолчанию - "tcp".

Подсказка

"h2" можно записать как "http", "grpc" - как "gun", "kcp" - как "mkcp".

security: "none" | "tls" | "reality"

Включить шифрование транспортного уровня.
Доступные значения:

tlsSettings: TLSObject

Настройки TLS.
TLS предоставляется Golang.
Обычно в результате согласования TLS используется TLS 1.3, DTLS не поддерживается.

realitySettings: RealityObject

Настройки Reality.
Reality - это оригинальная технология Xray.
Reality обеспечивает более высокий уровень безопасности, чем TLS, и настраивается аналогично TLS.

Подсказка

Reality - это самый безопасный на данный момент способ шифрования транспорта, и внешний трафик выглядит как обычный интернет-трафик.
Включение Reality и настройка правильного режима управления потоком XTLS Vision может привести к увеличению производительности в несколько раз.

tcpSettings: TcpObject

Настройки TCP для текущего подключения, действуют только при использовании TCP.
Настройки аналогичны глобальным настройкам, описанным выше.

kcpSettings: KcpObject

Настройки mKCP для текущего подключения, действуют только при использовании mKCP.
Настройки аналогичны глобальным настройкам, описанным выше.

wsSettings: WebSocketObject

Настройки WebSocket для текущего подключения, действуют только при использовании WebSocket.
Настройки аналогичны глобальным настройкам, описанным выше.

httpSettings: HttpObject

Настройки HTTP/2 для текущего подключения, действуют только при использовании HTTP/2.
Настройки аналогичны глобальным настройкам, описанным выше.

grpcSettings: GRPCObject

Настройки gRPC для текущего подключения, действуют только при использовании gRPC.
Настройки аналогичны глобальным настройкам, описанным выше.

httpupgradeSettings: HttpUpgradeObject

Настройки HTTPUpgrade для текущего подключения, действуют только при использовании HTTPUpgrade.
Настройки аналогичны глобальным настройкам, описанным выше.

splithttpSettings: SplitHttpObject

Настройки SplitHTTP для текущего подключения, действуют только при использовании SplitHTTP.
Настройки аналогичны глобальным настройкам, описанным выше.

sockopt: SockoptObject

Настройки прозрачного прокси.

TLSObject

{
  "serverName": "xray.com",
  "rejectUnknownSni": false,
  "allowInsecure": false,
  "alpn": ["h2", "http/1.1"],
  "minVersion": "1.2",
  "maxVersion": "1.3",
  "cipherSuites": "список наборов шифров, разделенных двоеточиями",
  "certificates": [],
  "disableSystemRoot": false,
  "enableSessionResumption": false,
  "fingerprint": "",
  "pinnedPeerCertificateChainSha256": [""],
  "masterKeyLog": ""
}

serverName: string

Доменное имя сертификата сервера.
Используется, если соединение установлено по IP-адресу.

Если этот параметр не указан, автоматически используется значение из address (если это доменное имя).
Это значение также используется для проверки действительности сертификата сервера.

Подсказка

Как упомянуто выше, поскольку это значение также используется для проверки действительности сертификата сервера, если по какой-либо причине вам нужно указать значение, отличное от доменного имени в сертификате сервера, необходимо включить параметр allowInsecure, иначе проверка сертификата завершится неудачей.
Из соображений безопасности мы не рекомендуем использовать этот метод постоянно.
Если вам нужно безопасно подменить SNI, рассмотрите возможность использования REALITY.

В частности, если на клиенте указан IP-адрес, Xray не будет отправлять SNI.
Чтобы использовать эту функцию, также необходимо включить allowInsecure.

rejectUnknownSni: bool

Если значение равно true, сервер отклонит рукопожатие TLS, если полученный SNI не совпадает с доменным именем в сертификате.
Значение по умолчанию - false.

alpn: [ string ]

Массив строк, указывающий значения ALPN, используемые при рукопожатии TLS.
Значение по умолчанию - ["h2", "http/1.1"].

minVersion: string

Минимальная допустимая версия TLS.

maxVersion: string

Максимальная допустимая версия TLS.

cipherSuites: string

Список поддерживаемых наборов шифров, разделенных двоеточиями.

Список наборов шифров Golang и их описания можно найти здесьОткрыть в новой вкладке или здесьОткрыть в новой вкладке.

Предупреждение

Эти два параметра не являются обязательными и обычно не влияют на безопасность.
Если они не настроены, Golang автоматически выбирает их в зависимости от устройства.
Если вы не знакомы с этими параметрами, не настраивайте их.
Вы несете ответственность за любые проблемы, вызванные неправильной настройкой.

allowInsecure: true | false

Разрешить небезопасные соединения (только для клиентов).
Значение по умолчанию - false.

Если значение равно true, Xray не будет проверять действительность сертификата TLS, предоставленного удаленным хостом.

Предупреждение

Из соображений безопасности не рекомендуется устанавливать этот параметр в true в реальных сценариях, так как это может сделать вас уязвимыми для атак типа "человек посередине".

disableSystemRoot: true | false

Отключить использование корневых сертификатов, предоставляемых операционной системой.
Значение по умолчанию - false.

Если значение равно true, Xray будет использовать только сертификаты, указанные в certificates, для рукопожатия TLS.
Если значение равно false, Xray будет использовать только корневые сертификаты, предоставляемые операционной системой, для рукопожатия TLS.

enableSessionResumption: true | false

Если этот параметр установлен в false, расширение session_ticket не будет включено в ClientHello.
Обычно программы на Golang не используют это расширение в ClientHello, поэтому рекомендуется оставить значение по умолчанию.
Значение по умолчанию - false.

fingerprint: string

Этот параметр используется для настройки отпечатка TLS Client Hello.
Если значение пустое, эта функция отключена.
Если эта функция включена, Xray будет эмулировать отпечаток TLS с помощью библиотеки uTLS или генерировать его случайным образом.
Поддерживаются три способа настройки:

  1. Отпечатки TLS последних версий популярных браузеров, включая:
  • "chrome"
  • "firefox"
  • "safari"
  • "ios"
  • "android"
  • "edge"
  • "360"
  • "qq"
  1. Автоматическая генерация отпечатка при запуске Xray:
  • "random": случайный выбор из отпечатков последних версий браузеров.
  • "randomized": генерация полностью случайного уникального отпечатка (100% поддержка TLS 1.3 с использованием X25519).
  1. Использование имен переменных отпечатков uTLS, например, "HelloRandomizedNoALPN", "HelloChrome_106_Shuffle".
    Полный список см. в библиотеке uTLSОткрыть в новой вкладке.

Подсказка

Эта функция только эмулирует отпечаток TLS Client Hello, поведение и другие отпечатки такие же, как у Golang.
Если вам нужно более полно эмулировать отпечаток TLS и поведение браузера, используйте Browser Dialer.

pinnedPeerCertificateChainSha256: [string]

SHA256-хэш цепочки сертификатов удаленного сервера в стандартном формате кодировки.
Соединение TLS будет успешно установлено, только если хэш цепочки сертификатов сервера совпадает с одним из значений в этом списке.

Если соединение не удалось установить из-за этой настройки, будет показан хэш цепочки сертификатов удаленного сервера.

Предупреждение

Не рекомендуется использовать этот способ для получения хэша цепочки сертификатов, так как в этом случае у вас не будет возможности проверить, является ли сертификат, предоставленный сервером, подлинным, и поэтому вы не можете гарантировать, что полученный хэш сертификата будет ожидаемым.

Подсказка

Если вам нужно получить хэш сертификата, запустите команду xray tls certChainHash --cert <cert.pem> в командной строке, где <cert.pem> - это путь к файлу сертификата.

certificates: [ CertificateObject ]

Список сертификатов, каждый элемент которого представляет собой сертификат (рекомендуется использовать fullchain).

Подсказка

Если вам нужно получить оценку A/A+ в ssllibs или myssl, см. здесьОткрыть в новой вкладке.

masterKeyLog : string

Путь к файлу журнала (pre)-master-secret, который можно использовать для расшифровки TLS-соединений, отправляемых Xray, в таких программах, как Wireshark.
Пока не поддерживается совместное использование с utls.
Требуется Xray-Core v1.8.7.

RealityObject

{
  "show": false,
  "dest": "example.com:443",
  "xver": 0,
  "serverNames": ["example.com", "www.example.com"],
  "privateKey": "",
  "minClientVer": "",
  "maxClientVer": "",
  "maxTimeDiff": 0,
  "shortIds": ["", "0123456789abcdef"],
  "fingerprint": "chrome",
  "serverName": "",
  "publicKey": "",
  "shortId": "",
  "spiderX": ""
}

Подсказка

Дополнительную информацию см. в проекте REALITYОткрыть в новой вкладке.

show: true | false

Если значение равно true, выводить отладочную информацию.

Подсказка

Настройки для входящего подключения (сервер).

dest: string

Обязательный параметр, формат такой же, как у dest в fallbacks для VLESS dest.

Внимание

Для лучшей маскировки Xray напрямую перенаправляет трафик, не прошедший аутентификацию Reality (незаконные запросы Reality), на dest.
Если IP-адрес сайта dest является особенным (например, сайт использует CDN CloudFlare), то ваш сервер будет действовать как переадресатор портов для CloudFlare, что может привести к утечке трафика после сканирования.
Чтобы избежать этого, можно использовать Nginx или другие средства для фильтрации нежелательных SNI.

xver: number

Необязательный параметр, формат такой же, как у xver в fallbacks для VLESS xver.

serverNames: [string]

Обязательный параметр, список допустимых serverName для клиентов.
Пока не поддерживаются подстановочные знаки *.

Обычно это значение совпадает с dest.
Фактически допустимыми значениями являются любые SNI, принимаемые сервером (в зависимости от конфигурации dest).
В качестве ориентира можно использовать SANОткрыть в новой вкладке возвращаемого сертификата.

Может содержать пустое значение "", что означает прием подключений без SNI.

privateKey: string

Обязательный параметр, сгенерируйте его, выполнив команду ./xray x25519.

minClientVer: string

Необязательный параметр, минимальная версия Xray на клиенте, формат: x.y.z.

maxClientVer: string

Необязательный параметр, максимальная версия Xray на клиенте, формат: x.y.z.

maxTimeDiff: number

Необязательный параметр, максимально допустимая разница во времени в миллисекундах.

shortIds: [string]

Обязательный параметр, список допустимых shortId для клиентов, которые можно использовать для различения разных клиентов.

Состоит из символов от 0 до f, длина должна быть кратна 2, максимальная длина - 16.

Если список содержит пустое значение, shortId на клиенте может быть пустым.

Подсказка

Настройки для исходящего подключения (клиент).

serverName: string

Одно из значений serverNames на сервере.

Если serverNames на сервере содержит пустое значение, на клиенте можно использовать "serverName": "0.0.0.0", как и в TLS, для установления соединения без SNI.
В отличие от TLS, в REALITY для использования этой функции не нужно включать параметр allowInsecure.
При использовании этой функции убедитесь, что dest возвращает сертификат по умолчанию при приеме соединений без SNI.

fingerprint: string

Обязательный параметр, такой же, как в TLSObject.

shortId: string

Одно из значений shortIds на сервере.

Состоит из символов от 0 до f, длина должна быть кратна 2, максимальная длина - 16.

Если shordIDs на сервере содержит пустое значение, этот параметр на клиенте может быть пустым.

publicKey: string

Обязательный параметр, открытый ключ, соответствующий закрытому ключу сервера.
Сгенерируйте его с помощью команды ./xray x25519 -i "закрытый ключ сервера".

spiderX: string

Начальный путь и параметры для краулера, рекомендуется использовать разные значения для каждого клиента.

CertificateObject

{
  "ocspStapling": 3600,
  "oneTimeLoading": false,
  "usage": "encipherment",
  "certificateFile": "/path/to/certificate.crt",
  "keyFile": "/path/to/key.key",
  "certificate": [
    "--BEGIN CERTIFICATE--",
    "MIICwDCCAaigAwIBAgIRAO16JMdESAuHidFYJAR/7kAwDQYJKoZIhvcNAQELBQAw",
    "ADAeFw0xODA0MTAxMzU1MTdaFw0xODA0MTAxNTU1MTdaMAAwggEiMA0GCSqGSIb3",
    "DQEBAQUAA4IBDwAwggEKAoIBAQCs2PX0fFSCjOemmdm9UbOvcLctF94Ox4BpSfJ+",
    "3lJHwZbvnOFuo56WhQJWrclKoImp/c9veL1J4Bbtam3sW3APkZVEK9UxRQ57HQuw",
    "OzhV0FD20/0YELou85TwnkTw5l9GVCXT02NG+pGlYsFrxesUHpojdl8tIcn113M5",
    "pypgDPVmPeeORRf7nseMC6GhvXYM4txJPyenohwegl8DZ6OE5FkSVR5wFQtAhbON",
    "OAkIVVmw002K2J6pitPuJGOka9PxcCVWhko/W+JCGapcC7O74palwBUuXE1iH+Jp",
    "noPjGp4qE2ognW3WH/sgQ+rvo20eXb9Um1steaYY8xlxgBsXAgMBAAGjNTAzMA4G",
    "A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAA",
    "MA0GCSqGSIb3DQEBCwUAA4IBAQBUd9sGKYemzwPnxtw/vzkV8Q32NILEMlPVqeJU",
    "7UxVgIODBV6A1b3tOUoktuhmgSSaQxjhYbFAVTD+LUglMUCxNbj56luBRlLLQWo+",
    "9BUhC/ow393tLmqKcB59qNcwbZER6XT5POYwcaKM75QVqhCJVHJNb1zSEE7Co7iO",
    "6wIan3lFyjBfYlBEz5vyRWQNIwKfdh5cK1yAu13xGENwmtlSTHiwbjBLXfk+0A/8",
    "r/2s+sCYUkGZHhj8xY7bJ1zg0FRalP5LrqY+r6BckT1QPDIQKYy615j1LpOtwZe/",
    "d4q7MD/dkzRDsch7t2cIjM/PYeMuzh87admSyL6hdtK0Nm/Q",
    "--END CERTIFICATE--"
  ],
  "key": [
    "--BEGIN RSA PRIVATE KEY--",
    "MIIEowIBAAKCAQEArNj19HxUgoznppnZvVGzr3C3LRfeDseAaUnyft5SR8GW75zh",
    "bqOeloUCVq3JSqCJqf3Pb3i9SeAW7Wpt7FtwD5GVRCvVMUUOex0LsDs4VdBQ9tP9",
    "GBC6LvOU8J5E8OZfRlQl09NjRvqRpWLBa8XrFB6aI3ZfLSHJ9ddzOacqYAz1Zj3n",
    "jkUX+57HjAuhob12DOLcST8np6IcHoJfA2ejhORZElUecBULQIWzjTgJCFVZsNNN",
    "itieqYrT7iRjpGvT8XAlVoZKP1viQhmqXAuzu+KWpcAVLlxNYh/iaZ6D4xqeKhNq",
    "IJ1t1h/7IEPq76NtHl2/VJtbLXmmGPMZcYAbFwIDAQABAoIBAFCgG4phfGIxK9Uw",
    "qrp+o9xQLYGhQnmOYb27OpwnRCYojSlT+mvLcqwvevnHsr9WxyA+PkZ3AYS2PLue",
    "C4xW0pzQgdn8wENtPOX8lHkuBocw1rNsCwDwvIguIuliSjI8o3CAy+xVDFgNhWap",
    "/CMzfQYziB7GlnrM6hH838iiy0dlv4I/HKk+3/YlSYQEvnFokTf7HxbDDmznkJTM",
    "aPKZ5qbnV+4AcQfcLYJ8QE0ViJ8dVZ7RLwIf7+SG0b0bqloti4+oQXqGtiESUwEW",
    "/Wzi7oyCbFJoPsFWp1P5+wD7jAGpAd9lPIwPahdr1wl6VwIx9W0XYjoZn71AEaw4",
    "bK4xUXECgYEA3g2o9WqyrhYSax3pGEdvV2qN0VQhw7Xe+jyy98CELOO2DNbB9QNJ",
    "8cSSU/PjkxQlgbOJc8DEprdMldN5xI/srlsbQWCj72wXxXnVnh991bI2clwt7oYi",
    "pcGZwzCrJyFL+QaZmYzLxkxYl1tCiiuqLm+EkjxCWKTX/kKEFb6rtnMCgYEAx0WR",
    "L8Uue3lXxhXRdBS5QRTBNklkSxtU+2yyXRpvFa7Qam+GghJs5RKfJ9lTvjfM/PxG",
    "3vhuBliWQOKQbm1ZGLbgGBM505EOP7DikUmH/kzKxIeRo4l64mioKdDwK/4CZtS7",
    "az0Lq3eS6bq11qL4mEdE6Gn/Y+sqB83GHZYju80CgYABFm4KbbBcW+1RKv9WSBtK",
    "gVIagV/89moWLa/uuLmtApyEqZSfn5mAHqdc0+f8c2/Pl9KHh50u99zfKv8AsHfH",
    "TtjuVAvZg10GcZdTQ/I41ruficYL0gpfZ3haVWWxNl+J47di4iapXPxeGWtVA+u8",
    "eH1cvgDRMFWCgE7nUFzE8wKBgGndUomfZtdgGrp4ouLZk6W4ogD2MpsYNSixkXyW",
    "64cIbV7uSvZVVZbJMtaXxb6bpIKOgBQ6xTEH5SMpenPAEgJoPVts816rhHdfwK5Q",
    "8zetklegckYAZtFbqmM0xjOI6bu5rqwFLWr1xo33jF0wDYPQ8RHMJkruB1FIB8V2",
    "GxvNAoGBAM4g2z8NTPMqX+8IBGkGgqmcYuRQxd3cs7LOSEjF9hPy1it2ZFe/yUKq",
    "ePa2E8osffK5LBkFzhyQb0WrGC9ijM9E6rv10gyuNjlwXdFJcdqVamxwPUBtxRJR",
    "cYTY2HRkJXDdtT0Bkc3josE6UUDvwMpO0CfAETQPto1tjNEDhQhT",
    "--END RSA PRIVATE KEY--"
  ]
}

ocspStapling: number

Интервал обновления OCSP-стейплинга.
Совпадает с интервалом перезагрузки сертификата.
Единица измерения: секунды.
Значение по умолчанию - 3600 (1 час).

oneTimeLoading: true | false

Загрузить только один раз.
Если значение равно true, функция перезагрузки сертификата и OCSP-стейплинга отключаются.

Внимание

Если значение равно true, OCSP-стейплинг будет отключен.

usage: "encipherment" | "verify" | "issue"

Назначение сертификата.
Значение по умолчанию - "encipherment".

  • "encipherment": сертификат используется для аутентификации и шифрования TLS.
  • "verify": сертификат используется для проверки сертификата удаленного TLS-сервера.
    При использовании этого значения текущий сертификат должен быть сертификатом ЦС.
  • "issue": сертификат используется для выпуска других сертификатов.
    При использовании этого значения текущий сертификат должен быть сертификатом ЦС.

Совет 1

В Windows можно установить самозаверяющий сертификат ЦС в систему, чтобы проверять сертификаты удаленных TLS-серверов.

Совет 2

При получении нового запроса от клиента, если указанный serverName равен "xray.com", Xray сначала ищет в списке сертификатов сертификат, который можно использовать для "xray.com".
Если подходящий сертификат не найден, Xray использует любой сертификат с usage = "issue" для выпуска нового сертификата для "xray.com" со сроком действия один час.
Новый сертификат добавляется в список сертификатов для последующего использования.

Совет 3

Если указаны и certificateFile, и certificate, Xray использует certificateFile.
То же самое относится к keyFile и key.

Совет 4

Если usage равен "verify", keyFile и key могут быть пустыми.

Совет 5

Можно сгенерировать самозаверяющий сертификат ЦС с помощью команды xray tls cert.

Совет 6

Если у вас есть доменное имя, вы можете легко получить бесплатный сторонний сертификат с помощью таких инструментов, как acme.shОткрыть в новой вкладке.

certificateFile: string

Путь к файлу сертификата, например, сертификат, сгенерированный OpenSSL, с расширением .crt.

certificate: [ string ]

Массив строк, представляющий содержимое сертификата, как показано в примере.
certificate и certificateFile - взаимоисключающие параметры.

keyFile: string

Путь к файлу ключа, например, ключ, сгенерированный OpenSSL, с расширением .key.
В настоящее время не поддерживаются файлы ключей, защищенные паролем.

key: [ string ]

Массив строк, представляющий содержимое ключа, как показано в примере.
key и keyFile - взаимоисключающие параметры.

SockoptObject

{
  "mark": 0,
  "tcpMaxSeg": 1440,
  "tcpFastOpen": false,
  "tproxy": "off",
  "domainStrategy": "AsIs",
  "dialerProxy": "",
  "acceptProxyProtocol": false,
  "tcpKeepAliveInterval": 0,
  "tcpKeepAliveIdle": 300,
  "tcpUserTimeout": 10000,
  "tcpcongestion": "bbr",
  "interface": "wg0",
  "V6Only": false,
  "tcpWindowClamp": 600,
  "tcpMptcp": false,
  "tcpNoDelay": false,
  "customSockopt": []
}

mark: number

Целое число.
Если значение не равно нулю, исходящее соединение будет помечено этим значением SO_MARK.

  • Работает только в Linux.
  • Требуются права CAP_NET_ADMIN.

tcpMaxSeg: number

Устанавливает максимальный размер сегмента TCP (MSS).

tcpFastOpen: true | false | number

Включить TCP Fast OpenОткрыть в новой вкладке (TFO).

Если значение равно true или положительному целому числу, TFO включен.
Если значение равно false или отрицательному числу, TFO принудительно отключен.
Если этот параметр не указан или равен 0, используются настройки системы по умолчанию.
Может использоваться как для входящих, так и для исходящих подключений.

  • Доступно только в следующих (или более поздних) версиях операционных систем:

    • Linux 3.16: требуется настроить параметр ядра net.ipv4.tcp_fastopen.
      Этот параметр представляет собой битовую маску, где 0x1 означает, что TFO разрешен для клиентов, а 0x2 - для серверов.
      Значение по умолчанию - 0x1.
      Если вы хотите включить TFO на сервере, установите значение этого параметра ядра в 0x3.
    • Windows 10 (1607) (неправильная реализация).
    • Mac OS 10.11 / iOS 9 (требуется тестирование).
    • FreeBSD 10.3 (сервер) / 12.0 (клиент): необходимо установить параметры ядра net.inet.tcp.fastopen.server_enabled и net.inet.tcp.fastopen.client_enabled в 1.
      (Требуется тестирование.)
  • Для входящих подключений указанное здесь положительное целое число представляет собой максимальное количество ожидающих запросов на подключение TFOОткрыть в новой вкладке.
    Обратите внимание, что не все операционные системы поддерживают эту настройку:

    • Linux / FreeBSD: указанное здесь положительное целое число представляет собой максимальное значение, максимальное допустимое значение - 2147483647.
      Если значение равно true, используется значение 256.
      Обратите внимание, что в Linux параметр net.core.somaxconn ограничивает максимальное значение этого параметра.
      Если значение превышает somaxconn, увеличьте somaxconn.
    • Mac OS: если значение равно true или положительному целому числу, это означает только, что TFO включен.
      Максимальное значение нужно настроить отдельно с помощью параметра ядра net.inet.tcp.fastopen_backlog.
    • Windows: если значение равно true или положительному целому числу, это означает только, что TFO включен.
  • Для исходящих подключений значение true или положительное целое число означает только, что TFO включен, во всех операционных системах.

tproxy: "redirect" | "tproxy" | "off"

Включить прозрачное проксирование (только для Linux).

  • "redirect": использовать прозрачное проксирование в режиме Redirect.
    Поддерживаются все TCP-соединения на основе IPv4/6.
  • "tproxy": использовать прозрачное проксирование в режиме TProxy.
    Поддерживаются все TCP- и UDP-соединения на основе IPv4/6.
  • "off": отключить прозрачное проксирование.

Для прозрачного проксирования требуются права root или CAP\_NET\_ADMIN.

Предупреждение

Если в Dokodemo-door параметр followRedirect установлен в true, а параметр tproxy в Sockopt не указан, значение tproxy в Sockopt будет установлено в "redirect".

domainStrategy: "AsIs"
"UseIP" | "UseIPv6v4" | "UseIPv6" | "UseIPv4v6" | "UseIPv4"
"ForceIP" | "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4"

В предыдущих версиях, когда Xray пытался установить системное соединение с использованием доменного имени, разрешение доменного имени выполнялось системой и не контролировалось Xray.
Это приводило к таким проблемам, как невозможность разрешения доменных имен в нестандартных средах LinuxОткрыть в новой вкладке.
Чтобы решить эту проблему, в Xray 1.3.1 был добавлен параметр domainStrategy в Sockopt, аналогичный параметру в Freedom.

Значение по умолчанию - "AsIs".

При использовании доменного имени в качестве целевого адреса поведение Freedom зависит от значения этого параметра:

  • "AsIs": Xray будет использовать системный стек для установления соединения, приоритет и выбор IP-адреса зависят от настроек системы.
  • При указании других значений будет использоваться встроенный DNS-сервер Xray-core для разрешения доменного имени.
    Если DnsObject не настроен, будет использоваться системный DNS.
    Если для домена найдено несколько подходящих IP-адресов, ядро случайным образом выберет один из них в качестве целевого IP-адреса.
  • "IPv4" - попытаться использовать только IPv4 для подключения, "IPv4v6" - попытаться использовать IPv4 или IPv6, но для доменов с двумя стеками отдать предпочтение IPv4.
    (То же самое относится к IPv6v4, не будем повторяться.)
  • Если в настройках встроенного DNS указан параметр "queryStrategy", фактическое поведение будет определяться пересечением этих двух параметров, будут разрешены только IP-адреса тех типов, которые указаны в обоих параметрах.
    Например, если "queryStrategy": "UseIPv4" и "domainStrategy": "UseIP", это фактически эквивалентно "domainStrategy": "UseIPv4".
  • Если используется значение, начинающееся с "Use", и результат разрешения не соответствует требованиям (например, у домена есть только IPv4-адрес, но используется UseIPv6), Xray переключится на AsIs.
  • Если используется значение, начинающееся с "Force", и результат разрешения не соответствует требованиям, соединение не будет установлено.

Совет

При использовании режимов "UseIP" и "ForceIP" и указании sendThrough в настройках исходящего подключения Freedom автоматически определит необходимый тип IP-адреса (IPv4 или IPv6) на основе значения sendThrough.
Если вручную указан один тип IP-адреса (например, UseIPv4), но он не совпадает с локальным адресом, указанным в sendThrough, соединение не будет установлено.

Предупреждение

Неправильная настройка этой функции может привести к бесконечному циклу.

Коротко говоря: для подключения к серверу нужно дождаться результата DNS-запроса, а для завершения DNS-запроса нужно подключиться к серверу.

Тони: Что было раньше, курица или яйцо?

Подробное объяснение:

  1. Условия возникновения: прокси-сервер (proxy.com), встроенный DNS-сервер, не локальный режим.
  2. Перед установлением TCP-соединения с proxy.com Xray пытается разрешить proxy.com с помощью встроенного DNS-сервера.
  3. Встроенный DNS-сервер устанавливает соединение с dns.com и отправляет запрос для получения IP-адреса proxy.com.
  4. Неправильные правила маршрутизации приводят к тому, что proxy.com проксирует запрос, отправленный на шаге 3.
  5. Xray пытается установить еще одно TCP-соединение с proxy.com.
  6. Перед установлением соединения Xray пытается разрешить proxy.com с помощью встроенного DNS-сервера.
  7. Встроенный DNS-сервер повторно использует соединение, установленное на шаге 3, и отправляет запрос.
  8. Возникает проблема: установление соединения на шаге 3 ожидает результата запроса на шаге 7, а завершение запроса на шаге 7 ожидает полного установления соединения на шаге 3.
  9. Игра окончена!

Решения:

  • Изменить правила разделения трафика для встроенного DNS-сервера.
  • Использовать Hosts.
  • Если вы все еще не знаете, как решить эту проблему, не используйте эту функцию.

Поэтому не рекомендуется неопытным пользователям использовать эту функцию без необходимости.

dialerProxy: ""

Тег исходящего прокси.
Если значение не пустое, исходящие соединения будут устанавливаться через указанное исходящее подключение.
Этот параметр можно использовать для цепочечной пересылки с поддержкой транспорта.

Предупреждение

Этот параметр несовместим с ProxySettingsObject.Tag.

acceptProxyProtocol: true | false

Только для входящих подключений.
Указывает, следует ли принимать PROXY protocol.

PROXY protocolОткрыть в новой вкладке используется для передачи реального IP-адреса и порта источника запроса.
Если вы не знакомы с ним, пропустите этот параметр.

Распространенные обратные прокси (например, HAProxy, Nginx) можно настроить на отправку PROXY protocol, VLESS fallbacks xver также может отправлять его.

Если значение равно true, то после установления TCP-соединения на самом нижнем уровне отправитель запроса должен сначала отправить PROXY protocol v1 или v2, иначе соединение будет разорвано.

tcpKeepAliveInterval: number

Интервал между отправкой пакетов TCP keep-alive в секундах. Работает только в Linux.

Это keep-alive-пакеты, отправляемые при ненормальном состоянии соединения (не получен ACK).

Если этот параметр не указан или равен 0, используется значение по умолчанию Golang.

Подсказка

Если указать отрицательное значение, например -1, TCP keep-alive будет отключен.

tcpKeepAliveIdle: number

Порог простоя TCP-соединения в секундах.
Keep-alive-пакеты будут отправляться, когда время простоя TCP-соединения достигнет этого порога.

Это keep-alive-пакеты, отправляемые при нормальном состоянии соединения.

Если этот параметр не указан или равен 0, используется значение по умолчанию Golang.

Подсказка

Если указать отрицательное значение, например -1, TCP keep-alive будет отключен.

tcpUserTimeout: number

Измеряется в миллисекундах.
Подробнее: https://github.com/grpc/proposal/blob/master/A18-tcp-user-timeout.md

tcpcongestion: ""

Алгоритм управления перегрузкой TCP.
Поддерживается только в Linux.
Если этот параметр не указан, используется значение по умолчанию системы.

Распространенные алгоритмы

  • bbr (рекомендуется)
  • cubic
  • reno

Подсказка

Выполните команду sysctl net.ipv4.tcp_congestion_control, чтобы узнать значение по умолчанию системы.

interface: ""

Имя сетевого интерфейса, к которому нужно привязаться.
Поддерживается в Linux / iOS / Mac OS / Windows.
Для iOS / Mac OS требуется Xray-core v1.8.6 или более поздней версии.
Для Windows требуется Xray-core v1.8.7 или более поздней версии.

V6Only: true | false

Если значение равно true, адрес :: будет принимать только IPv6-соединения.
Поддерживается только в Linux.

tcpWindowClamp: number

Привязать размер рекламируемого окна к этому значению.
Ядро выберет максимальное значение между этим значением и SOCK_MIN_RCVBUF/2.

tcpMptcp: true | false

Новый параметр в Xray-core v1.8.6.
Значение по умолчанию - false.
Если значение равно true, включить Multipath TCPОткрыть в новой вкладке.
Этот параметр нужно включить как на сервере, так и на клиенте.
В настоящее время поддерживается только в Linux, требуется ядро Linux версии 5.6 или выше.

tcpNoDelay: true | false

Значение по умолчанию - false.
Рекомендуется включать вместе с "tcpMptcp": true.

customSockopt: []

Массив, позволяющий опытным пользователям указать любые необходимые параметры sockopt.
Теоретически все настройки, связанные с подключением, описанные выше, можно настроить с помощью этого параметра.
Вы также можете настроить другие параметры, доступные в Linux, но не добавленные в ядро, например, следующий пример эквивалентен "tcpcongestion": "bbr" в ядре.

Перед использованием убедитесь, что вы понимаете принципы программирования сокетов в Linux.

"customSockopt": [
  {
    "type": "str",
    "level":"6",
    "opt": "13",
    "value": "bbr"
  }
]

type: ""

Обязательный параметр, тип настройки, в настоящее время доступны int и str.

level: ""

Необязательный параметр, уровень протокола, используемый для указания области действия.
Значение по умолчанию - 6 (TCP).

opt: ""

Название настраиваемого параметра в десятичном формате (в этом примере используется значение TCP_CONGESTION, которое равно 0xd в шестнадцатеричном формате и 13 в десятичном формате).

value: ""

Значение, которое нужно установить.
В этом примере используется значение bbr.

Если type равен int, значение должно быть десятичным числом.