V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拼车信息请发到 /go/cosub 节点。

如果没有发送到 /go/cosub,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
TashinV
V2EX  ›  Surge

打开 Surge 的增强模式之后导致内网的 VLAN 不通,求解决办法

  •  
  •   TashinV · 3 天前 · 441 次点击
    如题,打开 Surge 的增强模式之后导致内网的 VLAN 不通,vlan1 网段下的电脑无法访问 vlan2 网段下的 NAS 。
    配置文件里添加 bypass-tun = vlan1/24, vlan2/24 也不起效果。
    求大神的解决办法!
    第 1 条附言  ·  3 天前
    目前两个网段之间都无法互相访问,一 ping 就 timeout ,traceroute 返回的是 surge 虚拟网卡的 198.18.0.2 地址……
    第 2 条附言  ·  2 天前
    Surge 里面配置了 Wireguard 节点信息用于组网,服务端位于家里的路由器( UDM Pro Max ,Unifi OS 内置了 Wireguard Server )。
    Surge 连接规则中定义了使访问 192.168.1.0/24 网段、192.168.2.0/24 网段的流量走 Wireguard:

    [Rule]
    IP-CIDR,192.168.1.0/24, Wireguard
    IP-CIDR,192.168.2.0/24, Wireguard

    我的理解是这样写,电脑在外网下才会触发流量经 Wireguard 连回家,不知道有没有理解错误。

    再次测试了一下,目前是这个情况:

    A. 使用带 Wireguard 节点配置的 Surge.conf:
    1. 蜂窝网络下,均可通过 Wireguard 隧道回家访问 192.168.1.0/24 网段、192.168.2.0/24 网段;
    2. 办公室 Wi-Fi 下,均可通过 Wireguard 隧道回家访问 192.168.1.0/24 网段、192.168.2.0/24 网段;
    3. 在自家内网中,只可访问当前设备所在的网段,比方本机 IP 地址是 192.168.1.8 ,那么仅可访问 192.168.1.0/24 网段下的设备,无法访问 192.168.2.0/24 网段下的设备。

    B. 使用无 Wireguard 节点配置的 Surge.conf:
    1. 外网下,均不可走 Wireguard 隧道回家;
    2. 内网下,本机可以访问所有网段( 192.168.1.0/24 网段、192.168.2.0/24 网段)。
    9 条回复    2025-01-02 19:39:03 +08:00
    TashinV
        1
    TashinV  
    OP
       3 天前 via iPhone
    目前两个网段之间都无法互相访问,一 ping 就 timeout ,traceroute 返回的是 surge 虚拟网卡的 198.18.0.2 地址…
    XunzhiJun
        2
    XunzhiJun  
       3 天前   ❤️ 1
    你是用 mac 做路由?加上指定 interface 的规则:
    [Proxy]
    P_VLAN1 = direct, interface=vlan1
    [Rule]
    IP-CIDR,vlan1/24,P_VLAN1
    TashinV
        3
    TashinV  
    OP
       3 天前 via iPhone
    @XunzhiJun
    不是 Mac 做路由呢,路由是 udm pro max 。
    Mac 开 surge 是组了 wireguard 。surge 的配置文件里面做了 wireguard 策略组,我看了一下 surge 日志,在打开增强模式的情况下,发现使用配置了 wg 的 surge.conf 就无法互通内网,走的是 wg 隧道,但是在打开增强模式的情况下使用无 wg 配置的 surge.conf (除了 wg 配置之外其他的配置都一样)是走的 skip proxy ,应该是直连,这样情况下就可以互通内网。
    不知道问题出在哪里……折腾几天了
    XunzhiJun
        4
    XunzhiJun  
       2 天前   ❤️ 1
    @TashinV
    那我推测情况是这样的:
    在内网时,由于 Mac 本身有一个 192.168.1.8 ,所以访问 192.168.1.0/24 时没有被 surge 处理。而访问 192.168.2.0/24 会走 Wireguard 。这说明 Mac 在内网时不能正确连接 Wireguard 。
    所以解决思路有两个:
    1.通过修改配置使得 Mac 在内网也能连上 Wireguard
    2.如果在内网 IP-CIDR,192.168.2.0/24,DIRECT 能访问到 192.168.2.0/24 的话那么
    [Proxy Group]
    # 通过当前路由器地址选择代理方式:
    PG_VLAN2 = subnet, default=Wireguard, "ROUTER:192.168.1.x"=DIRECT
    # 或者通过 WiFi 的 SSID:
    # PG_VLAN2 = subnet, default=Wireguard, "SSID:家里的 WiFi"=DIRECT
    [Rule]
    IP-CIDR,192.168.2.0/24,PG_VLAN2
    TashinV
        5
    TashinV  
    OP
       1 天前 via iPhone
    @XunzhiJun
    1. 内网 IP-CIDR,192.168.2.0/24,DIRECT 能访问到 192.168.2.0/24 ,但是这样的话就无法在内网通过 wireguard 访问另一处地方的内网了。

    2. 目前已经有一条 rule 了:
    IP-CIDR,192.168.1.0/24, Wireguard
    IP-CIDR,192.168.2.0/24, Wireguard
    再加
    IP-CIDR,192.168.2.0/24,PG_VLAN2
    这一条会不会跟上面的冲突?
    XunzhiJun
        6
    XunzhiJun  
       11 小时 3 分钟前   ❤️ 1
    @TashinV 你的意思是你在另一处也有 192.168.2.0/24 这个段,并且两个地方是通过 Wireguard 连接的?如果你的 Mac 在内网用 IP-CIDR,192.168.2.0/24,DIRECT (不配置 IP-CIDR,192.168.2.0/24, Wireguard 这条规则)访问不到另一处的 192.168.2.0/24 ,那你 ["不用增强模式", "使用不带 Wireguard 的 surge.conf", "192.168.1.0/24 下的其它机器在不配置 Wireguard 的情况下"] 应该也访问不到另一处的 192.168.2.0/24 啊。IP-CIDR,192.168.2.0/24,DIRECT 的行为和直接不让 surge 接管 192.168.2.0/24 的行为应该是一致的。那这种情况你应该检查你路由器的配置,按理说把本地发往 192.168.2.0/24 的数据发到本地,把发往另一处的 192.168.2.0/24 的数据通过 Wireguard 发往另一处,这应该是路由器(配置了 Wireguard )的行为。并且你本地的 192.168.2.0/24 设备要访问另一处 192.168.2.0/24 的设备,也需要路由器的 Wireguard 处理,那这些设备的互联有没有问题?
    TashinV
        7
    TashinV  
    OP
       6 小时 40 分钟前
    @XunzhiJun #6
    目前是这样的场景:

    Surge 里面配置了 Wireguard 节点信息用于组网,服务端位于 2 个家里的路由器( UDM Pro Max 和 Cloud Gateway Ultra ,Unifi OS 内置了 Wireguard Server )。
    Surge 连接规则中定义了使访问 A 家的 192.168.1.0/24 网段、192.168.2.0/24 和 B 家的 192.168.8.0/24 网段的流量都走 Wireguard:

    [Rule]
    IP-CIDR,192.168.1.0/24, Wireguard
    IP-CIDR,192.168.2.0/24, Wireguard
    IP-CIDR,192.168.8.0/24, Wireguard


    再次测试了一下,目前是这个情况:

    A 家的情况:
    A. 使用带 Wireguard 节点配置的 Surge.conf:
    1. 蜂窝网络下,均可通过 Wireguard 隧道回家访问 192.168.1.0/24 网段、192.168.2.0/24 网段;
    2. 办公室 Wi-Fi 下,均可通过 Wireguard 隧道回家访问 192.168.1.0/24 网段、192.168.2.0/24 网段;
    3. 在自家内网中,只可访问当前设备所在的网段,比方本机 IP 地址是 192.168.1.8 ,那么仅可访问 192.168.1.0/24 网段下的设备,无法访问 192.168.2.0/24 网段下的设备。

    B. 使用无 Wireguard 节点配置的 Surge.conf:
    1. 外网下,均不可走 Wireguard 隧道回家;
    2. 内网下,本机可以访问所有网段( 192.168.1.0/24 网段、192.168.2.0/24 网段)。

    B 家的情况:
    A. 使用带 Wireguard 节点配置的 Surge.conf:
    1. 蜂窝网络下,可通过 Wireguard 隧道回家访问 192.168.8.0/24 网段;
    2. 办公室 Wi-Fi 下,可通过 Wireguard 隧道回家访问 192.168.8.0/24 网段;
    3. 在自家内网中,可访问当前设备所在的 192.168.8.0/24 网段。

    B. 使用无 Wireguard 节点配置的 Surge.conf:
    1. 外网下,不可走 Wireguard 隧道回家;
    2. 内网下,本机可以访问 192.168.8.0/24 网段。
    XunzhiJun
        8
    XunzhiJun  
       4 小时 41 分钟前   ❤️ 1
    @TashinV
    那你只需要这样配置就够了啊:
    [Proxy]
    Wireguard=...
    [Proxy Group]
    PG1 = subnet, default=Wireguard, "ROUTER:192.168.1.0/23"=DIRECT
    PG8 = subnet, default=Wireguard, "ROUTER:192.168.8.0/24"=DIRECT
    [Rule]
    # # 使用 PG1 访问 192.168.1.0/24 ,192.168.2.0/24
    IP-CIDR,192.168.1.0/23,PG1
    # # 使用 PG8 访问 192.168.8.0/24
    IP-CIDR,192.168.8.0/24,PG8

    此时:
    A 家:
    1.蜂窝网络下,由于 Mac 不在"ROUTER:192.168.1.0/23"下,所以 PG1 会选择 default=Wireguard 为代理,于是通过 Wireguard 回家访问 192.168.1.0/24 网段、192.168.2.0/24 网段;
    2.办公室 Wi-Fi 下,由于 Mac 不在"ROUTER:192.168.1.0/23"下,所以 PG1 会选择 default=Wireguard 为代理,于是通过 Wireguard 回家访问 192.168.1.0/24 网段、192.168.2.0/24 网段;
    3.在自家内网中,由于 Mac 在"ROUTER:192.168.1.0/23"下,所以 PG1 会选择"ROUTER:192.168.1.0/23"=DIRECT 为代理,于是通过 DIRECT 访问 192.168.1.0/24 网段、192.168.2.0/24 网段;
    4.以上三种情况,由于 Mac 都不在"ROUTER:192.168.8.0/24"下,所以 PG8 会选择 default=Wireguard 为代理,于是通过 Wireguard 回 B 家访问 192.168.8.0/24 网段。

    B 家情况是一样的,不过由于你 Mac 在 B 家时正好能拿到一个 192.168.8.0/24 下的 IP ,所以即使不做额外配置,Mac 访问 192.168.8.0/24 时也能不经过 surge 直连 192.168.8.0/24 。(参考 surge 手册 https://manual.nssurge.com/book/understanding-surge/cn 的 2.2.2 章节,由于 surge 的增强代理模式是在系统创建一个 utun 网卡,并将一条 0.0.0.0/0 路由指向这个 utun ,于是:Mac 发出的数据包,只有从这个 utun 发出的时候,才会被 surge 代理(然后由 surge 处理后再选择别的网卡发出)。而当你 Mac 在别的网卡(例如 en0 )上有一个 IP 地址( 192.168.1.8 )时,系统会存在将 192.168.1.0/24 由 en0 发出的路由规则,于是发往 192.168.1.0/24 的数据会因该路由规则直接被 en0 发出,则不会被 surge 处理。)于是配置可以简化为:
    [Proxy]
    Wireguard=...
    [Proxy Group]
    PG1 = subnet, default=Wireguard, "ROUTER:192.168.1.0/24"=DIRECT
    [Rule]
    IP-CIDR,192.168.2.0/24,PG1
    IP-CIDR,192.168.8.0/24,Wireguard

    如果你在 A 家不能访问 B 家的 192.168.8.0/24 ,或者在 B 家不能访问 A 家的 192.168.1.0/23 ,那你应该检查你的 Wireguard 配置。假设你有若干不同的 Wireguard 配置分别用于不同的网络情况,你也可以通过[Proxy Group]的 subnet 规则,让 surge 按情况选择对应的 Wireguard ,例如:
    [Proxy]
    Wireguard1=...
    Wireguard2=...
    Wireguard3=...
    Wireguard4=...
    [Proxy Group]
    PG1 = subnet, default=Wireguard1, "ROUTER:192.168.1.0/23"=DIRECT, "ROUTER:192.168.8.0/24"=Wireguard2
    PG8 = subnet, default=Wireguard3, "ROUTER:192.168.1.0/23"=Wireguard4, "ROUTER:192.168.8.0/24"=DIRECT
    [Rule]
    IP-CIDR,192.168.1.0/23,PG1
    IP-CIDR,192.168.8.0/24,PG8
    TashinV
        9
    TashinV  
    OP
       1 小时 47 分钟前 via iPhone
    @XunzhiJun
    看明白您的思路了,简单说就是增加一个规则:内网下走 direct 。
    我回家试试看。
    另外问一下:您回复中的 192.168.1.0/23 是不是 typo ?应该是 192.168.1.0/24 ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3122 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:26 · PVG 21:26 · LAX 05:26 · JFK 08:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.