mirror of
https://github.com/SagerNet/sing-box.git
synced 2025-09-10 11:18:50 +08:00
66 lines
1.8 KiB
Markdown
66 lines
1.8 KiB
Markdown
# :material-expansion-card: TUN
|
||
|
||
## :material-text-box: Definition
|
||
|
||
Refers to TUNnel, a virtual network device supported by the kernel.
|
||
It’s also used in sing-box to denote the extensive functionality surrounding TUN inbound:
|
||
including traffic assembly, automatic routing, and network and default interface monitoring.
|
||
|
||
The following flow chart describes the minimal TUN-based transparent proxy process in sing-box:
|
||
|
||
``` mermaid
|
||
flowchart LR
|
||
subgraph inbound [Inbound]
|
||
direction TB
|
||
packet[IP Packet]
|
||
packet --> windows[Windows / macOS]
|
||
packet --> linux[Linux]
|
||
tun[TUN interface]
|
||
windows -. route .-> tun
|
||
linux -. iproute2 route/rule .-> tun
|
||
tun --> gvisor[gVisor TUN stack]
|
||
tun --> system[system TUN stack]
|
||
assemble([L3 to L4 assemble])
|
||
gvisor --> assemble
|
||
system --> assemble
|
||
assemble --> conn[TCP and UDP connections]
|
||
conn --> router[sing-box Router]
|
||
end
|
||
|
||
subgraph outbound [Outbound]
|
||
direction TB
|
||
direct[Direct outbound]
|
||
proxy[Proxy outbounds]
|
||
direct --> adi([auto detect interface])
|
||
proxy --> adi
|
||
adi --> default[Default network interface in the system]
|
||
default --> destination[Destination server]
|
||
default --> proxy_server[Proxy server]
|
||
proxy_server --> destination
|
||
end
|
||
|
||
inbound --> outbound
|
||
```
|
||
|
||
## :material-help-box: How to
|
||
|
||
A basic TUN-based transparent proxy configuration file includes: an TUN inbound, `route.auto_detect_interface`, like:
|
||
|
||
```json
|
||
{
|
||
"inbounds": [
|
||
{
|
||
"type": "tun",
|
||
"inet4_address": "172.19.0.1/30",
|
||
"inet6_address": "fdfe:dcba:9876::1/126",
|
||
"auto_route": true,
|
||
"strict_route": true
|
||
}
|
||
],
|
||
"route": {
|
||
"auto_detect_interface": true
|
||
}
|
||
}
|
||
```
|
||
|
||
TODO: finish this wiki |