Транспорт
Транспорт (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"
Включить шифрование транспортного уровня.
Доступные значения:
"none"
- без шифрования (значение по умолчанию)."tls"
- использовать TLS."reality"
- использовать 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 или генерировать его случайным образом.
Поддерживаются три способа настройки:
- Отпечатки TLS последних версий популярных браузеров, включая:
"chrome"
"firefox"
"safari"
"ios"
"android"
"edge"
"360"
"qq"
- Автоматическая генерация отпечатка при запуске Xray:
"random"
: случайный выбор из отпечатков последних версий браузеров."randomized"
: генерация полностью случайного уникального отпечатка (100% поддержка TLS 1.3 с использованием X25519).
- Использование имен переменных отпечатков 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
.
(Требуется тестирование.)
- Linux 3.16: требуется настроить параметр ядра
Для входящих подключений указанное здесь положительное целое число представляет собой максимальное количество ожидающих запросов на подключение TFO.
Обратите внимание, что не все операционные системы поддерживают эту настройку:- Linux / FreeBSD: указанное здесь положительное целое число представляет собой максимальное значение, максимальное допустимое значение - 2147483647.
Если значение равноtrue
, используется значение256
.
Обратите внимание, что в Linux параметрnet.core.somaxconn
ограничивает максимальное значение этого параметра.
Если значение превышаетsomaxconn
, увеличьтеsomaxconn
. - Mac OS: если значение равно
true
или положительному целому числу, это означает только, что TFO включен.
Максимальное значение нужно настроить отдельно с помощью параметра ядраnet.inet.tcp.fastopen_backlog
. - Windows: если значение равно
true
или положительному целому числу, это означает только, что TFO включен.
- Linux / FreeBSD: указанное здесь положительное целое число представляет собой максимальное значение, максимальное допустимое значение - 2147483647.
Для исходящих подключений значение
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-запроса нужно подключиться к серверу.
Тони: Что было раньше, курица или яйцо?
Подробное объяснение:
- Условия возникновения: прокси-сервер (proxy.com), встроенный DNS-сервер, не локальный режим.
- Перед установлением TCP-соединения с proxy.com Xray пытается разрешить proxy.com с помощью встроенного DNS-сервера.
- Встроенный DNS-сервер устанавливает соединение с dns.com и отправляет запрос для получения IP-адреса proxy.com.
- Неправильные правила маршрутизации приводят к тому, что proxy.com проксирует запрос, отправленный на шаге 3.
- Xray пытается установить еще одно TCP-соединение с proxy.com.
- Перед установлением соединения Xray пытается разрешить proxy.com с помощью встроенного DNS-сервера.
- Встроенный DNS-сервер повторно использует соединение, установленное на шаге 3, и отправляет запрос.
- Возникает проблема: установление соединения на шаге 3 ожидает результата запроса на шаге 7, а завершение запроса на шаге 7 ожидает полного установления соединения на шаге 3.
- Игра окончена!
Решения:
- Изменить правила разделения трафика для встроенного 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
, значение должно быть десятичным числом.