CatWrt 使用经验

AI 生成的摘要

加载中...

(此服务由 xLog 驱动)

这篇文章上次修改于 11 个月前,可能部分内容已经不适用,如有疑问可询问作者。

CatWrt 使用经验

Proxy 软件 DNS 解析模式怎么选?

DNS 解析模式大致分为 Redir-Host 和 Fake-IP 两大类。

Fake-IP

什么是 Fake-IP 模式呢?

通俗地讲,Fake-IP 模式是指 Proxy 软件在处理 DNS 请求时,首先将域名解析到内网 IP 池中,并记住这个域名和内网 IP 的映射关系,然后 Proxy 软件会根据域名分流规则处理这些请求:

  • 在 Proxy 链中的域名:使用 Fallback DNS(通常为国外 DNS)进行实际解析或直接封装为 Proxy 流量发送到对应的服务器。
  • 在 Direct 链中的域名:使用 NameServer(通常为国内 DNS)进行实际解析。

当你对这些内网 IP 发起请求时,Proxy 软件会检查映射表,找到对应的域名,并根据分流规则将流量处理为 Direct 或 Proxy 流量。一般情况下,Meta Core 的配置如下:

YAML
fake-ip-range: 192.18.0.0/16
Copy

当你的 DNS 请求被 Meta Core 劫持后,返回的 DNS 解析结果就会是这个 IP 池中的地址。

这种做法的目的是:

  • 对抗首次解析的干扰:减少已知 Proxy 域名的 DNS 泄露。第一次的 DNS 解析都会被 Proxy 软件根据分流规则处理,避免国内 DNS 泄露已知的 Proxy 域名。
  • 利用国内 DNS 的速度优势:在访问国内服务时,解析速度不受影响。

然而,这种模式也有一些代价:

  • 部分软件的验证:如果发现是内网网段,可能认为被中间人攻击,拒绝正常工作。
  • 一些软件无法使用:比如 UWP 应用,BT、PT 等应用可能会有问题。UWP 应用尚且可以通过 fake-ip-filter 去解决,那其他类型的情况呢?

综合来看,Fake-IP 只适合大多数普通用户,他们只需要 Proxy 功能,而不对网络进行深入探索,不深度使用 BT、PT 等应用。

Redir-Host

现在说说 Redir-Host 模式。

通俗地讲,Redir-Host 不会将域名解析到内网 IP 池中。你的 DNS 查询会首先使用 NameServer 进行查询,当域名属于 Proxy 域名时,调用 Fallback DNS 进行二次查询。如果 NameServer 和 Fallback DNS 设置为同一个,你会明显观察到 Proxy 域名的查询时延是非 Proxy 域名的两倍。在正确设置下,Redir-Host 模式应始终返回域名的真实 IP,自然没有 Fake-IP 的问题。

然而,这种模式也有一些代价:首次解析使用 NameServer,无论域名是什么,首次解析都会通过 NameServer 进行。当 Proxy 软件匹配分流规则时,如果发现域名在 Proxy 链中,就会调用 Fallback DNS 进行二次查询,确保解析结果没有污染。结果是 Proxy 域名可能会在国内 DNS 泄露。

但也有解决办法:使用无污染的 DNS,例如,自建上游 DNS 或使用 Google DNS。这样就不需要 Fallback DNS,因为你已经能保证 DNS 的纯净,Proxy 域名不会传递给大陆 DNS,在这个过程中,你应该会使用加密 DNS,这样可以防止中间人劫持等。可以使用 ipleak 检查 Redir-Host 模式下的 DNS 泄露。如果没有一个大陆 DNS,则认为可以。

我个人强烈推荐 Redir-Host 模式,因为这个模式才是符合直觉的,不会造成很多非预期行为。

如果想详细了解这些,请在评论区告诉我,我会考虑再写一篇。

防火墙的 IP 动态伪装

这个名字有些拗口,直接称为 NAT 功能总开关更清晰明了。开启该功能即启用该接口的 NAT 模式,如果在 WAN 口开启,来自 LAN 口的流量会进行 FORWARD + NAT。

防火墙的 MSS 钳制

这个名字也不太好理解,称为 MTU 匹配功能开关更清晰明了。其功能非常简单:将发送的数据包匹配到当前接口的 MTU。当数据包大于 MTU 值时,会进行分包发送,使数据包更加碎片化,可能增加丢包率,网络延迟明显增大等,用户会观察到网页加载时间变长。打开这个开关可以避免这些问题,提高网页加载速度。

开启该功能开关后,可以防止 IP 分片,以及超大数据包导致的网络延迟。

这个功能有代价吗?当然有。CPU 处理数据包会有额外的性能开销,增加负载,可能影响极限性能。

如何手动调整网卡的 MTU 值呢?

首先应测试目标接口的 MTU 值。因为我的 CatWrt 是旁路网关,我就测试 PC 到该网关的 MTU 值。

ping -M do -s 1472 175.45.176.100 # 175.45.176.100 为 CatWrt 的 LAN(v4)口地址
Copy

如果数据包过大,会返回如下信息:

ping: local error: message too long
Copy

示例命令设置的数据包大小为 1472 字节,可以以 2 字节为梯度逐步减小数据包大小,直到找到合适的大小。假设 1472 字节的大小成功 ping 通,对于 IPv4 的计算方法如下:

1472 + 8(ICMP 报文长度)+ 20 (IPv4 头部长度)= 1500

对于 IPv6,假设 1450 字节成功,计算方法如下:

1450 + 8(ICMP 报文长度)+ 40(IPv6 头部长度)= 1498

这个值可以在 CatWrt 的接口设置中调整。如果你的 LANv6 和 LANv4(IPv6 和 IPv4 逻辑接口)绑定的是同一个物理接口,建议以 IPv6 设置 CatWrt LAN 接口的 MTU 值,然后修改 PC 网络接口的 MTU 值(可以不修改,正常的都会去自动设置 MTU 值),与之对应。如图所示:

此文章已经由它的创作者签名并安全地存储在区块链上。