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

6 天前
 TashinV
如题,打开 Surge 的增强模式之后导致内网的 VLAN 不通,vlan1 网段下的电脑无法访问 vlan2 网段下的 NAS 。
配置文件里添加 bypass-tun = vlan1/24, vlan2/24 也不起效果。
求大神的解决办法!
528 次点击
所在节点    Surge
10 条回复
TashinV
5 天前
目前两个网段之间都无法互相访问,一 ping 就 timeout ,traceroute 返回的是 surge 虚拟网卡的 198.18.0.2 地址…
XunzhiJun
5 天前
你是用 mac 做路由?加上指定 interface 的规则:
[Proxy]
P_VLAN1 = direct, interface=vlan1
[Rule]
IP-CIDR,vlan1/24,P_VLAN1
TashinV
5 天前
@XunzhiJun
不是 Mac 做路由呢,路由是 udm pro max 。
Mac 开 surge 是组了 wireguard 。surge 的配置文件里面做了 wireguard 策略组,我看了一下 surge 日志,在打开增强模式的情况下,发现使用配置了 wg 的 surge.conf 就无法互通内网,走的是 wg 隧道,但是在打开增强模式的情况下使用无 wg 配置的 surge.conf (除了 wg 配置之外其他的配置都一样)是走的 skip proxy ,应该是直连,这样情况下就可以互通内网。
不知道问题出在哪里……折腾几天了
XunzhiJun
4 天前
@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
4 天前
@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
2 天前
@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
2 天前
@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
2 天前
@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
2 天前
@XunzhiJun
看明白您的思路了,简单说就是增加一个规则:内网下走 direct 。
我回家试试看。
另外问一下:您回复中的 192.168.1.0/23 是不是 typo ?应该是 192.168.1.0/24 ?
XunzhiJun
1 天前
@TashinV 是我搞错了,我自己配网段习惯从偶数开始配,习惯性把 192.168.1.0/23 想成{192.168.1.0/24, 192.168.2.0/24}两段合并了。。。192.168.0.0/23 才是{192.168.0.0/24, 192.168.1.0/24}合并。192.168.1.0/24 和 192.168.2.0/24 要分开写,或者如果你对{192.168.0.0/24, 192.168.3.0/24}这两段没有特别要求的话,可以写成 192.168.0.0/22 (相当于{192.168.0.0/24, 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24}合并,只是为了把 192.168.1.0/24 ,192.168.2.0/24 合并成一条规则,看起来简洁一些)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1101124

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX