HomeProxy 是一种在openwrt上由天灵开发的科学上网的工具软件,使用sing-box内核,各种可视化配置界面,轻松进行singbox配置,适用于openwrt23.05以上版本。和其他科学上网软件比较,在节点分流方面比较有优势,由于将各种上网工具如shadowsocks、trojan、v2ray、hysteria2等打包在一起,对系统资源占用也相对较少。
现在一些网站如chatgpt、youtube、netflix等服务对地区有限制,不同的地区提供的服务也不一样,分流就势不可免了。
以前我长期使用lean的ShadowsocksR plus+ 作为路由器代理软件,SSRP总体使用稳定,配置简单方便、各种问题也能轻松修改;唯一不足的是在分流方面较弱,只能设置一个分流节点,如果想要不同网站设置不同分流方案的话,需要手工修改很多代码,不是很方便。如果无需分流的话推荐使用。Homeproxy分流节点能力很强,但是配置略显复杂,配置教程较少;sing-box官方文档看起来也费劲,如果没有长期跟踪singbox,只看wiki很难搞懂参数的值代表什么意思。经过一段时间摸索不断测试,终于成功使用homeproxy进行相关配置,并搞明白为什么要这样设置达到分流目的。
一、自主编译Homeproxy
openwrt官方版本中带有sing-box,我们只需将homeproxy下载到openwrt编译目录,进入 /openwrt/package/ 目录,执行
git clone https://github.com/immortalwrt/homeproxy
编译时make menuconfig 选中 luci —applications—luci-app-homeproxy 即可编译出带有homeproxy的固件。
不想编译固件安装,如果是immortalwrt固件可以在页面 软件包 搜索安装或 使用命令下载安装:
opkg update opkg install sing-box luci-app-homeproxy
其他路由器固件也可以自行寻找对应路由器架构的版本手工上传安装。

二、Homeproxy简单使用
1、节点设置 处 订阅 处添加订阅地址并更新,更新后 节点 处即有你机场的节点信息,其中默认包封装格式是指机场订阅链接中含有v2ray/xray的vless、vmess节点适合哪种方式解包,防止解析出的含vless、vmess的节点参数无法使用,默认机场订阅是xray参数格式打包的。也可以在 节点 处手工添加代理节点。

2、客户端设置 —路由设置 —路由模式 处根据需求选中除 自定义路由 外的模式。代理模式 建议选中重定向模式即 Redirect TCP+TProxy UDP,即将路由器入站的tcp及udp流量转发至sing-box监听的5331、5332端口。
3、访问控制里面控制内容不多,都是字面意思,根据需要使用。

4、关闭homeproxy 只需主节点设为 禁用 即可。
三、Homeproxy分流网站介绍
分流是sing-box的重要功能,也是优秀点。配置相对复杂,但是根据下面一步步操作,应该没什么问题。每步操作完需要点击右下角的 保存 按钮,不然进行其他操作是可能导致上一步配置丢失。最后完成再 保存并应用 。

首先客户端设置 —路由设置 —路由模式 处根据需求选中 自定义路由 模式。这里就可以根据需求自定义相关规则达到使用目的。
代理模式和上述一致,采用Redirect TCP+TProxy UDP,这样tcp和udp都可以进行代理。
ipv6支持关闭,我们科学上网节点一般是只支持ipv4的,这里关闭并不代表后来设置的国内网站有ipv6直连有冲突。
绕过中国流量 建议选择,不选择虽然可以在后面设置中将中国网站进行直连,但是这里是通过nftables防火墙规则对中国网站进行直连,并不通过sing-box内核。因此少了一步流程,速度更快。
覆盖目标地址 是指使用嗅探到的域名重新解析ip并覆盖原来默认dns规则解析出的目标ip,也就是通过路由规则重新解析目标网站ip,这里根据情况选中。选中后会重复解析ip,降低速度;不选择后对国内dns服务商提供的错误欺诈ip就没有重新解析功能,导致访问国外域名失败,如果对dns分流处理的好,可以不选择。
默认出站 这里指的是不在任何规则内的网站如何出站,这里使用默认节点进行出站(等后面设置完了就可以选择了)。如果需要关闭homepoxy,只需要在 默认出站 选择 禁用 即可。

1、节点设置 处加入机场,并更新出节点。
2、点击 路由节点 下方 添加 处 增加一个路由节点,注意节点名不能带 - ,可以用 _ ,卷标处可以使用 - 。由于homeproxy配置项目众多,建议用 _+后缀 设置配置项。首先建立一个默认节点,以defaut_node 为名,增加一个节点。

根据需求选中相应代理节点。域名解析策略 根据需求选则。
全面配置完后图:

3、 设置分流域名集或ip集。在 规则集 中分别加入我们需要分流的网站及ip,可以在sing-box官方或MetaCubeX的github网站上寻找域名、ip集合。规则集支持二进制和json格式,建议使用二进制格式,也就是srs格式,数据量小查询快。部分网站需要ip和域名都通过分流节点才能正常分流,如netflix。一般使用的域名集合地址如下:
#MetaCubeX https://github.com/MetaCubeX/meta-rules-dat/tree/sing #sing-box https://github.com/SagerNet/sing-geosite/tree/rule-set #我使用的规则集 #中国ip https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geoip/cn.srs #中国网站 https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geosite/cn.srs #youtube网站 https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geosite/youtube.srs #chatgpt网站 https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geosite/openai.srs #奈飞网站 https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geosite/netflix.srs #奈飞网站ip https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geoip/netflix.srs #电报ip集合 https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geoip/telegram.srs #电报域名集合 https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geosite/telegram.srs #bilibili域名集合 https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geosite/bilibili.srs #twitter网站集合 https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geosite/twitter.srs
添加一个youtube集合示例,类型选为 远程 ,格式为 二进制文件 ,也就是srs文件,出站不要选 直连 ,因为github网站国内打开是不稳定的,这些规则集合都通过默认代理节点下载。
如果我们还需对一些网站分流,可以手工设置规则,可以自行增加域名集合,首先我们在/etc/homeproxy/ruleset/ 里增加一个customsite.json文件,格式如下:
{
"version": 1,
"rules": [
{
"domain_suffix": [
"example.com",
"example1.com",
"hellow.example2.net"
]
}
]
}example.com等更换为自己需要分流的网址,最后一个域名后没有 , 。
这个处理完后,我们就可以增加自定义规则集合custom_site 。
类型选为 本地 ,格式为 源文件 ,也就是json文件,路径就是我们刚才设置的路径/etc/homeproxy/ruleset/customsite.json。
所有设置完成后图:
该图和示例不一致,主要在 卷标 处后来个人做了修改。
4、添加路由规则,该处有顺序要求,上面的规则优先匹配。比如增加一个国内网站出站直连。添加一个direct路由规则,弹出的对话框里只需要在规则集里选择中国的ip及网站集合,出站 选择 直连 即可,其他无需改动。

其他路由规则按需加入即可。这里增加中国网站走直连,实际上并不会触发,上述 路由设置 里 绕过中国流量 的功能我们已经设置了。规则集根据情况选择ip集、域名集还是两者都需要。
调整规则顺序可以选中三个横的图标进行调整。
5、进行DNS相关设置,DNS设置是比较关键的地方,设置不对,将导致路由器直接卡死,在摸索过程中卡死过好多次,卡死原因是出错信息疯狂写入log日志,一个网站出错就能写十几兆的文本,而且是持续写入直到浏览器关闭该网站访问,这会导致cpu迅速占满,路由器卡死。
2024-8:卡死原因已经找到,是我这里smartdns作为sing-box的上游服务器导致的,且是默认服务器。sing-box会对域名发起HTTPS记录解析请求,部分国内网站有HTTPS记录,值可能是简单的0 .,singbox疑似对返回值0.的处理有问题,导致会不断要求上游smartdns HTTPS给出解析。解决方法就是smartdns里加入force-qtype-SOA 65,也就是smartdns关闭TYPE65 HTTPS记录 查询。
singbox日志info报错样式:
+0000 2024-08-17 00:25:38 INFO dns: exchanged pcrec.baidu.com HTTPS . 600 IN HTTPS 0 . +0000 2024-08-17 00:25:38 INFO dns: exchanged www.baidu.com HTTPS . 600 IN HTTPS 0 . +0000 2024-08-17 00:25:38 INFO dns: exchanged www.baidu.com HTTPS . 600 IN HTTPS 0 . +0000 2024-08-17 00:25:38 INFO dns: exchanged pcrec.baidu.com HTTPS . 600 IN HTTPS 0 . +0000 2024-08-17 00:25:38 INFO dns: exchanged pcrec.baidu.com HTTPS . 600 IN HTTPS 0 . +0000 2024-08-17 00:25:38 INFO dns: exchanged pcrec.baidu.com HTTPS . 600 IN HTTPS 0 . +0000 2024-08-17 00:25:38 INFO dns: exchanged www.baidu.com HTTPS . 600 IN HTTPS 0 . +0000 2024-08-17 00:25:38 INFO dns: exchanged pcrec.baidu.com HTTPS . 600 IN HTTPS 0 .
几秒钟内sing-box这种类型的记录达4万余条,waning报错+0000 2024-08-17 00:17:46 ERROR dns: exchange failed for pcrec.baidu.com. IN HTTPS: context canceled。如果你不关闭浏览器,pcrec.baidu.com就会被继续请求解析https记录,那么一会路由器内存占用超过1.4G,singbox和smartdns会同时全速运行,然后CPU100%,直接卡死。
我们需要了解Homeproxy对DNS的处理流程,对于自定义路由,homeproxy通过/var/dnsmasq.d/dnsmasq-homeproxy.d/redirect-dns.conf文件中配置的5333端口将sing-box的dns模块设为为dnsmasq的上游,通过 dns规则 来控制DNS的解析。所以如果你设置了smartdns、mosdns等作为dnsmasq的上游服务器,需要关闭smartdns、mosdns作为dnsmasq上游服务器的功能,只将他们设为独立的dns模块来使用,使其作为singbox的上游dns服务器,否则homeproxy的dns规则将部分失效。
DNS服务器 需要先设置一个国内dns服务器,如增加一个腾讯的dns服务器119.29.29.29,解析策略 建议 优先ipv4 ,出站选为直连。我这里发现使用阿里的dns服务器解析,部分网站会被电信运营商劫持或抢答。
再设置一个国外dns服务器。这里选择google作为上游服务器,地址建议使用tcp模式,也就是使用 tcp://8.8.8.8 。不建议直接写入8.8.8.8,这样就是通过udp连接,有些机场的节点服务器不支持udp会导致无法解析;也不建议使用dot、doh服务器格式,这样会导致需要解析的域名信息被加密,机场代理节点的dns解锁服务获取不到域名信息自然无法进行dns解锁,也就是机场代理节点应该能用的chatgpt、netflix等网站无法服务。
地址解析器,如果你使用doh、dot服务器,如:https://dns.google/dns-query 用于解析dns.google域名的另一个 DNS 服务器的标签。如果服务器地址包括域名则必须选择一个,可以选为纯ip格式的国内dns服务器。
出站 除了直连都可以选择,这里选择默认节点default_node。选择直连会直接出去,国外DNS服务器一般国内都是间隙性阻断,会导致连接不上而无法上网。有些homeproxy版本还有个 默认 选项,sing-box里的配置项就是detour字段 ,默认选项就是detour设置为空,如果为空sing-box会自动选择默认节点作为detour出站。
由于我喜欢smartdns强大的自定义功能,我这里还使用了smartdns作为sing-box的上游dns服务器,地址写为127.0.0.1:5558 是没有问题的。
RCode用于屏蔽广告等,如需要屏蔽广告,可以再设置一个adblockdns服务器,服务器地址写 rcode://refused。
可以增加多个dns服务器,出站 可以根据路由规则选择代理服务器,查看日志就会发现不同域名网站会通过所选代理服务器规则进行dns解析。实际测试下来只设置一个tcp://8.8.8.8 也没有问题,但是如果默认代理节点挂了,其他分流节点也会上不了网,所以可以多增加几个dns服务器,出站根据路由规则选择,保证主节点也就是默认节点挂了后,分流节点也可以用。
6、DNS规则的设置,该处有顺序要求,从上到下匹配dns规则,这里又是一个难点问题,配置不好就不会按你的预期进行工作。配置项很多,主要只需要考虑 规则集 、出站 、服务器 这三个配置项。
首先要设置一个用于路由器内部网站的解析规则,比如机场提供的节点ip是以域名形式提供的,要放在第一位,不然后面的解析如果需要翻墙节点default_node,却无法解析代理节点的ip,导致死循环,路由器卡死。这里我设为了nodedns,规则集不选,因为无需规则。出站 选为 任何 ,这里必须选为任何,其他都不行,否则易导致解析路由节点域名死循环,这里是为了匹配路由节点中 .outbounds[].server 域名。该dns服务器直接出站去解析路由节点中任何需要解析的代理服务器域名,路由节点中服务器域名要解析成ip就会匹配上这条规则。服务器选为国内DNS服务器,这里选用腾讯节点,路由器里的网站让他通过直连解析即可。
其他规则就很容易懂了,再增加个youtube的dns解析。规则集选为 youtue_site ,用于匹配 youtube相关域名的解析。出站必须设为 不选,也就是保持默认。此处困扰了我很久,此处字面意思是选择一个代理服务器出站进行解析,一旦设置了代理服务器如default_node出站,会导致整个DNS规则失效(默认节点服务器的地址是域名形式)。该处 出站 上面已经介绍,没有特殊需求就默认空白;服务器选国外服务器为Google。
其他按需添加。
7、设置一下默认DNS服务器,默认服务器建议使用国外服务器,这样不在任何规则内的网站解析都使用国外服务器。我这里使用了smartdns服务器,因为我smartdns里设置了很多自定义规则也进行了国内国外分流。禁用dns缓存 必须选上,实际测试下来在路由器刚开机的情况下,由于各种规则的下载、科学上网不能及时连上,会导致dns解析出错,这时一旦出错,报错就是成千上万条甚至几十万条,直接导致路由器卡死。EDNS Client subnet这些无需设置,主要是解决dns服务商提供的IP离你物理距离远近的问题,有些dns服务商还不支持。存储被拒绝的 DNS 响应缓存也没必要设置。
经过一番设置,我们就可以愉快的通过homeproxy进行网站分流了。以后我们调整节点只需要在 路由节点处更换节点即可。
四、其他需要修改的
1、部分网站使用QUIC来传输数据,以此获取访问者的ip信息,比如Youtube。在电视里使用YoutubeTV版优先走quic协议,sing-box有时不能正确的嗅探出(sniff)quic协议中域名信息,路由分流就会失效,这样会走兜底默认出站节点,获取到默认节点的ip,导致和我们期望的目标地区不一致,分流失败。我们需要在路由规则里面屏蔽QUIC协议。全局屏蔽QUIC协议,路由规则 里增加blockquic规则名,网络选udp,端口 增加 443,出站 选为封锁,该blockquic规则需要优先级较高。
也可以用nft规则来屏蔽quic流量。我只针对电视屏蔽了QUIC流量,使用的规则示例:
nft add rule inet user PREROUTING ether saddr AA:BB:CC:DD:EE:FF udp dport 443 counter drop
该规则只针对我的软路由有效,inet user PREROUTING是我自定义的nftables user表,不能直接套用。如需使用自行研究应该保存在哪个表内,及优先级等等。
2、关闭日志,可以在/etc/homeproxy/scripts/generate_client.uc里约323行将disabled: false,改为disabled: true,或者改变log等级,等级为trace debug info warn error fatal panic ,homeproxy里默认等级是warn,需要调试可以将log 设为trace 。
技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/net/1621.html

评论列表(37条)
大佬。我默认节点选hk。然后分流ai到sg。还是会识别到hk。然后ai就不能用了。不知道为啥会这样
@Zc477:先看看全局sg有没有问题。分流里面ai的dns也要分流。另外如果是新版singbox、homeproxy的话,配置逻辑有所变化,我已经不用了,没怎么研究。现在用的是nikki(mihomo)。
@BandWh.com:是的,新版改了好多好多。selecter啥的都没了。nikki好像速度快些,但dns有泄漏,我不知道咋设置。而且打cs时,经常卡飞断联。
@ttcdldxsby:研究下mihomo的配置,设置起来还是很简单的。dns这块可以国内外分流,我是修改了Nikki的防火墙代码配合smartdns使用的,不存在dns泄露。Nikki我这使用很正常,没发生过断流断联现象。
有点麻烦,个人还是熟悉clash的配置文件写法,dashboard也方便,本来想换一个软件用用的,还是继续用openclash吧
@bjl1015:各代理软件其实都是一回事,homeproxy接管了路由器的dns设置,且没有内置一些分流规则,因此设置略显复杂。homeproxy目前最主要问题是节点一旦不通,无法自动切换,需要手工更换节点。
@BandWh.com:不良林几个月前就做出来自动换节点的了
@BandWh.com:Homeproxy 2025年版本已经有URLTest功能了。可以自动切换节点了。
自定义规则可以放在gist上,维护更新更方便,不用放在本地
@xiaoxiyao:感谢分享!