这篇文章介绍Remnawave订阅相关的内容,可能有点多有点杂,我尽量写的详细一点= =
首先在Remnawave面板里面有一个很重要的概念:主机。
这个主机是个啥意思呢?用一句话总结就是:你每添加的一个主机就对应最终用户在他们的客户端(Shadowrocket、Happ、sing-box等)上看到的节点。
假设现在我想让用户拥有一个VLESS-XHTTP-TLS过CDN的节点,现在我尝试添加一个主机。
1、备注随便填写,这是最终用户在他们的客户端上看到的节点名字。
2、每个主机都需要选择一个配置文件:
主机选择的这个配置文件必须已经有节点激活在使用:
3、因为我这是搭建的一个过CDN的节点,所以地址这里填写的是域名,且CloudFlare需要打开小云朵开关,如无需过CDN或者无需域名的情况下,可直接填写节点服务器的公网IP。
4、端口在大多数情况下,必须与所选配置文件内的入站端口匹配。首次添加的主机会自动识别配置文件内入站所使用的端口。
5、勾选主机可见性,启用这个主机。这样就创建好了一个主机。
Remnawave面板的第二个概念:内部分组。
一句话总结:内部分组的作用就是一种访问控制。最主要的功能是用来控制最终用户可以使用的主机(节点)。
Remnawave面板自带一个默认的内部分组,这里演示我就用这个自带的Default-Squad分组了,点击编辑:
这里可以同时选择多个配置文件(如果有的话),勾选你想让用户使用的入站配置:
接着我们创建一个用户,让这个用户使用Default-Squad分组:
这样用户就拥有了自己的订阅链接,他们可以通过这个订阅链接导入节点信息到各类客户端中使用。并且这个订阅链接内只包含你在Default-Squad分组内允许的入站配置:
Remnawave面板的第三个概念:订阅设置。
这个订阅设置怎么说呢,主要看用户使用的是什么客户端,因为不同的客户端在处理订阅链接时的行为不一样。但是对于Remnawave面板而言大致可以分为两类:基础订阅、json订阅。
这两者的区别是基础订阅一般情况下只包含节点信息,不包含路由规则、DNS配置等信息。而json订阅是包含路由规则、DNS配置等信息的。
我这里就拿自己常用的几个iOS客户端来演示吧。我平时用Shadowrocket、Happ、sing-box比较多。这里就主要说一下这三个客户端。
其中支持基础订阅的客户端,比如Shadowrocket,一般情况下它只提取订阅链接中的(主机)节点信息,像什么路由规则、DNS配置等等是不管的,因为它有自己的规则配置。所以它是开箱即用的,直接把Remnawave面板的订阅链接输上去导入就行了。
Happ这个客户端有点特殊,因为它同时支持基础订阅和json订阅,并且它支持在基础订阅内包含路由规则、DNS配置等信息。我使用这个客户端的时候一般不勾选“在基础订阅提供 JSON”,这样可以让Happ始终使用基础订阅,如果你勾选了这个,Happ默认就是json订阅了,那么你就需要自己搓一个json的订阅模板:
现在演示一下Happ如何在基础订阅内包含路由规则、DNS配置等信息。下面是我已经配置好的一个Happ路由链接:
happ://routing/add/eyJOYW1lIjoiQ2hpbmEiLCJHbG9iYWxQcm94eSI6InRydWUiLCJSZW1vdGVETlNUeXBlIjoiRG9IIiwiUmVtb3RlRE5TRG9tYWluIjoiaHR0cHM6Ly9kbnMuZ29vZ2xlL2Rucy1xdWVyeSIsIlJlbW90ZUROU0lQIjoiOC44LjguOCIsIkRvbWVzdGljRE5TVHlwZSI6IkRvSCIsIkRvbWVzdGljRE5TRG9tYWluIjoiaHR0cHM6Ly9kbnMuYWxpZG5zLmNvbS9kbnMtcXVlcnkiLCJEb21lc3RpY0ROU0lQIjoiMjIzLjUuNS41IiwiR2VvaXB1cmwiOiIiLCJHZW9zaXRldXJsIjoiIiwiTGFzdFVwZGF0ZWQiOiIiLCJEbnNIb3N0cyI6eyJkbnMuZ29vZ2xlIjoiOC44LjguOCIsImRucy5hbGlkbnMuY29tIjoiMjIzLjUuNS41In0sIkRpcmVjdFNpdGVzIjpbImdlb3NpdGU6Z2VvbG9jYXRpb24tY24iXSwiRGlyZWN0SXAiOlsiZ2VvaXA6Y24iXSwiUHJveHlTaXRlcyI6WyJnZW9zaXRlOmdlb2xvY2F0aW9uLSFjbiJdLCJQcm94eUlwIjpbXSwiQmxvY2tTaXRlcyI6W10sIkJsb2NrSXAiOltdLCJEb21haW5TdHJhdGVneSI6IklQSWZOb25NYXRjaCIsIkZha2VETlMiOiJmYWxzZSIsIlVzZUNodW5rRmlsZXMiOiJ0cnVlIn0=
可以直接在面板内通过Happ路由编辑器导入并解码然后根据自己的需要来修改:
解码后的配置如下:
{
"Name": "China",
"GlobalProxy": "true",
"RemoteDNSType": "DoH",
"RemoteDNSDomain": "https://dns.google/dns-query",
"RemoteDNSIP": "8.8.8.8",
"DomesticDNSType": "DoH",
"DomesticDNSDomain": "https://dns.alidns.com/dns-query",
"DomesticDNSIP": "223.5.5.5",
"Geoipurl": "",
"Geositeurl": "",
"LastUpdated": "",
"DnsHosts": {
"dns.google": "8.8.8.8",
"dns.alidns.com": "223.5.5.5"
},
"DirectSites": [
"geosite:geolocation-cn"
],
"DirectIp": [
"geoip:cn"
],
"ProxySites": [
"geosite:geolocation-!cn"
],
"ProxyIp": [],
"BlockSites": [],
"BlockIp": [],
"DomainStrategy": "IPIfNonMatch",
"FakeDNS": "false",
"UseChunkFiles": "true"
}
建议不要使用太多的geosite、geoip规则,Happ在iOS上的Xray-core有50MB内存限制,超过50MB内存就会停止运行。这些规则多了会导致Xray-core内存迅速超过50NB。
如果不需要修改我提供的这个Happ路由规则,那么只需要在Remnawave面板的订阅设置–>Happ路由,添加保存即可:
现在说一下sing-box这个客户端,这其实是我主力使用的一个客户端,这个客户端只支持json订阅,所以需要在Remnawave面板配置一个json模板:
下面是我配置好的一个模板(基于GUI for SingBox导出),目前这个配置可以直接拿来用,但是我还是要稍微提一下哈,这个模板为了兼容sing-box 1.11(iOS客户端没办法更新)所以有些配置不是当前sing-box 1.12推荐的,随着sing-box的版本更新,有些配置可能会被弃用,到时会失效。(sing-box经常出破坏性的更新,没办法)
{
"dns": {
"final": "Remote-DNS",
"rules": [
{
"action": "route",
"server": "Local-DNS",
"outbound": "any"
},
{
"action": "route",
"server": "Local-DNS",
"clash_mode": "direct"
},
{
"action": "route",
"server": "Remote-DNS",
"clash_mode": "global"
},
{
"action": "route",
"server": "Local-DNS",
"rule_set": [
"GeoSite-CN"
]
},
{
"action": "route",
"server": "Remote-DNS",
"rule_set": [
"GeoLocation-!CN"
]
}
],
"servers": [
{
"tag": "Local-DNS",
"detour": "🎯 全球直连",
"address": "https://223.5.5.5:443/dns-query",
"address_resolver": "Local-DNS-Resolver"
},
{
"tag": "Local-DNS-Resolver",
"detour": "🎯 全球直连",
"address": "udp://223.5.5.5:53"
},
{
"tag": "Remote-DNS",
"detour": "→ Remnawave",
"address": "tls://8.8.8.8:853",
"address_resolver": "Remote-DNS-Resolver"
},
{
"tag": "Remote-DNS-Resolver",
"detour": "→ Remnawave",
"address": "udp://8.8.8.8:53"
}
],
"disable_cache": false,
"disable_expire": false,
"independent_cache": false
},
"log": {
"level": "info",
"output": "",
"disabled": false,
"timestamp": false
},
"route": {
"final": "→ Remnawave",
"rules": [
{
"action": "sniff",
"inbound": "tun-in"
},
{
"action": "hijack-dns",
"protocol": "dns"
},
{
"action": "route",
"outbound": "🎯 全球直连",
"clash_mode": "direct"
},
{
"action": "route",
"outbound": "→ Remnawave",
"clash_mode": "global"
},
{
"action": "reject",
"protocol": "quic"
},
{
"action": "reject",
"rule_set": [
"Category-Ads"
]
},
{
"action": "route",
"outbound": "→ Remnawave",
"domain_keyword": "nexon"
},
{
"action": "route",
"outbound": "🎯 全球直连",
"rule_set": [
"GeoSite-Private"
]
},
{
"action": "route",
"outbound": "🎯 全球直连",
"rule_set": [
"GeoSite-CN"
]
},
{
"action": "route",
"outbound": "🎯 全球直连",
"rule_set": [
"GeoIP-Private"
]
},
{
"action": "route",
"outbound": "🎯 全球直连",
"rule_set": [
"GeoIP-CN"
]
},
{
"action": "route",
"outbound": "→ Remnawave",
"rule_set": [
"GeoLocation-!CN"
]
}
],
"rule_set": [
{
"tag": "Category-Ads",
"url": "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/category-ads-all.srs",
"type": "remote",
"format": "binary",
"download_detour": "🎯 全球直连"
},
{
"tag": "GeoIP-Private",
"url": "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geoip/private.srs",
"type": "remote",
"format": "binary",
"download_detour": "🎯 全球直连"
},
{
"tag": "GeoSite-Private",
"url": "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/private.srs",
"type": "remote",
"format": "binary",
"download_detour": "🎯 全球直连"
},
{
"tag": "GeoIP-CN",
"url": "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geoip/cn.srs",
"type": "remote",
"format": "binary",
"download_detour": "🎯 全球直连"
},
{
"tag": "GeoSite-CN",
"url": "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/cn.srs",
"type": "remote",
"format": "binary",
"download_detour": "🎯 全球直连"
},
{
"tag": "GeoLocation-!CN",
"url": "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/geolocation-!cn.srs",
"type": "remote",
"format": "binary",
"download_detour": "🎯 全球直连"
}
],
"auto_detect_interface": true
},
"inbounds": [
{
"mtu": 9000,
"tag": "tun-in",
"type": "tun",
"stack": "system",
"address": [
"172.18.0.1/30"
],
"auto_route": true,
"strict_route": true,
"interface_name": "WiFi-6",
"endpoint_independent_nat": false
}
],
"outbounds": [
{
"tag": "→ Remnawave",
"type": "selector",
"outbounds": [
"⚡️ 自动选择"
],
"interrupt_exist_connections": true
},
{
"tag": "⚡️ 自动选择",
"url": "https://www.gstatic.com/generate_204",
"type": "urltest",
"interval": "3m",
"outbounds": null,
"tolerance": 150,
"interrupt_exist_connections": true
},
{
"tag": "🎯 全球直连",
"type": "direct"
}
],
"experimental": {
"clash_api": {
"secret": "",
"external_ui": "",
"default_mode": "rule",
"external_controller": "127.0.0.1:2413",
"external_ui_download_url": "",
"access_control_allow_origin": [
"*"
],
"external_ui_download_detour": "🎯 全球直连",
"access_control_allow_private_network": false
},
"cache_file": {
"path": "cache.db",
"enabled": true,
"cache_id": "",
"store_rdrc": true,
"rdrc_timeout": "7d",
"store_fakeip": true
}
}
}
我常用的几个客户端就都介绍完了,实际上你可以看到Remnawave面板的json订阅配置还支持Mihomo、Stash等,但是我不用这些这里就不介绍了。
[可选]搭建一个Remnawave Subscription Page(独立的订阅页面程序)其作用是可以隐藏Remnawave面板域名,并且提供一个更美观的订阅页面。先看下效果:
编辑Remnawave面板的.env配置文件:
cd /opt/remnawave && nano .env
把之前的这个配置:
SUB_PUBLIC_DOMAIN=remnawave.example.com/api/sub
修改为你的订阅页面域名:
SUB_PUBLIC_DOMAIN=subscription.example.com
创建compose文件:
mkdir -p /opt/remnawave/subscription && cd /opt/remnawave/subscription && nano docker-compose.yml
写入如下配置:
services:
remnawave-subscription-page:
image: remnawave/subscription-page:latest
container_name: remnawave-subscription-page
hostname: remnawave-subscription-page
restart: always
environment:
- REMNAWAVE_PANEL_URL=https://remnawave.example.com
- APP_PORT=3010
- META_TITLE="Subscription Page Title"
- META_DESCRIPTION="Subscription Page Description"
ports:
- '127.0.0.1:3010:3010'
networks:
- remnawave-network
networks:
remnawave-network:
driver: bridge
external: true
注意:REMNAWAVE_PANEL_URL这里要指向你的面板URL,但是有多种配置方法。
1、此订阅页面程序与面板不在同一台服务器部署,那么这里就填写面板的域名,并且去掉compose内的external: true配置。
2、在同一服务器部署,可以直接填面板服务的主机名:3000,例如:http://remnawave:3000,也可以直接填写域名。
启动:
docker compose up -d
配置反向代理,我这里用的Pangolin:
荒岛






























