V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
codingKingKong
V2EX  ›  宽带症候群

windows 系统代理和 VPN(路由表方式)的优先级谁高?

  •  
  •   codingKingKong · 240 天前 · 1596 次点击
    这是一个创建于 240 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前我使用了代理软件, 模式是 system proxy, 配置好之后, 我发现它的实现方式是在 windows 11 配置的代理中配置了代理来实现的. 同时我打开了 cisco anyconnect 来访问公司网络, 我通过搜索, 发现它的实现方式是通过增加虚拟网卡+路由表的方式, 来实现不同的目标 ip 走不同的虚拟网卡来实现的. 我的问题是: 现在我两个都打开了, 如果有一个网络请求, 那么它会先走系统代理配置呢? 还是会先走路由表配置呢?

    8 条回复    2024-04-28 18:16:54 +08:00
    smartruid
        1
    smartruid  
       240 天前
    先走系统代理
    javaluo
        2
    javaluo  
       239 天前
    gpt4 和 claude 说先路由表
    HarrisIce
        3
    HarrisIce  
       239 天前
    应用层的比网络层的优先,系统代理始终会更早一步。

    举几个例子,如果你开了系统代理,代理服务器 IP 是你的 VPN 内网里的某个 IP ,用到代理的时候,浏览器会发起代理连接,这个连接的数据包会路由到你的 VPN 里,最后发到你内网里处理,这个过程里它先走了系统代理然后会走路由甚至还走了你 VPN 的路由。如果你浏览器打开你 VPN 内网的 IP ,这个 IP 如果不在浏览器设置的代理排除列表,就会走代理服务器,如果刚好你的代理服务器是本地( 127.0.0.1 )的 xxx 软件,刚好你本地的代理服务器代理发起连接时认为这不是个需要加速的 IP ,它代理出来的流量仍然会走你的 VPN (因为它发起了连接 IP 是你内网的 IP ,就路由到你的 VPN 虚拟网卡了),你就可以访问内网成功,但是如果被认为是个需要加速的 IP ,就加密发到 xxx 软件的服务器去了,最后你这个访问内网就不通了。

    详细的说,这两个概念不同。系统代理是个应用层的玩意,就一个实现 SOCK5 、HTTP 之类的前置代理协议的服务而已,VPN 用的那个路由表是个网络层( L3 )的概念,两个东西不一样。

    [系统代理] 需要你的浏览器等软件支持代理协议,你才可以走这个代理。在你浏览器配置了系统代理时,会填写一个代理服务器地址(例如 127.0.0.1:1080 ,或者 PAC 文件,但是最后还是解析出代理服务器地址)。当你打开网页的时候,浏览器就会连接这个代理服务器,传输代理协议头和你网页的请求,这个连接过程就会创建一个 TCP 连接,会查路由表发到代理服务器(如果代理服务器是 127.0.0.1 ,就路由到本地,如果是外部 IP ,就路由出去),代理服务器收到之后再自己再代理请求。

    [VPN] VPN 客户端在你系统上路由表上安装了控制端下发的几条路由,把你的 IP 数据包直接路由到它的虚拟网卡里,软件中能接到虚拟网卡来的包,软件处理把你的 IP 数据包打封装发到 VPN 服务器,然后 VPN 服务器解封装,就在它的网络里发走了。
    feunterban
        4
    feunterban  
       239 天前
    @javaluo 当您在 Windows 11 上同时使用了系统代理(如某个代理软件设置的系统代理)和 Cisco AnyConnect (通过虚拟网卡+路由表方式工作)时,网络请求的流向主要取决于操作系统如何处理这些配置以及特定请求的目标 IP 。

    ### 一般规则:

    1. **系统代理**:系统代理通常影响所有或大多数出站的 HTTP 和 HTTPS 请求。如果一个应用遵循系统的代理设置,它发送的请求会首先尝试通过在系统代理设置中指定的代理服务器转发。

    2. **路由表和虚拟网卡**:Cisco AnyConnect 添加的虚拟网卡和修改的路由表会影响基于目标 IP 的路由决策。操作系统会根据路由表决定通过哪个网络接口(包括物理网卡和虚拟网卡)发送特定的网络包,并不局限于 HTTP/HTTPS 请求。

    ### 实际处理顺序:

    - **非 HTTP/HTTPS 请求**:对于非 HTTP/HTTPS 的网络请求,比如 ICMP ( ping )、SMTP (邮件发送协议)等,这类请求不会考虑系统代理设置,直接根据路由表进行路由。这种情况下,Cisco AnyConnect 的虚拟网卡和路由表设置将起主导作用。

    - **HTTP/HTTPS 请求**:对于 HTTP/HTTPS 请求,如果应用程序遵循系统代理设置,它会首先尝试通过系统配置的代理发送请求。但是,如果这个代理软件或者系统代理设置有条件地将某些请求直接发送(比如根据目的地 IP 或域名排除代理),那么这些请求会回到正常的路由决策过程中,任由 Cisco AnyConnect 的路由表设置来决定如何发送这些请求。

    ### 特殊注意:

    - **优先级和冲突**:在实践中,绝大部分情况下,系统代理对 HTTP/HTTPS 生效,而特定路由( Cisco AnyConnect 影响的)对所有流量生效。如果有冲突(例如,系统代理尝试将流量导向一个不通过 VPN 访问的外部代理服务器),最终流量的去向还可能取决于具体的应用程序行为、代理服务器配置以及 VPN 客户端的高级设置(比如,强制所有流量都经过 VPN )。

    ### 结论:

    简而言之,一般情况下,HTTP/HTTPS 请求会先尝试走系统代理配置,其他类型的流量按照路由表决策走相应的网卡。但实际上,特定的网络请求如何被处理,会受到多种因素的影响,包括应用是否遵循系统代理、代理设置本身的详细规则,以及 VPN 客户端的配置。

    若有更复杂的网络环境或需求,可能需要具体分析,甚至手动调整设置以达到预期的网络流量路由效果。
    v8p
        5
    v8p  
       239 天前
    系统代理和路由表是两个层面的东西,走不走系统代理取决于应用程序,具体通过哪个网关连接到系统代理(或者跳过系统代理直接连接到服务器)取决于路由表。
    LisaSue
        6
    LisaSue  
       238 天前
    我觉得是路由表,但是刚才同时使用 openvpn 和 v2ray,居然是 v2 代理优先.
    povsister
        7
    povsister  
       238 天前 via iPhone
    这是两个层面的东西
    codingKingKong
        8
    codingKingKong  
    OP
       237 天前
    我描述一下我的理解, 由于我不熟悉 windows 端的开发, 所以不一定对.

    假设我有一个应用程序 A, A 程序存在 3 个按钮, 分别是 abc.

    - 当我点击按钮 a 时, 它会通过调用 windows sdk, 发送一个 http, 那么大概率它会遵守 windows 系统的代理规范, 即按照 7 层模型一层层的走.
    - 当我点击按钮 b 时, 它没有使用例如.net 这样的 framework, 而是自己实现了一个 tcp 请求, 但是它仍然在 windows 开发的范围内, 只不过调用了更底层的 api, 那么它可能绕过了系统代理规范, 也就是说会走 VPN 的逻辑
    - 当我点击按钮 c 时, 它甚至没有调用 windows 系统的 api, 而是直接调用了网卡驱动, 实现了发送网络数据包, 那么这个时候, VPN 的软件也不在它的管辖范围了.

    而这 3 种情况, 同时存在我的软件 A 内 ;)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2695 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 07:48 · PVG 15:48 · LAX 23:48 · JFK 02:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.