V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
AceDogs
V2EX  ›  Linux

请教一个关于 sing-box Tun 模式路由的问题

  •  
  •   AceDogs · 241 天前 · 2575 次点击
    这是一个创建于 241 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在 sing-box 中启用 tun 后,路由表如下:

    default via 192.168.2.1 dev eth0 proto dhcp src 192.168.2.17 metric 202
    169.254.0.0/16 dev vethba29967 scope link src 169.254.195.244 metric 210
    169.254.0.0/16 dev veth49bc574 scope link src 169.254.56.104 metric 212
    169.254.0.0/16 dev vethff3d6f6 scope link src 169.254.200.208 metric 214
    169.254.0.0/16 dev vethbe3a716 scope link src 169.254.13.45 metric 216
    172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
    172.19.0.0/30 dev tun0 proto kernel scope link src 172.19.0.1
    172.24.0.0/16 dev br-4bea34453033 proto kernel scope link src 172.24.0.1
    172.25.0.0/16 dev br-7b558a8ec2e7 proto kernel scope link src 172.25.0.1
    172.26.0.0/16 dev br-f645b1779cd6 proto kernel scope link src 172.26.0.1
    172.27.0.0/16 dev br-a887ffeba8e3 proto kernel scope link src 172.27.0.1
    192.168.2.0/24 dev eth0 proto dhcp scope link src 192.168.2.17 metric 202
    

    我怎么都看不懂,为什么 tun0 网卡可以捕获所有的流量,看路由表的意思不是应该只能把目标为 172.19.0.0/30 的数据捕获吗? 操作系统 Ubuntu 22

    14 条回复    2024-08-15 17:19:04 +08:00
    chinni
        1
    chinni  
       241 天前
    了解下 ip rule 和 ip route list table <table_id>
    AceDogs
        2
    AceDogs  
    OP
       241 天前
    iptables 信息如下, 看起来除了 docker 的也没见和这个 tun 有关的。
    ```
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination

    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    3008 1043K DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
    3008 1043K DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
    0 0 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0
    374 346K ACCEPT all -- * br-f645b1779cd6 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
    0 0 DOCKER all -- * br-f645b1779cd6 0.0.0.0/0 0.0.0.0/0
    292 25545 ACCEPT all -- br-f645b1779cd6 !br-f645b1779cd6 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all -- br-f645b1779cd6 br-f645b1779cd6 0.0.0.0/0 0.0.0.0/0
    825 396K ACCEPT all -- * br-a887ffeba8e3 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
    0 0 DOCKER all -- * br-a887ffeba8e3 0.0.0.0/0 0.0.0.0/0
    1485 265K ACCEPT all -- br-a887ffeba8e3 !br-a887ffeba8e3 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all -- br-a887ffeba8e3 br-a887ffeba8e3 0.0.0.0/0 0.0.0.0/0
    17 8109 ACCEPT all -- * br-7b558a8ec2e7 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
    0 0 DOCKER all -- * br-7b558a8ec2e7 0.0.0.0/0 0.0.0.0/0
    15 2313 ACCEPT all -- br-7b558a8ec2e7 !br-7b558a8ec2e7 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all -- br-7b558a8ec2e7 br-7b558a8ec2e7 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all -- * br-4bea34453033 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
    0 0 DOCKER all -- * br-4bea34453033 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all -- br-4bea34453033 !br-4bea34453033 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all -- br-4bea34453033 br-4bea34453033 0.0.0.0/0 0.0.0.0/0

    Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination

    Chain DOCKER (5 references)
    pkts bytes target prot opt in out source destination
    0 0 ACCEPT tcp -- !br-a887ffeba8e3 br-a887ffeba8e3 0.0.0.0/0 172.27.0.2 tcp dpt:9091

    Chain DOCKER-ISOLATION-STAGE-1 (1 references)
    pkts bytes target prot opt in out source destination
    0 0 DOCKER-ISOLATION-STAGE-2 all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
    292 25545 DOCKER-ISOLATION-STAGE-2 all -- br-f645b1779cd6 !br-f645b1779cd6 0.0.0.0/0 0.0.0.0/0
    1485 265K DOCKER-ISOLATION-STAGE-2 all -- br-a887ffeba8e3 !br-a887ffeba8e3 0.0.0.0/0 0.0.0.0/0
    15 2313 DOCKER-ISOLATION-STAGE-2 all -- br-7b558a8ec2e7 !br-7b558a8ec2e7 0.0.0.0/0 0.0.0.0/0
    0 0 DOCKER-ISOLATION-STAGE-2 all -- br-4bea34453033 !br-4bea34453033 0.0.0.0/0 0.0.0.0/0
    3008 1043K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

    Chain DOCKER-ISOLATION-STAGE-2 (5 references)
    pkts bytes target prot opt in out source destination
    0 0 DROP all -- * docker0 0.0.0.0/0 0.0.0.0/0
    0 0 DROP all -- * br-f645b1779cd6 0.0.0.0/0 0.0.0.0/0
    0 0 DROP all -- * br-a887ffeba8e3 0.0.0.0/0 0.0.0.0/0
    0 0 DROP all -- * br-7b558a8ec2e7 0.0.0.0/0 0.0.0.0/0
    0 0 DROP all -- * br-4bea34453033 0.0.0.0/0 0.0.0.0/0
    1792 293K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

    Chain DOCKER-USER (1 references)
    pkts bytes target prot opt in out source destination
    3008 1043K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
    ```
    yyzh
        3
    yyzh  
       241 天前
    DNS 给的 fake-ip 啊
    AceDogs
        4
    AceDogs  
    OP
       241 天前
    @yyzh 按照我的理解 fake-ip 要能收到 dns 请求才能生效,也就是先要能拦截 dns 请求。 我即使关闭 fake-ip 功能,这个 tun 依然可以获取所有网络流量。
    seers
        5
    seers  
       241 天前
    你的网关是 tun 设备,网关工作在三层
    yyzh
        6
    yyzh  
       241 天前
    @AceDogs 你 ip route show table all 和 ip rule list 都跑一下看看?
    SenLief
        7
    SenLief  
       241 天前
    你可以关闭 fake-ip 后查看路由表的配置就知道了。他所有的流量都走了 tun0 那个路由的。
    AceDogs
        8
    AceDogs  
    OP
       241 天前
    @yyzh 非常感谢,ip route show table all 确实包含了预期的路由表。我去了解一下相关知识。

    pi@miniserver:~ $ ip route show table all
    0.0.0.0/1 dev tun0 table 2022
    128.0.0.0/1 dev tun0 table 2022
    default via 192.168.2.1 dev eth0 proto dhcp src 192.168.2.17 metric 202
    yyzh
        9
    yyzh  
       241 天前   ❤️ 1
    AceDogs
        10
    AceDogs  
    OP
       241 天前
    @seers 找到原因了,sing-box 配置的路由表不在默认的 main 路由表, 在一个自定义的路由表中,我反复在查看 main 路由表,导致看不到。
    AceDogs
        11
    AceDogs  
    OP
       241 天前
    @yyzh 非常感谢,我明白了。
    hefish
        12
    hefish  
       240 天前
    得把 dns 指过去把,让 sing-box 把 dns 的解析结果都指到 tun 所在的段,然后这所有流量不就从 tun 走了嘛。。
    garryforreg420
        13
    garryforreg420  
       205 天前
    需要用 "inet4_route_address" 参数自定义路由表,否则默认就是所有流量都进去
    sikeer
        14
    sikeer  
       109 天前
    关于这个问题,请教一下,如果 tun 通过路由捕获了几乎所有流量,还用设置系统代理吗?
    "inbounds": [
    {
    "type": "tun",
    "inet4_address": "172.19.0.1/30",
    "mtu": 1500,
    "auto_route": true,
    // "strict_route": true,
    "sniff": true,
    "inet4_route_exclude_address": ["239.255.255.250/32"],
    "sniff_override_destination": false,
    "endpoint_independent_nat": false,
    "stack": "system",
    "platform": {
    "http_proxy": {
    "enabled": true,
    "bypass_domain": [],
    "server": "127.0.0.1",
    "server_port": 7890
    }
    }
    },

    {
    "type": "mixed",
    "listen_port": 7890,
    "sniff": true,
    "set_system_proxy": true
    },


    也就是上面的设置中,set_system_proxy 还需要吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:05 · PVG 05:05 · LAX 13:05 · JFK 16:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.