
always-ip-address的功能原理与设计目的
绕过DNS解析直接使用指定IP的核心机制
always-ip-address是Shadowrocket配置文件中用于为特定域名强制指定IP地址的参数,它的核心作用是让设备在访问这些域名时直接使用配置中写入的IP,完全跳过DNS解析环节。当该参数生效时,即使DNS服务器返回了其他IP地址,Shadowrocket仍会忽略DNS结果,强制使用预设的IP进行连接。这一机制主要用于解决DNS污染、解析延迟或特定场景下的IP固定需求。
参数在配置文件中的位置与格式
always-ip-address位于配置文件的[General]段落,采用域名:IP地址的键值对格式。示例写法为always-ip-address = example.com:1.2.3.4,多个条目可重复使用该参数或用逗号分隔。需注意该参数仅支持IPv4地址,若需指定IPv6需使用ipv6-always-address参数。保存修改后重新加载配置,所有对该域名的请求将直接发往预设IP。
与本地HOST文件功能的类比与区别
该参数功能类似于操作系统的hosts文件,都实现了域名到IP的静态映射,但作用范围不同。系统hosts影响设备所有应用的DNS解析,而always-ip-address仅作用于通过Shadowrocket代理的流量。对于直连流量(如规则设为DIRECT),该参数无效,DNS解析仍由系统hosts或DNS服务器决定。这一差异化控制使得用户可仅在代理流量中应用固定IP,避免影响其他网络行为。
always-ip-address的典型使用场景
应对DNS污染与劫持的解决方案
当用户所处网络环境存在DNS污染(即域名被恶意解析到错误IP)时,通过always-ip-address为目标域名指定正确的IP地址,能强制代理流量绕过污染结果直接访问正确服务器。例如某些海外网站在国内被DNS劫持,用户可将该域名的真实IP写入参数,代理访问时直接使用该IP,从而恢复正常访问。这是该参数最经典且最广泛的应用场景。
优化特定域名的解析速度与稳定性
部分国外域名的DNS解析在国内响应缓慢或超时,导致网页首屏加载延迟。用户可将这些域名的常用IP预先写入配置,使Shadowrocket省去DNS查询的等待时间,直接建立连接,显著提升访问速度。尤其对于CDN节点分布广泛的域名,固定一个稳定且快速的IP能大幅改善网络体验,避免因DNS解析波动造成的间歇性连接问题。
实现节点域名的IP直连防干扰
当代理节点域名本身也遭遇DNS干扰时,用户可在always-ip-address中为节点域名指定IP地址,确保节点连接始终指向正确的服务器IP。这避免了节点域名解析异常导致的“所有节点超时”问题,尤其在网络环境复杂或运营商存在DNS劫持时,能有效保障代理隧道的基础连通性。
设置always-ip-address的具体操作步骤
获取目标域名的正确IP地址的方法
用户需先确认目标域名应指向的正确IP。可通过在未启用代理的网络环境下使用nslookup 域名或dig 域名命令查询,或使用全球DNS查询工具(如dnschecker.org)获取该域名在海外DNS服务器返回的权威解析结果。建议同时验证该IP是否可达(ping测试),并确认其归属地与预期一致,避免使用已被封锁或性能低下的IP地址。
编辑配置文件添加参数的规范写法
打开Shadowrocket的配置编辑界面,进入[General]段落,在段落末尾或合适位置新增一行always-ip-address = 目标域名:IP地址。例如always-ip-address = api.github.com:140.82.112.3。若需为多个域名指定IP,可重复该行或使用逗号分隔多个键值对。确保域名与IP之间使用英文冒号分隔,无多余空格,保存修改后重新加载配置使设置生效。
多条目的管理与优先级规则
当为同一域名指定了多个IP时,Shadowrocket通常使用最后一条配置中写入的IP。用户若需为不同场景保留备选IP,可注释掉当前条目并切换至备选IP行。建议使用#进行注释管理,将多条配置保留在文件中但仅启用一条。注意多个条目间不应存在冲突,否则以最后加载的为准,管理时需清晰标注每条的目的和适用场景。
always-ip-address的核心优势与收益
完全消除DNS解析环节的延迟消耗
DNS解析通常需要几十毫秒至数秒不等,尤其在国内访问海外域名时,解析延迟和丢包常导致首屏加载显著滞后。启用always-ip-address后,Shadowrocket在连接目标服务器时完全跳过DNS查询,直接使用预设IP发起请求。这一优化在解析超时频繁的网络环境下能缩短数秒的等待时间,用户会直观感受到网页响应速度的大幅提升。
规避DNS劫持与运营商篡改
国内部分运营商或网络设备会对特定域名的DNS解析结果进行篡改,将用户引导至广告页面或错误服务器。通过always-ip-address固定目标域名的真实IP,流量绕过了DNS解析环节,彻底规避了运营商的劫持干扰。用户访问被劫持的网站时将直接到达正确服务器,不再出现被跳转到广告页或无法打开的情况。
提升代理隧道的连接成功率
当代理节点的域名解析受干扰时,节点连接可能因解析到错误IP而失败。固定节点域名的IP后,Shadowrocket能始终连接到正确的服务器IP,减少了因DNS问题导致的节点不可用。这在网络环境不稳定的场景下能显著提升代理隧道的连接成功率,降低用户手动切换节点的频率。
潜在风险与注意事项
IP地址变更导致的连接失效风险
CDN服务商和动态域名服务(DDNS)的IP地址会频繁变动,若用户固定的IP发生变更,而配置未同步更新,always-ip-address会将流量持续导向失效的旧IP,导致该域名完全无法访问。用户需定期检查目标域名的解析变化,或在配置中备注IP的验证日期。建议仅对IP长期稳定的域名(如企业官网、自建节点)使用该功能。
与CDN负载均衡机制的兼容性问题
大型网站的CDN服务依赖DNS解析将用户调度至最近的边缘节点,以实现负载均衡和低延迟访问。固定IP后,用户始终连接到同一节点,可能无法利用CDN的地理优选调度,导致访问速度变慢或遇到特定区域的内容限制。对于使用全球CDN的网站(如Google、YouTube),固定IP的效果可能适得其反,需谨慎评估。
配置维护成本与过期IP的清理
随着时间推移,配置文件中可能积累大量不再需要或已失效的固定IP条目,若不及时清理,可能造成部分网站访问异常。用户应定期审查always-ip-address列表,通过实际访问测试验证每个条目的有效性,移除过期内容。建议在配置中为每条记录添加注释,记录添加日期和用途,便于后续维护。
与其他相关功能的联动与对比
always-ip-address与skip-proxy的配合
当skip-proxy将某域名设为直连后,always-ip-address对该域名不再生效,因为直连流量完全绕过Shadowrocket的代理处理。若用户希望同时固定IP并走代理,需确保该域名的分流规则为PROXY,而非DIRECT。两者配合使用时,代理流量使用固定IP,直连流量使用系统DNS解析,实现了精细化的流量管理。
与DNS服务器的优先级关系
always-ip-address的优先级高于任何DNS服务器配置,包括Shadowrocket中设置的DNS和系统DNS。只要该参数匹配了请求的域名,Shadowrocket直接使用预设IP,完全不发起DNS查询。这意味着即使DNS服务器故障或配置错误,固定IP仍能正常工作,用户可将此作为DNS故障时的备用访问通道。
与bypass-system的协同使用
bypass-system控制系统服务是否走代理,而always-ip-address仅对通过代理隧道的流量生效。若系统服务直连(bypass-system = true),即使为其域名配置了always-ip-address,该规则也不会生效。用户需理解两者的作用范围差异,避免因误解造成系统服务配置无效。
验证与调试方法
通过访问日志确认IP固定是否生效
开启Shadowrocket的详细日志功能后访问目标域名,在日志中搜索该域名的连接记录。若成功应用了always-ip-address,日志会显示“using fixed address”或类似字样,并附带配置中指定的IP地址。若日志显示“resolved to xxx”则说明DNS解析仍在进行,需检查参数是否正确定义并已加载。
使用curl或终端工具直接测试
在iOS设备上安装iSH或使用其他终端工具,执行curl -v 域名查看连接目标IP。若返回的IP与always-ip-address中配置的一致,则说明生效;若为其他IP,则需检查配置加载状态或确认该域名的代理规则是否为PROXY。同时观察连接时间,若省去DNS解析过程,连接建立时间应有明显缩短。
多DNS工具交叉验证的正确IP
在配置固定IP前,通过多个公共DNS(如1.1.1.1、8.8.8.8和Google DNS)分别查询目标域名的解析结果,确认返回的IP是否一致且稳定。若不同DNS返回不同IP,说明该域名使用了智能DNS调度,固定IP可能产生副作用。此时应谨慎使用该功能,或仅固定所有DNS均返回的同一IP。
常见问题FAQ
配置always-ip-address后网站无法打开是什么原因
通常因为固定的IP地址已失效或该IP对应的服务已下线。用户应重新查询域名当前正确的IP并更新配置。也可能是该域名使用了HTTPS且证书与固定IP不匹配(如多域名证书),此时浏览器会报证书错误。建议优先使用域名访问而非固定IP,仅在DNS污染严重时采用此方案。
能否为同一域名配置多个IP实现故障转移
always-ip-address目前不支持在同一域名后配置多个IP地址以实现自动故障转移,仅能指定单个IP。若需实现多IP冗余,用户可手动在配置文件中注释切换,或使用其他支持多IP轮询的代理工具。Shadowrocket的设计偏好简洁的单一映射,如需高可用性建议配合节点策略组实现。
always-ip-address对直连流量是否生效
不生效。该参数仅作用于通过Shadowrocket代理隧道转发的流量。若目标域名在分流规则中被设置为DIRECT直连,则always-ip-address配置无效,流量将使用系统DNS或hosts解析。用户需确保目标域名的规则为PROXY,才能使固定IP生效。