多个 TUN 设备可以共存吗

169 天前
 2006bt

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

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

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

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

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

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

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

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

© 2021 V2EX