Skip to content

路由与 DNS ​

路由决定到达节点的每个连接如何处理:由哪个出站承载,或是否拦截。DNS 决定节点如何解析域名。两者都属于模板,位于其路由和 DNS 标签页中,因此模板上的每个节点都按相同的方式路由。

路由的工作方式 ​

对于每个新连接,节点从上到下检查规则。第一条匹配的规则决定结果。没有匹配任何规则的连接交给默认出站。

完全没有规则时,所有流量都交给默认出站;除非你另选,默认出站就是内置的 direct。这是一个合理的起点:只为需要去别处的流量添加规则。

编写规则 ​

在模板的路由标签页中:

  1. 在规则集中选择规则要匹配的列表。只有被选中的规则集才能被规则引用。见 规则集。
  2. 点击添加规则。
  3. 在匹配中设置规则匹配的内容。
  4. 选择动作;动作为 route 时还要选择出站。
  5. 保存规则,然后保存模板。

列表按节点检查的顺序为规则编号。新规则添加在末尾;要调整顺序,请拖动该行开头的手柄。使用键盘时,聚焦手柄后按上或下方向键。

规则可以匹配什么 ​

一条规则可以组合多个匹配条件。除非勾选 Invert match,所有条件都必须匹配。

匹配条件匹配对象
Domain、Domain suffix、Domain keyword、Domain regex目标的域名
IP CIDR、IP is private、IP version目标的地址
Port、Port range目标的端口
Rule set模板所选的任意列表;Rule set matches source IP 改为用用户的地址与之匹配
Networktcp 或 udp
Protocol嗅探识别出的协议:tls、http、quic、dns、bittorrent 等
Inbound连接进入时所用入站的标签
Auth user (panel user)用户的账户名
Source IP CIDR、Source port、Source IP is private连接的来源

基于只有手机或桌面应用才能看到的信息的规则,例如应用进程或 Wi-Fi 网络,会在保存时被拒绝:节点永远看不到这些信息,这样的规则永远不会匹配。

动作 ​

动作效果
route把连接发往所选的出站。
reject拒绝连接。
sniff读取连接的开头,识别其协议和域名,然后继续检查下一条规则。
resolve解析域名,让后面的地址规则可以匹配它。
hijack-dns把该连接当作 DNS 查询,用节点自己的 DNS 应答。
route-options设置连接选项,但不选择出站。

协议嗅探 ​

很多连接到达时只有地址,没有域名。sniff 规则从连接开头读取 TLS 服务器名称或 HTTP 主机名以及协议。之后的规则就可以按域名和 Protocol 匹配。当后面的规则要匹配域名或协议时,把 sniff 规则放在最前面。

嗅探是识别,不是保证:无法识别的流量会以未匹配状态继续交给下一条规则。

默认出站 ​

默认出站接收所有未被任何规则匹配的连接。它是模板上各节点的默认值。恰好中继一条隧道的节点会改为把该隧道作为默认出站,除非模板自己的规则把部分流量发往该隧道:这时其余流量仍使用模板的默认出站。见 隧道。

表单不够用时 ​

JSON 标签页按节点收到的原样显示整个路由配置。表单中没有的写法可以在这里编写。面板仍会拒绝那些会导致节点拒绝配置的选项。

DNS ​

模板的 DNS 标签页设置节点自身查询所用的解析器:用于 resolve 规则、按域名拨号服务器的出站,以及 hijack-dns。

用添加服务器添加服务器并选择类型:普通 UDP 或 TCP,加密的 tls、https、quic 或 h3,节点自身的系统解析器(local),其 hosts 文件(hosts),dhcp,或 fakeip。服务器可以通过**绕行(出站)**经由某个出站发送查询。服务器下方的 DNS 规则把指定的域名发往指定的服务器。

服务器和 DNS 规则与路由规则一样,通过拖动调整顺序。DNS 规则从上到下依次检查。未设置 Final server 时,没有规则接收的查询都由第一个服务器应答。匹配应答的规则(match_response)需要其上方有一条 evaluate 规则;被移到其 evaluate 规则上方的规则会标记为顺序错误,并且在移回之前模板无法保存,因为节点会因此拒绝整个配置。

当模板定义了多个 DNS 服务器时,请在路由标签页中设置默认域名解析器。没有它,节点无法解析出站服务器的域名,会拒绝整个配置。缺少时编辑器会提醒你。

预设 ​

路由和 DNS 标签页中的从预设应用会套用现成的配置。列表见 模板。

  • 路由预设会替换模板的规则,因为规则的顺序就是路由本身。拦截 BT 下载是例外,它添加在你的规则之前。预设所需的规则集会加入选择中。
  • DNS 预设会把 DNS 配置替换为通过 DNS-over-TLS 使用的 Cloudflare、Google、Quad9 或 AdGuard,或节点的系统解析器。

预设所需的列表 ​

预设的效果取决于它的列表。如果面板没有预设所用某个列表的副本,面板会去掉该列表以及所有匹配它的规则,预设就会悄无声息地不起作用。因此对话框会先做检查:

  • 你还没有的列表会被列出名称,添加列表并应用会先下载它;
  • 面板中列出但没有副本的列表会被列出名称,你需要先在规则集页面修复它;
  • 预设目录没有提供来源的列表会被直接拒绝。

拦截 BT 下载 ​

拦截 BT 下载会添加一条 sniff 规则,并把看起来像 BitTorrent 的流量发往名为 block-torrent 的拦截出站。节点会统计它拦截的内容:数字显示在节点所在行和面板的指标中;超过你设定的速率时,会触发 node.rejections_high 事件。

它只是尽力而为。嗅探能识别 BitTorrent 握手,而对握手加密的客户端(大多数客户端默认如此)会漏过。请把计数看作被拦下的部分,而不是全部。

国家预设 ​

伊朗 + 拦截广告、中国 + 拦截广告和俄罗斯 + 拦截广告会让该国的域名和地址直接从节点出网,使国内流量不再继续转发,同时拒绝广告列表。在中继上,这能让本地流量不进入隧道。结果的完整程度取决于国家列表;如果需要更全的覆盖,请把预设目录指向更完整的列表(见下文)。

你自己的预设 ​

预设面板(规则集、入站、路由和 DNS)的内容来自面板提供的预设目录。你可以向其中添加条目或替换条目,无需等待新版本:

  1. 把一个 .json 文件放入预设目录:标准安装为 /var/opt/nx-panel/presets/,或在设置 → 常规 → 预设目录 → 目录路径中设置的目录。
  2. 重新打开预设对话框。无需重启。

该目录中的每个 *.json 文件都按文件名顺序合并到内置目录上。键或标签为新值的条目会被添加;键或标签已存在的条目会替换内置条目。无法解析的文件会被跳过并记录在面板日志中,设置页面会显示当前生效的文件。

例如,下面这个文件从你控制的镜像向规则集面板添加一个国家:

json
{
  "version": 1,
  "ruleSets": {
    "countries": [
      {
        "key": "tr",
        "label": "Turkey",
        "items": [
          { "tag": "geoip-tr", "url": "https://mirror.example.com/geoip-tr.srs", "label": "IP ranges" }
        ]
      }
    ]
  }
}

国家条目会整体替换具有相同 key 的内置条目,因此如果只想把某个内置国家的一个列表改指向别处,也要在你的条目中重复该国家的其他列表。规则集中的服务按 tag 合并;入站、路由和 DNS 预设按 key 合并。

需要不同路由的节点 ​

节点没有自己的路由:它完全按照其模板路由。当某台服务器必须以不同方式路由时,给它一个自己的模板:为它的模板创建副本,修改副本的路由标签页,再把节点放到副本上。见 模板。从带有单节点路由覆盖的版本升级上来的面板,已经自动创建了这样的副本。

检查路由 ​

节点行或用户行菜单中的路由测试会针对你描述的连接(目标、端口,以及可选的嗅探协议和域名)逐条走一遍节点自己的规则,并给出接收该连接的规则和出站。测试并连接还会从节点沿这条路径真正建立一次连接。见 节点。

文字与图片采用 CC BY 4.0 许可。