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

多个 TUN 设备可以共存吗

  •  
  •   2006bt · 1 天前 · 1666 次点击

    新手小白😭 这段时间在使用zju-connectclash-verge,两者都支持TUN模式;但是实测下两者的 TUN 模式无法共存,只能打开一个。请问各位大佬,这是TUN Device本身原理的问题,还是软件编写的问题?有办法能让两者的TUN模式共存吗?

    7 条回复    2025-03-21 13:52:31 +08:00
    wkj89
        1
    wkj89  
       1 天前   ❤️ 1
    tun 当然可以共存 不能共存是因为你用的 client 写的路由表冲突罢了 你可以手动解决这个问题
    sivacohan
        2
    sivacohan  
       1 天前   ❤️ 1
    1. tun 设备可以共存,因为这是设备,就像可以插两个 u 盘一样。
    2. 你说的问题是 iptables 或者 路由表的问题。

    比如你物理口是 eth0, zju 是 tun0, clash 是 tun1 。没开服务的时候,直接 app->eth0 就可以了。
    但是开启 tun 之后,变成了 eth0 ->(1) tun0 -> eth0, 1 这个步骤会拦截所有发往 eth0 的流量。然后应用程序再进行规则匹配,修改数据报之后再发出去。
    当你开始两个 tun 的时候,1 这个步骤就会发生冲突和混乱,这时候靠程序默认的配置是解决不了的。需要手动配置。

    如果是新手,建议求助对网络配置比较熟悉的同学。
    mlyy
        3
    mlyy  
       1 天前 via iPhone
    ip netns
    adoal
        4
    adoal  
       1 天前
    zju........
    Mythologyli
        5
    Mythologyli  
       1 天前   ❤️ 1
    我是作者,可以去发个 issue
    https://github.com/Mythologyli/zju-connect/issues
    PTLin
        6
    PTLin  
       1 天前   ❤️ 2
    这种代理隧道的原理是。
    一个 tun 设备,打开这个设备,对这个 fd 读会接受到发送到这个网卡的 ip 包,向这个 fd 写会把 ip 包放回网络栈(像是接受到一个数据包一样)。
    所以透明代理的大体逻辑就是,首先修改路由表,让所有 ip 包默认走 tun 程序的逻辑,tun 程序接受到数据包,将数据包发送到代理服务器(这个数据包会走一些 bypass 的逻辑,避免循环),然后从代理服务器接受到数据,构造数据包放回协议栈。
    明白了这点就可以知道,想让多 tun 程序协同工作首先你需要修改路由表,你可以自定义哪个地址的走哪个 tun 程序。
    smallsneaker
        7
    smallsneaker  
       13 小时 13 分钟前
    宝藏帖子,楼上的两位兄弟解释的真清楚。感谢。
    @PTLin
    @sivacohan
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:05 · PVG 03:05 · LAX 12:05 · JFK 15:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.