TUN
Создает TUN-интерфейс. Трафик, направленный в этот интерфейс, обрабатывается Xray. В настоящее время поддерживаются Windows, Linux, macOS и FreeBSD.
На Android TUN FD должен передаваться внешним приложением, которое использует VPN Service для перенаправления трафика. Он не может запускаться самостоятельно и служит лишь способом для приложения передавать трафик в Xray.
InboundConfigurationObject
InboundConfigurationObject соответствует элементу settings в InboundObject.
{
"inbounds": [
{
// ...
"protocol": "tun",
"settings": {
"name": "xray0",
"mtu": 1500,
"gateway": ["10.0.0.1/16", "fc00::1/64"],
"dns": ["1.1.1.1", "8.8.8.8"],
"userLevel": 0,
"autoSystemRoutingTable": ["0.0.0.0/0", "::/0"],
"autoOutboundsInterface": "auto"
}
}
]
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
name: string
Имя создаваемого TUN-интерфейса. По умолчанию "xray0".
mtu: number
Значение MTU интерфейса. По умолчанию 1500.
gateway: [string]
Список префиксов адресов, назначаемых TUN-интерфейсу, обычно отдельно для IPv4 и IPv6, например "10.0.0.1/16" и "fc00::1/64".
dns: [string]
Список DNS-серверов, назначаемых интерфейсу TUN, например "1.1.1.1" и "8.8.8.8".
userLevel: number
Уровень пользователя. Для соединения будет использоваться локальная политика, соответствующая этому уровню пользователя.
Значение userLevel соответствует значению level в policy. Если не указано, по умолчанию равно 0.
autoSystemRoutingTable: [string]
Список целевых префиксов, которые Xray автоматически добавляет в системную таблицу маршрутизации, чтобы трафик направлялся в этот TUN-интерфейс. Каждый элемент задается в формате CIDR. Например, "0.0.0.0/0" означает весь IPv4-трафик, а "::/0" означает весь IPv6-трафик.
В настоящее время поддерживается только на Windows. На других системах таблицу маршрутизации необходимо настраивать вручную.
autoOutboundsInterface: string
Автоматически привязывает исходящие соединения Xray к физическому сетевому интерфейсу, чтобы трафик, создаваемый самим Xray, не отправлялся обратно в TUN и не образовывал петлю.
Значение по умолчанию — null, то есть параметр не задан. Можно указать конкретное имя интерфейса или "auto", чтобы Xray выбрал его автоматически. Если задан autoSystemRoutingTable, но это поле явно не указано, Xray будет обрабатывать его как "auto".
Советы по использованию
Если autoSystemRoutingTable не настроен, маршруты для направления трафика в созданный TUN-интерфейс по-прежнему нужно добавлять вручную, иначе он останется просто сетевым интерфейсом.
Если настроены gateway, dns, autoSystemRoutingTable и autoOutboundsInterface, Xray может автоматически выполнить часть системной настройки на поддерживаемых платформах. Если на вашей платформе такие автоматические настройки еще не реализованы, либо вам требуется более тонкая настройка маршрутизации, системную часть все равно придется настраивать вручную.
Если вы хотите проксировать только один или несколько процессов, будет очень полезна маршрутизация по имени процесса в системе маршрутизации Xray.
WARNING
Остерегайтесь возможных петель трафика (traffic loops). После настройки маршрутизации запросы, отправляемые Xray, могут быть направлены обратно в Xray и образовать петлю. В первую очередь используйте autoOutboundsInterface, чтобы избежать этой проблемы. Если нужен ручной контроль, можно использовать interface в sockopt для привязки к реальному физическому сетевому интерфейсу. Команды ipconfig (Windows) и ip a (Linux) помогут найти имя нужного вам интерфейса. Или используйте sendThrough для исходящих соединений. Он доступен непосредственно в OutboundObject и не имеет такой глубокой вложенности, как sockOpt.interface. Здесь необходимо использовать IP-адрес сетевой карты, например 192.168.1.2 (как видите, его недостатком является отсутствие автоматической поддержки dual-stack, пожалуйста, выбирайте в соответствии с фактически используемым IP для исходящего трафика).