skip-proxy参数的功能定位与作用机制
代理排除列表的核心用途
skip-proxy是Shadowrocket配置文件中用于指定不经过代理的目标地址列表,它的作用是让特定IP段或域名的流量完全绕过代理隧道,直接通过本地网络发出。这个参数优先级高于所有分流规则,属于预过滤机制——匹配该列表的流量连规则引擎都不会进入,直接被标记为直连。用户可以将其理解为全局性的“白名单直连”配置。
与分流规则中DIRECT策略的区别
分流规则中的DIRECT策略在规则引擎内部按顺序匹配,而skip-proxy在规则处理之前生效。这意味着即使规则列表中将某域名设置为PROXY,若该域名的IP地址落在了skip-proxy指定的IP段内,它仍会被强制直连。这确保了局域网和链路本地通信绝对不走代理,不受用户自定义规则的干扰,保障了基础网络服务的可用性。
参数在配置文件中的书写格式
skip-proxy位于配置文件的[General]段落,支持以逗号分隔的多个IP段或域名。典型写法为skip-proxy = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, localhost, *.local。用户可在此列表中添加或删除条目,修改后需保存并重新加载配置使变更生效。该列表是全局性的,对所有节点和场景统一适用,无法针对单个节点单独设置。
默认配置的IP段详细解析
局域网私有地址段(RFC 1918)
默认配置中包含了三大私有IP地址段:10.0.0.0/8(A类)、172.16.0.0/12(B类)、192.168.0.0/16(C类)。这些地址段被IANA预留用于局域网内部通信,不经过公网路由。将它们加入skip-proxy确保了用户在访问路由器管理界面(如192.168.1.1)、局域网内NAS设备或网络打印机时,流量不会误入代理隧道,避免了因代理导致的内网访问失败或延迟增加。
链路本地地址与回环地址
默认配置还包含169.254.0.0/16(链路本地地址)和127.0.0.0/8(回环地址)。链路本地地址用于设备在没有DHCP服务时自动配置IP,常见于临时网络连接场景。回环地址指向设备自身,用于本地进程间通信。这两类地址不走代理是确保设备基础网络功能正常运行的前提,任何试图代理这些地址的流量都会造成网络栈的混乱和故障。
多播与广播地址段的处理
224.0.0.0/4(多播地址)和255.255.255.255/32(受限广播)同样默认被skip-proxy包含。多播用于设备发现和服务公告等局域网功能,广播地址则用于ARP请求和DHCP发现等基础协议。将这些地址排除在代理之外是保证局域网内设备能够相互发现和通信的必要措施,否则代理的干扰可能导致网络邻居和AirDrop等功能失效。
IPv6链路本地地址的默认配置
在支持IPv6的配置中,fe80::/10(IPv6链路本地地址)也被默认加入skip-proxy列表。该地址段与IPv4的169.254.0.0/16功能类似,用于同一链路上设备间的自动地址配置和通信。包含此段确保了IPv6环境下局域网功能同样不受代理干扰,保障了基于IPv6的本地服务发现和邻居发现协议的正常运作。
默认配置的设计初衷与必要性
避免代理干扰本地网络基础设施
路由器管理界面、NAS设备、网络打印机等处于局域网内的基础设施,其IP地址属于私有地址段。若不将这些地址排除在代理之外,当用户尝试访问路由器后台或向打印机发送任务时,请求会被错误地导向代理服务器,而代理服务器无法路由到内网地址,导致访问失败。skip-proxy的默认配置从根本上杜绝了这类问题,保障了内网管理的可用性。
防止DNS与DHCP等基础协议中断
DHCP、ARP、mDNS等网络基础协议依赖于多播和广播通信,这类流量设计上就不应经过任何路由转发,更不可能通过代理隧道传输。若广播请求被送入代理隧道,代理服务器无法解析这些二层协议数据,将直接丢弃或返回错误,导致设备无法获取IP地址或发现局域网内的服务。默认包含多播和广播地址是维持网络栈完整性的底线要求。
降低代理隧道的不必要负载
局域网内大量设备频繁发送ARP请求和NetBIOS广播包,这些数据包数量大但信息价值低。若未将其排除在代理之外,代理隧道将被这些毫无意义的局域网广播流量淹没,消耗宝贵带宽和节点连接资源。skip-proxy默认排除这些流量,实质上是为代理隧道减负,让节点资源专注于处理有实际价值的公网请求,提升整体效率和响应速度。
用户自定义skip-proxy的实用场景
添加公司内网或VPN专用IP段
在办公环境中,公司内网IP段(如172.18.0.0/16)和远程办公VPN分配的虚拟IP段(如10.10.0.0/16)需要直连才能访问内部资源。用户应在skip-proxy中添加这些自定义IP段,确保访问企业内部系统、GitLab、知识库等站点时不被代理干扰。添加后需测试内网资源访问是否恢复正常,并确认分流规则不受影响。
排除特定游戏服务器或流媒体CDN
部分游戏服务器和流媒体CDN节点位于特定IP段,代理访问可能触发风控或被限速。用户可将这些IP段加入skip-proxy,让游戏或视频流量直接走本地网络,降低延迟和丢包率。但需注意,此操作会使这些流量的真实IP暴露,仅适用于不涉及隐私敏感且本地网络质量优于代理的场景。
Docker与虚拟化环境的特殊IP段处理
使用Docker for Mac或Parallels等虚拟化工具时,虚拟网卡分配的IP段(通常为192.168.64.0/24或192.168.65.0/24)也需要加入skip-proxy。否则容器或虚拟机中的网络请求可能被Shadowrocket拦截,导致容器内应用无法正常通信。用户可通过ifconfig命令查看虚拟网卡IP范围,精准添加到列表中。
修改skip-proxy的注意事项与验证
编辑配置文件时的语法严谨性
修改skip-proxy时,多个IP段和域名之间必须以英文逗号加空格分隔(如192.168.0.0/16, 10.0.0.0/8)。语法错误(如遗漏逗号、多余空格或中文字符)会导致整行配置失效,所有流量可能全部走代理或全部直连。保存修改后务必在Shadowrocket的配置编辑器中检查语法高亮是否正常,确保修改正确无误。
添加后验证流量是否按预期直连
修改skip-proxy后,用户可通过访问目标IP的网页或ping命令测试流量走向,同时结合Shadowrocket的日志功能查看该请求的处理决策。日志中若显示“direct”或“skip-proxy matched”则说明配置生效,流量已直连;若显示“proxy”或“relay”则说明匹配失败,需检查IP段格式是否正确。验证是避免误配置导致意外行为的关键步骤。
与订阅更新的冲突处理策略
若用户使用的是远程订阅配置文件,skip-proxy的自定义修改可能在订阅更新时被覆盖。用户需在Shadowrocket中创建本地覆盖规则,或将自定义IP段添加到独立的配置文件中并设置为高优先级加载。最稳妥的方式是导出订阅配置为本地文件后修改,再切换至该本地配置,使自定义内容不受远程更新影响。
与相关参数的区分与协同
skip-proxy与bypass-system的区别
skip-proxy针对目标IP段/域名进行排除,控制的是“发往哪些地址的流量直连”;bypass-system则控制“系统服务是否走代理”,面向的是流量发起方(系统进程 vs 用户应用)。两者作用维度不同,相互独立可同时生效。例如,即使bypass-system = true让系统服务直连,若系统服务访问的地址不在skip-proxy列表中,该请求仍可能通过其他规则进入代理。
skip-proxy与bypass-tun的关系
bypass-tun是控制VPN虚拟网卡的路由策略,决定哪些流量被送入TUN接口。skip-proxy作用于更高的应用层,在流量进入TUN之前就已进行排除。两者配合使用可实现从网络层到应用层的双层过滤,bypass-tun排除IP段(如避免路由冲突),skip-proxy排除特定目标地址(如确保内网访问不走代理),共同构建精细化的流量控制体系。
参数优先级顺序的实际影响
流量处理的优先级从高到低依次为:skip-proxy → bypass-tun → 分流规则 → 全局路由模式。这意味着skip-proxy拥有最高优先级,匹配的流量完全绕过后续所有处理环节。用户修改skip-proxy时需意识到它的“最高级”身份,避免将本应代理的地址误加入列表而导致隐私泄露,或因优先级过高覆盖了预期的代理策略。
常见问题FAQ
默认skip-proxy包含了哪些IPv6地址段
默认配置包含fe80::/10(链路本地地址)和::1/128(IPv6回环地址)。与IPv4同理,这些地址用于本地链路通信和进程间通信,必须走直连。若用户使用纯IPv6环境访问公网,这些地址段之外的IPv6流量仍会正常进入代理隧道,不受skip-proxy默认配置的影响。
添加内网IP段到skip-proxy后仍然走代理是什么原因
可能原因包括:IP段格式书写错误(如漏写子网掩码)、配置未保存或未重新加载、目标地址使用了域名而非IP导致域名解析未命中IP段匹配。建议先用目标IP直接访问测试,若IP直连走代理则检查格式,若IP直连正常但域名访问走代理则在DNS或域名规则层面排查。
能否在skip-proxy中添加域名而非IP段
可以。skip-proxy支持直接填写域名(如*.local, nas.company.com)。但域名匹配效率低于IP段匹配,且涉及DNS解析可能引入额外延迟。建议优先使用IP段,仅在IP地址不固定时才考虑域名方式。添加域名后可通过日志确认匹配是否成功。
