标题: tinc安卓客户端
时间: 2020-03-04发布,2021-02-04修改
更多细节见评论区。
tinc(https://www.tinc-vpn.org/)是一个网状网络VPN,主要用于跨地区构建私有内网,具有如下特点:
0.0.0.0/0
路由来允许其他节点通过该节点访问互联网。0.0.0.0/0#1
,0.0.0.0/0#2
等)。这样互联网流量会优先走#1
,如果#1
节点失效,则自动转换到#2
。tinc具有官方的Linux/Windows客户端,现在又找到了一个半官方的安卓客户端(https://tincapp.pacien.org/ 网址在官方网站列出,但不是官方开发者开发),挺好用的,特此共享:
注意:
Mode=switch
,否则就连不上安卓。但是路由器模式其实比交换机模式更好用,而且多出口容灾只有路由器模式可以实现。hosts
中的其他节点,tinc.conf
中的ConnectTo
也是可选的。0.0.0.0/0
转发到tinc的网卡接口即可(需要先为对等节点添加专属路由,否则到对等节点的流量也被路由到虚拟网卡的话,你就彻底断网了)。对于Linux,类似于ip route add default dev hu60net
。对于Windows,就是route add 0.0.0.0/0 10.8.4.1
(其中10.8.4.1
是tinc接口本身的IP,接口不需要配置默认网关,也无法配置默认网关,因为其他节点位于其他子网。备注:此处不考虑交换机模式,所有说明都只针对默认的路由器模式。)hosts
配置文件中的路由等规则只要修改当前节点的就可以了,不需要把修改后的配置文件同步到其他节点。当前节点重启后,其他节点会通过网络自动获取当前节点的路由更新。14楼和15楼有参考配置文件和网络中继说明。
截图:
『回复列表(23|隐藏机器人聊天)』
咋一看以为是前几年的tiny全局免流客户端呢
菩提本无树,明镜亦非台。
本来无一物,何处惹尘埃!
ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
華為P30 (Pro版)-(金色)
有什么用,对GFW的穿透力如何
菩提本无树,明镜亦非台。
本来无一物,何处惹尘埃!
ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
華為P30 (Pro版)-(金色)
那么,这个内网是否可以搭建Trojan代理呢,或者说是刷入OpenWRT固件中
@老虎会游泳
菩提本无树,明镜亦非台。
本来无一物,何处惹尘埃!
ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
華為P30 (Pro版)-(金色)
tinc参考配置文件-Linux-Win-Android.zip(15.42 KB)
配置文件夹不能直接使用,私钥内容已删除,需要重新生成。可以参考 https://www.bilibili.com/read/cv3364699
注意,因为安卓不支持交换机模式,所以任何其他节点都不能使用Mode=switch
交换机模式,否则安卓无法与这些节点互通。
建议Linux和Windows使用稳定版(1.0.36),不要使用1.1pre17。pre不太稳定。此外,pre版也不能按照教程中的方法生成私钥。
从软件源安装的tinc(比如apt install tinc
)通常是稳定版。
服务器使用稳定版,安卓需要添加ExperimentalProtocol = no
,否则可能连不上。
用稳定版生成的私钥不包含ed25519_key.priv
和Ed25519PublicKey
,没关系,只有pre节点才需要这些。我的参考配置文件中包含这些,是因为我最开始用的pre版本,后来不稳定,才切换为稳定版本。pre版本在我的tigerhomepc
(WSL2)节点上会段错误崩溃,在Windows节点上经常断网。
最后的最后我还发现,虽然走的是同一个公网出口,但tinc的Windows节点就是比安卓节点网速慢。不知道为什么。
参考配置文件中,Linux节点具有公网出口,算是服务器,Windows和Android节点是客户端。
hosts
文件夹中的hu60cn
,hu60net
,tigerhomepc
都具有公网出口,通过Subnet = 0.0.0.0/0#1
,Subnet = 0.0.0.0/0#2
,Subnet = 0.0.0.0/0#3
来决定优先级,#
后面的数字越小越优先。如果优先的出口节点下线,就切换到第二个出口(可能需要重启客户端才能立即改变出口)。给出的Linux参考配置文件是hu60cn
节点,由tinc.conf
中的Name = hu60cn
指定,它是第三优先出口。
Linux需要开IPv4转发:
sysctl -w net.ipv4.ip_forward=1
或者修改/etc/sysctl.conf
,添加net.ipv4.ip_forward=1
,然后运行sysctl -p
。
Windows上的tinc-up.bat说明:
route add 45.63.54.62 mask 255.255.255.255 192.168.43.1
route add 47.94.174.113 mask 255.255.255.255 192.168.43.1
route add 202.133.212.162 mask 255.255.255.255 192.168.43.1
route add 0.0.0.0 mask 0.0.0.0 10.8.4.1
route delete 0.0.0.0 mask 0.0.0.0 192.168.43.1
ipconfig /flushdns
其中,45.63.54.62
,47.94.174.113
,202.133.212.162
是三个具有公网出口的服务器,192.168.43.1
是Windows的默认网关(路由器IP),10.8.4.1
是tinc虚拟网卡的IP。需要自己把网卡重命名为TUN,并设置静态IP。网卡名称在tinc.conf
中指定,需要和实际网卡名称匹配,我设置的是TUN。网卡需要运行tinc安装目录中的tap-win64
中的addtap.bat
添加,需要管理员权限,并且不支持右键“管理员启动”,需要启动管理员cmd再cd过去执行。
tinc倾向于在两个节点之间自动建立直接连接,即使没有写ConnectTo
,它也会这样做。即使你没在配置文件中指定对方的IP地址,它也可以向其他节点询问IP地址,然后自动尝试直连。
阻止直接连接需要禁用AutoConnect
,并启用IndirectData
。
对于参考配置文件,如果想建立一条由mi10pro
->hu60cn
->hu60net
的转发链路,禁止mi10pro
和hu60net
直接连接,则可以这样做:
# mi10pro 的 tinc.conf
AutoConnect = no
IndirectData = yes
ConnectTo = hu60cn
# hu60cn 的 tinc.conf
AutoConnect = no
IndirectData = yes
ConnectTo = hu60net
# hu60net 的 tinc.conf
AutoConnect = no
IndirectData = yes
注意:hu60cn
上不应该有公网出口,如果有,优先级应该比hu60net
上的低(数字更大)。否则连接会从hu60cn
出去,不会到达hu60net
。
如果丢包严重导致网速缓慢,可以考虑结合KCPTUN
、UDPSpeeder
使用。让tinc监听在localhost(BindToAddress = 127.0.0.1
),然后通过KCPTUN
和UDPSpeeder
把TCP/UDP流量转发到客户端,再在客户端hosts/服务器
文件中使用Address = 127.0.0.1
来连接。
注意:
UDPSpeeder
。必须让服务器tinc监听在127.0.0.1才行。KCPTUN
和UDPSpeeder
必须转发到同一个端口,比如127.0.0.1:3724
,TCP和UDP的客户端监听端口都得是这个。以为tinc首先连接TCP端口,然后再尝试连接相同的UDP端口。没有办法为UDP单独指定端口。此外顺便一提,因为TCP和UDP是不同的协议,所以监听相同的端口不会出错。tinc本身也同时监听了相同的TCP和UDP端口。UDPSpeeder
性能,应该通过在tinc.conf中增加PMTU = 1200
来限制UDP包的大小,再通过PMTUDiscovery = no
来禁止tinc自动调整MTU,客户端和服务器均需要此限制。此外UDPSpeeder
也可以使用--mtu 1464
等选项增大MTU到链路上限,进一步避免分包。通过ping -f -l 1464 服务器IP
这样的命令来探测链路MTU,不断增大数字直到返回错误。KCPTUN:https://github.com/xtaci/kcptun
UDPspeeder:https://github.com/wangyu-/UDPspeeder/blob/branch_libev/doc/README.zh-cn.md