多个 TUN 设备可以共存吗

3 天前
2006bt  2006bt

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

1737 次点击
所在节点   Linux  Linux
7 条回复
wkj89
wkj89
3 天前
tun 当然可以共存 不能共存是因为你用的 client 写的路由表冲突罢了 你可以手动解决这个问题
sivacohan
sivacohan
3 天前
1. tun 设备可以共存,因为这是设备,就像可以插两个 u 盘一样。
2. 你说的问题是 iptables 或者 路由表的问题。

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

如果是新手,建议求助对网络配置比较熟悉的同学。
mlyy
mlyy
3 天前
ip netns
adoal
adoal
3 天前
zju........
Mythologyli
Mythologyli
2 天前
我是作者,可以去发个 issue
https://github.com/Mythologyli/zju-connect/issues
PTLin
PTLin
2 天前
这种代理隧道的原理是。
一个 tun 设备,打开这个设备,对这个 fd 读会接受到发送到这个网卡的 ip 包,向这个 fd 写会把 ip 包放回网络栈(像是接受到一个数据包一样)。
所以透明代理的大体逻辑就是,首先修改路由表,让所有 ip 包默认走 tun 程序的逻辑,tun 程序接受到数据包,将数据包发送到代理服务器(这个数据包会走一些 bypass 的逻辑,避免循环),然后从代理服务器接受到数据,构造数据包放回协议栈。
明白了这点就可以知道,想让多 tun 程序协同工作首先你需要修改路由表,你可以自定义哪个地址的走哪个 tun 程序。
smallsneaker
smallsneaker
2 天前
宝藏帖子,楼上的两位兄弟解释的真清楚。感谢。
@PTLin
@sivacohan

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1119775

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX