目录

【教程三】软路由科学上网,openclash,openwrt IPv6配置



一、openclash设置

接着前两期教学文章,需要补习的请自行翻阅。本文以openwrt-rpi固件为例

点击服务-openclash,在软路由中主流的科学上网插件除了这个就是passwall。他们都能使用各种协议的订阅

在openwrt高大全的固件中,它的服务都是只有页面罢了,以openclash为例,它可以导入,却没有内核…所以他们的后端并没有进行安装,需要我们自己安装,而且一般是命令行操作

找到openclash的GitHub,参考看releases,可以进行安装,安装过程中还需要更改opwnwrt镜像源才能顺利下载依赖,而且这个只是Redir-Host模式的内核,其它内核还要再安装

扯远了,我们使用OpenWrt-Rpi固件,以上烦恼都没有,默认已经安装好了!这就是选择固件的重要性



1.1 REDIR-HOST与Fake-IP

首先我们需要了解两种代理模式,参考文章,参考视频:

简单来说

  1. 浏览器有自己的缓存,操作系统也有自己的dns缓存

  2. 当我们使用代理时,如在操作系统上运行clash,使用系统代理或浏览器插件走代理,浏览器直接将请求的域名封装在SOCKS5协议中,最终的dns解析发生在海外代理服务器上

  3. 当我们使用REDIR-HOST模式时(透明代理,openclash运行在路由器上),浏览器请求dns解析,dns解析请求被clash截获,路由器的clash去解析dns,获得真实IP后返回给设备的浏览器,浏览器根据ip发起连接,请求被clash拦截,clash根据ip在自己的映射表中反查出域名,再用域名去走代理,机场代理服务器再次解析dns

  4. 当我们使用Fake-IP模式时(openclash运行在路由器上),浏览器请求dns解析,dns解析请求被clash截获,clash立刻返回一个Fake IP给浏览器,浏览器根据ip发起连接,请求被clash拦截,clash根据fake ip在自己的映射表中反查出域名,再用域名去走代理,代理服务器解析dns

总之Fake-IP更快,因为少一次clash解析dns。

Fake-IP快的代价就是返回假的 IP 会污染本地 DNS 缓存,使得代理断开之后一段时间内设备无法访问网络。实测手机上是没出现这个问题。操作系统上的dns缓存也不会缓存太久,似乎就10s

Fake-IP的唯一缺点就是公网无法获取到家庭设备的ipv6地址后缀,所有的ipv6请求被代理后,都是由openwrt lan口发起的。这对ipv6的ddns服务会有影响。而且目前(2022年10月10日)openclash Fake-IP下无法选择 某个局域网设备 不走代理,只能全部代理。



1.2 配置步骤

搞懂了理论知识我们开始配置,✓代表勾选 ✕代表取消勾选

服务-openclash-全局设置-最下方切换页面到Fake-IP模式:

✕UDP 流量转发 (博主对节点延迟不信任,海外游戏都是用加速器),✓IPv6 流量代理,✓绕过中国大陆 IPv6,✓仅代理命中规则流量,✓仅允许内网

保存配置,不用应用

服务-openclash-全局设置-dns设置-✓自定义上游 DNS 服务器,✕追加上游 DNS,✓追加默认 DNS,✓禁止 Dnsmasq 缓存 DNS,✓允许IPv6类型DNS解析。

服务-openclash-全局设置-外部控制-更改密码

在下方设置自定义上游 DNS 服务器,使用默认,后面再讲分流

这里对上面一些重要配置做出讲解

  • 追加上游 DNS一定要取消勾选,不然不知道给你追加了什么垃圾dns服务器

  • ipv6设置,现在运营商都提供ipv6地址,想要访问ipv6站点,openclash一定要这样设置。允许IPv6类型DNS解析,否则openclash会拦截不让你访问。Fake-IP模式勾选IPv6 流量代理,否则无法ipv6访问。不足的是Fake-IP模式的IPv6 流量代理,无论你是什么设备,ipv6请求都是由openwrt的br-lan网口发起,对方无法拿到你的真实ip,只有br-lan ip,这对ddns有影响。而且目前Fake-IP模式没有提供某局域网设备不走内核



1.3 添加订阅

openclash订阅的正确玩法,参考视频

配置文件订阅-编辑配置文件订阅信息-添加

订阅地址,如果机场给的是clash的,直接填。如果机场给的ssr,然后机场有给转换clash的工具,别转,直接填ssr的地址

重要的来了,勾选在线订阅转换

模板选 ACL4SSR规则Online Full ,添加Emoji 启用,UDP 支持 启用

保存配置

最后!应用配置,或者启动clash

好了,全屋的科学上网实现了!



二、openclash dns分流

openclash 自定义上游 DNS 服务器中,nameserver就是国内dns服务器,fallback是需要走代理时用的dns服务器,这就能分流了

其实openclash还有default-nameserver,这个不用深究,勾选追加默认 DNS即可

dns服务器推荐,国内阿里腾讯,海外google、cloudflare

# 都是UDP,53端口
223.5.5.5
119.29.29.29
2400:3200::1
2402:4e00::

# 都是tls,853端口
8.8.4.4
1.1.1.1
2001:4860:4860::8844
2606:4700:4700::1111

# https,不用填端口
dns.google/dns-query
cloudflare-dns.com/dns-query



2.1 smartdns设置

smartdns有用么?还是心里安慰?仁者见仁智者见智,但是配置不好确实会反向影响上网速度和体验

使其作为openclash上游服务器使用,分组设置国内外的dns服务器,国内走默认的udp协议即可,海外防dns污染需要跳过测速,并使用https或tls协议

设置步骤:

  1. 勾选启用,重定向-无

  2. 自定义设置,删除(备份)原本的内容,填入下列内容

#################################
# https://www.hughh.top
# https://github.com/Hugh357/hugh357.github.io
# 自定义分组分流,用了以后就不需要页面上的默认dns和第二dns服务器了,为了稳定我们打开默认dns服务器但是重定向选无

bind :6153 -group cn speed-check-mode ping,tcp:80

bind :6253 -group oversea -no-speed-check

# 阿里腾讯
server 223.5.5.5 -group cn -blacklist-ip -group bootstrap
server 119.28.28.28 -group cn -blacklist-ip -group bootstrap

# 海外防污染用DoT或DoH
# 最好用域名,能用curl测试 curl -H 'accept: application/dns-json' 'https://dns.google/resolve?name=www.google.com&type=A'
# google 8.8.8.8是不支持tls和https的4.4才支持
server-https https://dns.google/dns-query -group oversea -exclude-default-group -blacklist-ip
server-https https://cloudflare-dns.com/dns-query -group oversea -exclude-default-group -blacklist-ip

#################################

题外话,博主的疑问:缓存是否分组?比如cn和oversea两个的缓存是不是混在一起的?

默认配置中,它会重定向dnsmasq到smartdns。dnsmasq就是openwrt默认的dns服务器,它启动在53端口,但是它可被重定向。设置在网络-DHCP/DNS,smartdns、openclash都会自动修改这里,而且openclash优先级最高。

  1. openclash - 自定义上游服务器,只启用我们的smartdns的两个分组

最后的dns链其实是dnsmasq的53端口被重定向到clash,clash请求的上游是smartdns,当然我们还可以在中间嵌套广告屏蔽的插件



三、ipv6设置

ipv6的好处是可以直接从公网访问内网机器,即每个家庭网络都能有公网ipv6,不需要像ipv4那样用路由器做nat映射才能访问

注意OpenWrt-Rpi固件编译时默认不带ipv6,设置时会发现以下问题(2022年9月28日,ImmortalWrt 18.06)

lan接口无ipv6地址,接口没有DHCPv6协议供选择,所以无论怎么操作都没法ipv6上网

  1. 正确做法是需要安装ipv6
# https://www.hughh.top
# https://github.com/Hugh357/hugh357.github.io
wget --no-check-certificate -O "/usr/bin/ipv6-helper" https://openwrt.cc/scripts/ipv6-helper.sh
chmod +x /usr/bin/ipv6-helper
ipv6-helper install
# 最后重启OpenWrt
  1. 安装完成后,网络-DHCP/DNS-高级设置-禁止解析IPv6 DNS记录-取消勾选。openclash则需要按上面提到的设置

  2. 网络-接口,wan lan的高级中都取消 使用内置的 IPv6 管理、强制链路

  3. lan的ipv6设置中,路由通告服务、DHCPv6 服务:服务器模式;NDP 代理 禁用;DHCPv6 模式:有状态+无状态

这时测试一下应该可以上ipv6网站了

这时如果绑定ipv6地址监听我们的端口,用流量从外部访问我们内部设备的端口,发现是访问不了的,应该是openwrt防火墙没开放

curl http://test6.ustc.edu.cn/backend/getIP.php



四、各种配置网速实测

博主测试了:REDIR-HOST、Fake-IP、有无smartdns,两组条件的排列组合

测试内容是python3,httpx库,get方法。访问国内外各8个站点

发现,REDIR-HOST下,用openclash+smartdns分流比起openclash直接分流,国内访问变慢了,8个网站的总和,用smartdns的情况下,耗时8s左右。而无smartdns只需1-2秒。Fake-IP没看

而REDIR-HOST和Fake-IP的差别是,8个网站的总和,都不用smartdns的情况下。国内Fake-IP比REDIR-HOST快个0.1-0.2s,有趣的是REDIR-HOST在访问国外网站时,有的httpx.get访问不了,我以为是dns污染,但是浏览器能打开。切换Fake-IP后,居然都能访问了。看来Fake-IP更稳(后续发现REDIR-HOST恢复访问了,可能是本机缓存原因)。

博主目前就用Fake-IP、不用smartdns,也不用其它的dns插件。不代理udp(游戏),代理ipv6,如果fake-ip不污染本地dns的话,感知不强的话,就准备一直这样用