更多细节见评论区。
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楼有参考配置文件和网络中继说明。
截图:
咋一看以为是前几年的tiny全局免流客户端呢
菩提本无树,明镜亦非台。
本来无一物,何处惹尘埃!
ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
華為P30 (Pro版)-(金色)
有什么用,对GFW的穿透力如何
菩提本无树,明镜亦非台。
本来无一物,何处惹尘埃!
ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
華為P30 (Pro版)-(金色)
@老虎會游泳,用于创建跨地区的内网。也可以用做创建跨地区的公网路由。目前未被拦截。
@Leslie,提供完整的TCP/IP协议,所以UDP可用。并且它本身是为了创建内网而设计的,不是为了提供Internet代理。
https://www.bilibili.com/read/mobile/3364699
健健康康
那么,这个内网是否可以搭建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转发:
或者修改
/etc/sysctl.conf
,添加net.ipv4.ip_forward=1
,然后运行sysctl -p
。Windows上的tinc-up.bat说明:
其中,
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
直接连接,则可以这样做:注意:
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
@老虎会游泳,感谢大佬。
健健康康
健健康康
@tianQQ,TCP连接双方可以协商MTU(MSS),所以我认为这个值可能会有效。
但是用TCP承载TCP是非常不靠谱的,因为一但开始丢包,外层TCP和内层TCP都会开始重传,性能会成倍恶化。如果你遇到UDP QoS问题,可以考虑用UDP2Raw把它伪装成TCP,当然这会影响P2P特性。
但是,很多用tinc的人就是想做中继连接,甚至会专门关掉p2p链路自动发现和直接连接,还有些人只有一个服务器,所以问题通常不大。