菜单

代理处理

相关源文件

目的与范围

本文档详细介绍了v2rayN如何管理跨不同操作系统的代理连接和系统代理设置。它涵盖了配置系统范围的代理设置、处理代理进程以及管理代理配置的核心机制。有关服务器配置管理的信息,请参阅配置管理

系统架构

高级代理管理架构

来源: ServiceLib/Handler/SysProxy/SysProxyHandler.cs1-98 ServiceLib/Handler/SysProxy/ProxySettingWindows.cs1-359 ServiceLib/Handler/SysProxy/ProxySettingOSX.cs1-37 ServiceLib/Handler/CoreHandler.cs1-409

代理配置流程

来源: ServiceLib/Handler/SysProxy/SysProxyHandler.cs7-67 ServiceLib/Handler/SysProxy/ProxySettingWindows.cs10-34 ServiceLib/Handler/SysProxy/ProxySettingWindows.cs38-77 ServiceLib/Handler/SysProxy/ProxySettingOSX.cs7-22

系统代理管理

v2rayN通过统一的接口和特定于平台的实现提供跨平台的系统代理配置。

代理类型

系统支持多种代理设置类型,定义在ESysProxyType枚举中

代理类型描述
ForcedChange强制系统使用已配置的代理(全局代理模式)
ForcedClear强制系统清除代理设置(直接连接)
Pac使用代理自动配置脚本(仅限 Windows)
Unchanged保持系统代理设置不变

跨平台实现

v2rayN检测操作系统,并将代理设置命令路由到相应的实现

来源: ServiceLib/Handler/SysProxy/SysProxyHandler.cs7-67 ServiceLib/Common/Utils.cs797-805

Windows 实现

在 Windows 上,v2rayN 可以通过以下方式配置代理设置:

  1. Windows 注册表修改
  2. WinINet API 用于配置 Internet 连接选项
  3. PAC(代理自动配置)脚本

代理设置同时应用于 LAN 和拨号连接

来源: ServiceLib/Handler/SysProxy/ProxySettingWindows.cs10-97 ServiceLib/Handler/SysProxy/ProxySettingWindows.cs205-236

Linux 和 macOS 实现

对于 Linux 和 macOS,v2rayN 使用 shell 脚本来配置系统代理设置

  1. Linux:创建并执行一个 shell 脚本,该脚本设置环境变量并配置桌面设置
  2. macOS:使用 networksetup 命令来配置代理设置

来源: ServiceLib/Handler/SysProxy/ProxySettingOSX.cs7-36 ServiceLib/Common/Utils.cs560-596 ServiceLib/Common/Utils.cs838-855

核心代理进程管理

CoreHandler 类负责管理处理网络流量的核心代理进程。

代理进程生命周期

来源: ServiceLib/Handler/CoreHandler.cs66-100 ServiceLib/Handler/CoreHandler.cs154-180 ServiceLib/Handler/CoreHandler.cs184-221 ServiceLib/Handler/CoreHandler.cs239-314

核心进程配置

CoreHandler 为不同的代理核心生成适当的配置,并使用正确的参数启动进程

来源: ServiceLib/Handler/CoreHandler.cs184-196 ServiceLib/Handler/CoreHandler.cs239-314 ServiceLib/Handler/AppHandler.cs215-245

TUN 模式和管理员权限

v2rayN 支持 TUN 模式以实现系统范围的透明代理,这通常需要管理员权限

来源: ServiceLib/Handler/CoreHandler.cs87-95 ServiceLib/Handler/CoreHandler.cs228-235 ServiceLib/Handler/CoreHandler.cs326-406

代理协议和配置

v2rayN 支持多种代理协议,每种协议都有特定的配置要求

支持的代理协议

系统支持 Global.ProtocolSharesGlobal.ProtocolTypes 中定义的各种代理协议

协议共享前缀类型标识符
VMessvmess://vmess
Shadowsocksss://shadowsocks
SOCKSsocks://socks
HTTP-http
VLESSvless://vless
Trojantrojan://trojan
Hysteria2hysteria2://hysteria2
TUICtuic://tuic
WireGuardwireguard://wireguard

来源: ServiceLib/Global.cs161-186

传输协议

每个代理连接都可以使用各种传输协议进行隧道传输

来源: ServiceLib/Global.cs251-261 ServiceLib/Handler/Fmt/BaseFmt.cs20-150

安全和流设置

系统支持各种代理安全选项

  1. TLS/SSL:标准 TLS 加密
  2. Reality:Xray-core 中的高级安全协议
  3. 流控制:用于 XTLS 模式
  4. 指纹识别:浏览器指纹识别选项
  5. 自定义 SNI & ALPN:用于 TLS 自定义

来源: ServiceLib/Global.cs243-249 ServiceLib/Global.cs302-315 ServiceLib/Handler/Fmt/BaseFmt.cs20-62

系统集成

自动启动注册

v2rayN 可以将自身注册为与操作系统一起自动启动

  • Windows:使用注册表项 HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • Linux:创建自动启动配置文件
  • macOS:类似于 Linux

来源: ServiceLib/Global.cs61-62

系统代理例外

系统为每个平台提供默认的例外列表,以绕过本地地址的代理

# Windows Default Exceptions
localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*

# Linux/macOS Default Exceptions
localhost,127.0.0.0/8,::1

来源: ServiceLib/Global.cs63-64

PAC 模式支持

对于 Windows,v2rayN 支持 PAC(代理自动配置)模式

来源: ServiceLib/Handler/SysProxy/SysProxyHandler.cs91-97 ServiceLib/Handler/SysProxy/SysProxyHandler.cs56-60

进程清理和应用程序生命周期

v2rayN 在应用程序退出时确保正确清理代理进程

来源: v2rayN/App.xaml.cs68-73 ServiceLib/Handler/CoreHandler.cs154-180

升级流程和代理处理

升级 v2rayN 时,AmazTool 工具会处理此过程,同时确保代理设置得到妥善处理

来源: AmazTool/UpgradeApp.cs9-115 v2rayN/App.xaml.cs25-47