sing-box配置(客户端用tun模式入站)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"interface_name": "",
"address": [
"172.18.0.1/30",
"fdfe:dcba:9876::1/126"
],
"mtu": 9000,
"auto_route": true,
"strict_route": true,
"endpoint_independent_nat": false,
"stack": "mixed"
}
],

设置一个名为 “tun-in” 的 TUN (隧道) 入站网络接口。解释一下每个参数的含义:

  • "type": "tun": 指定了入站接口的类型是 TUN 隧道接口。TUN 接口工作在 OSI 模型的第三层(网络层),处理 IP 数据包。它创建了一个虚拟的网络接口,可以用来路由网络流量。
  • "tag": "tun-in": 这是这个入站配置的唯一标识符或名称。您可以在配置的其他部分使用这个标签来引用这个入站。
  • "interface_name": "": 这个字段目前是空的,意味着系统会自动为这个 TUN 接口分配一个名称(例如,tun0tun1 等)。如果您有特定的偏好,可以在这里指定一个名称。
  • "address": ["172.18.0.1/30", "fdfe:dcba:9876::1/126"]: 定义了分配给这个 TUN 接口的 IP 地址。
    • "172.18.0.1/30" 是一个 IPv4 地址,带有 /30 的子网掩码。这意味着这个子网中总共有 4 个可能的 IP 地址,其中 172.18.0.1 被分配给了这个 TUN 接口。/30 表明网络前缀占用了 30 位,剩下 2 位用于主机地址(但在点对点的 TUN 连接中,通常只使用两个地址,分别分配给隧道的两端)。
    • "fdfe:dcba:9876::1/126" 是一个 IPv6 地址,带有 /126 的前缀。这定义了一个非常小的 IPv6 子网。
  • "mtu": 9000: 设置了该 TUN 接口的最大传输单元 (MTU) 为 9000 字节。MTU 是指在单个网络层事务中可以传输的最大协议数据单元 (PDU) 的大小。较大的 MTU 可能提高吞吐量,但需要路径中的所有设备都支持。
  • "auto_route": true: 当设置为 true 时,系统将自动配置路由规则,将目标地址是隧道另一端的流量通过这个 TUN 接口进行转发。
  • "strict_route": true: 当启用此选项时,会更严格地执行与此 TUN 接口相关的路由规则。它可以防止流量意外地通过其他路由传输。
  • "endpoint_independent_nat": false: 这个设置控制了从此 TUN 接口发起的连接的网络地址转换 (NAT) 行为。当设置为 false 时,NAT 映射通常取决于源 IP 地址和端口以及目标 IP 地址和端口。
  • "stack": "mixed": 表明这个 TUN 接口将同时支持 IPv4 和 IPv6 流量。

总而言之,这段配置创建了一个可以处理 IPv4 和 IPv6 流量的虚拟网络接口,为其分配了特定的 IP 地址,设置了一个较大的 MTU,并配置了通过该隧道传输的流量的自动和严格路由。endpoint_independent_nat 设置为 false 表明,如果后续涉及到 NAT,则会采用更传统的 NAT 行为。

Tun模式需要开启ip转发

1
echo 1 > /proc/sys/net/ipv4/ip_forward

终止占用端口的进程

如果sing-box启动失败,提示有端口被占用,查看被占用端口的进程号,kill进程号(pid)

1
2
3
4
5
6
7
ss -tulnp | grep <端口号>

#例如,查看9090端口被哪个进程占用
ss -tulnp | grep 9090

#终止进程
kill 进程号(pid)

删除旧的虚拟网卡

1
2
3
4
5
6
7
#列出tun网卡
ip a | grep tun

sudo ip link del <tun_interface_name>

#例如删除名叫tun0的虚拟网卡
ip link del tun0