好文集ChatGPT Plus¥119

不买软路由!我把家里的Mac mini变成了旁路由,全家连Wi-Fi就能直接访问外网(Windows也行)

文章目录

连上Wi-Fi就能直接访问外网 · 第2篇

上一篇我分享了最简单的入门方案:用小火箭的「代理共享」,让家里其他设备连上Wi-Fi就能访问外网。

推文链接:

嵌入推文(联网查看)

那个方案胜在简单,但文末我也提到了,它并不是真正的旁路由。实际用下来,主要有两个限制:

  • 只有「认代理设置」的流量才会走代理。浏览器和大部分App没问题,但有些App、游戏会直接无视系统代理。

  • 电视、游戏机这类设备,很多根本没有填代理的地方。

这一篇往前走一步:把家里常开的Mac或Windows电脑变成一台旁路由。不用买新设备,不用刷机,用的就是电脑上现成的代理客户端。

这篇会讲两种用法,可以只用其中一种,也可以两种一起用:

  • 单台设备接入:在设备的Wi-Fi设置里改两项,这台设备的全部流量就交给旁路由处理。

  • 做一个专用Wi-Fi:再加一台闲置的路由器,把它整体接到旁路由上。之后任何设备只要连上这个Wi-Fi就能直接访问外网,设备上不用做任何设置,手机、电视、游戏机、来家里的朋友都一样。

第二种才是「连上Wi-Fi就能访问外网」最省心的形态,也是我自己现在在用的方式。

配置完成后的效果如下:手机上不用开任何代理App,只需连接wifi,出口IP就变成节点的IP。

简单介绍:什么是旁路由

正常情况下,家里所有设备的流量都是直接交给主路由,再由主路由发到外网:

手机 → 主路由 → 外网

旁路由的做法是,在局域网里找一台设备充当「中转站」。其他设备把自己的网关指向它,流量先到这台设备,由它决定走代理还是直连,再交给主路由发出去:

手机 → 旁路由(Mac mini)→ 主路由 → 外网

它不替代主路由,只是挂在主路由旁边,所以叫旁路由。主路由不用做任何改动,哪台设备想用,就把哪台设备的网关指过去。

以我家的网络为例

我家的网络结构是这样的:光猫接主路由,主路由接交换机,交换机下面挂着Mac mini、Windows电脑、NAS等有线设备,同时还接了两台路由器:一台是子路由,和主路由组成有线Mesh(有线回程);另一台是电信送的路由器,和主路由组不了Mesh,独立使用。

文章配图

从图里可以看出几件事:

  • 旁路由不需要改任何接线。 Mac mini原来插在哪个网口,现在还插在哪个网口。它在物理上只是交换机下面一台普通的有线设备。

  • 「旁路由」是逻辑关系,不是物理位置。 所谓把设备接到旁路由,只是把这台设备的网关从主路由的IP改成Mac mini的IP,图里的橙色虚线就是这层关系。

  • 有线Mesh不影响使用。 子路由通过有线回程接入后,只负责扩展Wi-Fi覆盖,连在它下面的设备和主路由下的设备处于同一个网段。所以手机不管连的是主路由还是子路由的Wi-Fi,都能把网关指向Mac mini。

  • 流量会在交换机上多走一个来回。 改了网关的设备,流量先到Mac mini,由Clash分流之后,再经交换机交给主路由发出去。这也是我建议旁路由用网线连接的原因。

  • 接入旁路由有两种方式。 方式一是在单台设备上手动改网关;方式二是让一整台路由器把网关指向旁路由,连上它Wi-Fi的设备就都不用单独设置了。方式二放在后面的「让设备连上Wi-Fi就自动生效」一节。

和上一篇的代理共享有什么区别

对比项代理共享(上一篇)电脑做旁路由(本篇)软路由 / OpenWrt(后续)
使用端怎么设置填代理服务器和端口改网关和DNS改网关和DNS,或全家自动生效
接管哪些流量只有走系统代理的流量设备的全部流量设备的全部流量
电视、游戏机大多用不了可以用可以用
需要的设备一台装了小火箭的设备一台常开的电脑一台专门的软路由
上手难度最低中等较高

旁路由的优点

  • 使用端不用装任何App。 只改Wi-Fi里的网关和DNS,手机、平板、电视、游戏机都适用。

  • 接管的是全部流量。 不认系统代理的App和游戏,同样会走旁路由。

  • 不动主路由。 家里的网络结构不变,不想用了把设备改回「自动」就恢复原样。

  • 可以按设备选择。 只有改了网关的设备才走旁路由,其他设备和家人完全不受影响。

  • 零成本。 家里本来就有常开的Mac mini或台式机的话,不用额外花钱。

旁路由的缺点

  • 依赖那台电脑一直在线。 电脑关机、睡眠、重启更新,或者代理客户端退出,指向它的设备都会断网。

  • 每台设备都要手动设置一次。 设备多的话比较繁琐。不过这一点有办法解决,后面我会介绍用一台闲置路由器做「专用Wi-Fi」的方式。

  • 流量多绕了一跳。 所有流量都要先经过那台电脑,电脑走Wi-Fi的话速度和稳定性会打折扣,建议用网线。

  • 电脑毕竟不是专门的网络设备。 系统更新、软件崩溃都可能影响全家上网,稳定性不如专门的软路由。

所以我对这个方案的定位是:家里已经有常开的电脑,想先低成本体验旁路由的效果。 如果用下来觉得离不开,再考虑上专门的软路由,这部分我会放在后面的OpenWrt篇里讲。

原理:其实只做三件事

不管是Mac还是Windows,配置的核心都是下面三步:

  1. 代理客户端开启TUN模式(虚拟网卡模式):接管这台电脑上的全部流量。

  2. 系统开启IP转发:让这台电脑愿意替别的设备转发流量。

  3. 其他设备把网关指过来,并手动设置DNS:流量先到这台电脑,再由代理客户端处理。

客户端我用的是Clash Verge Rev,免费,Mac和Windows的界面几乎一样,下面两个平台的操作可以互相参考。

本文以我自己的环境为例:

项目我的环境
主路由小米路由器,192.168.81.1
旁路由Mac mini,网线连接,192.168.81.172
使用端iPhone,192.168.81.161
专用Wi-Fi路由器(可选)闲置的第三方路由器,上网口192.168.81.200,自己的网段192.168.2.x

你的网段大概率和我不一样(常见的是192.168.1.x、192.168.31.x),照着自己的实际网段填,不要照抄我的数字。

准备工作:给电脑固定一个内网IP

其他设备要把网关指向这台电脑,所以它的IP不能变。一旦变了,所有指向它的设备都会断网。

先在Mac mini上打开「系统设置 → 网络 → 以太网」,记下三个信息:IP地址、子网掩码、路由器。

文章配图

然后登录主路由后台,找到「DHCP静态IP分配」(不同品牌叫法不同,也可能叫IP与MAC绑定),把Mac mini和它现在的IP绑定起来。

文章配图

绑定之后,这台Mac mini每次拿到的都会是同一个IP。

建议旁路由用网线连接主路由。所有设备的流量都要从它这里过一遍,走Wi-Fi的话速度和稳定性都会受影响。

Mac mini配置

第一步:确认Clash Verge本机能正常使用

安装Clash Verge Rev,导入订阅,选好节点。先在Mac mini上打开浏览器,确认它自己能正常访问外网。这一步很重要。如果旁路由自己都上不了外网,后面的设备怎么设置都没用。

第二步:开启虚拟网卡模式(TUN)

在首页的「网络设置」里,切换到「虚拟网卡模式」并打开开关。第一次开启会提示安装服务模式,按提示安装并输入开机密码即可。

开启后会显示「TUN模式已启用,应用将通过虚拟网卡访问网络」。

文章配图

这里要选虚拟网卡模式,而不是系统代理。系统代理只对本机生效,其他设备转发过来的流量它接管不了。

第三步:打开局域网连接和开机自启

进入「设置」页面,确认下面三项:

  • 虚拟网卡模式:开启

  • 开机自启:开启

  • 局域网连接:开启

文章配图

第四步:开启IP转发

macOS默认不会替别的设备转发流量,需要手动打开。在Mac mini上打开终端,执行:

sudo sysctl -w net.inet.ip.forwarding=1

输入开机密码后,看到0 -> 1就说明开启成功。

文章配图

第五步:让IP转发在重启后依然生效

上面那条命令有个问题:Mac重启之后就失效了。 旁路由是要长期运行的,所以需要让它开机自动执行。

在终端里依次执行下面两段命令。第一段是创建一个开机启动项:

sudo tee /Library/LaunchDaemons/com.local.ipforwarding.plist > /dev/null <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.local.ipforwarding</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/sysctl</string>
        <string>-w</string>
        <string>net.inet.ip.forwarding=1</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
EOF

第二段是设置权限并加载:

sudo chown root:wheel /Library/LaunchDaemons/com.local.ipforwarding.plist
sudo chmod 644 /Library/LaunchDaemons/com.local.ipforwarding.plist
sudo launchctl load -w /Library/LaunchDaemons/com.local.ipforwarding.plist

以后重启Mac mini,可以用下面这条命令检查,输出1就说明生效了:

sysctl net.inet.ip.forwarding

文章配图

第六步:别让Mac mini睡着

打开「系统设置 → 能耗」,把下面两项打开:

  • 显示器关闭时,防止自动进入睡眠

  • 断电后自动启动

文章配图

另外,Clash Verge的开机自启需要用户登录之后才会运行。如果家里偶尔会停电,建议在「系统设置 → 用户与群组」里打开自动登录,这样来电后Mac mini能自己恢复到可用状态,不用人去点一下。

到这里,Mac mini这一端就配置完成了。

Windows电脑配置

Windows的思路和Mac完全一样,同样是三件事:开TUN、开转发、别睡眠。区别只在系统设置的位置。

第一步:确认Clash Verge本机能正常使用

安装Clash Verge Rev,导入订阅,先确认这台电脑自己能正常访问外网。

同样需要先记下这台电脑的IP,并在路由器后台做静态绑定。IP可以在「设置 → 网络和Internet → 以太网」里看到。

文章配图

第二步:开启虚拟网卡模式和局域网连接

进入「设置」页面,打开下面几项。第一次开启虚拟网卡模式时,同样需要先安装服务模式。

  • 虚拟网卡模式:开启

  • 系统代理:开启

  • 开机自启:开启

  • 局域网连接:开启

文章配图

第三步:开启IP转发

右键开始菜单,选择「终端(管理员)」,执行:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name IPEnableRouter -Value 1

执行后重启电脑才会生效。

和Mac不同的是,Windows的这个设置写在注册表里,重启后不会丢失,不需要再额外做开机启动项。

文章配图

重启后可以用下面的命令确认,IPv4对应的几行里Forwarding显示Enabled就说明生效了(IPv6的几行显示Disabled是正常的):

Get-NetIPInterface | Select-Object InterfaceAlias, AddressFamily, Forwarding

第四步:检查网络类型和防火墙

打开「设置 → 网络和Internet → 以太网」,把网络配置文件类型改成「专用网络」。公用网络下,Windows防火墙的限制更严格,其他设备的流量可能进不来。这个选项和第一步截图里的IP信息在同一个页面。

第五步:关闭睡眠

打开「设置 → 系统 → 电源」,把「使设备进入睡眠状态」改成「从不」。

文章配图

题外话:不太建议长期用Windows电脑做旁路由

旁路由需要24小时开机,功耗就成了一个绕不开的问题。下面是我用智能插座看到的实时功率,左边是Mac mini所在的插座,右边是Windows电脑所在的插座:

文章配图

左边插座大约14W,而且这是待机状态下Mac mini、电视、音响三台设备加起来的功耗,Mac mini自己用的更少。右边插座上只有一台Windows电脑,大约143W。两边相差10倍左右。

按24小时不关机粗算,左边一个月不到10度电,Windows电脑大约103度。

所以我的建议是:Windows电脑适合临时用一用,或者先拿来体验旁路由的效果。真要长期开着,还是选Mac mini这类低功耗的设备,或者后面会讲到的软路由。

使用端设置:以iPhone为例

旁路由准备好之后,使用端只需要改两项:网关和DNS。

打开「设置 → 无线局域网」,点击已连接Wi-Fi右侧的 ⓘ。

配置IPv4

点击「配置IPv4」,选择「手动」,填写三项:

字段怎么填我的示例
IP地址和旁路由同网段、没被占用的地址。最省事的做法是填它原来自动获取到的那个IP192.168.81.161
子网掩码和旁路由一致255.255.255.0
路由器填旁路由的IP,不是主路由的192.168.81.172

文章配图

切换成手动之前,建议先把「自动」状态下的IP地址记下来,直接照填,可以避免和其他设备的IP冲突。

配置DNS

回到上一页,点击「配置DNS」,选择「手动」,删掉原有的服务器,填一个常用的公共DNS就可以,比如阿里的 223.5.5.5

文章配图

DNS这一步不能跳过。IPv4改成手动之后,手机不再从路由器自动获取网络信息,DNS也就拿不到了。这时如果DNS还保持「自动」,就会出现Wi-Fi已连接、但所有网页都打不开的情况。

保存之后,这台iPhone的流量就全部交给Mac mini处理了。

安卓手机、电视、游戏机的设置方式类似,都是在网络设置里把IP改成手动(静态),然后把网关和DNS按上面的方式填写。

验证是否生效

方法一:查看出口IP

在手机浏览器里打开任意一个IP查询网站。如果显示的是节点所在地的IP,说明流量已经通过旁路由走了代理。

注意,手机上不需要开任何代理App。

只看出口IP还不够,建议再打开YouTube或Google试一下,确认常用的外网网站都能正常访问。

方法二:查看Clash Verge的连接列表

回到Mac mini,打开Clash Verge的「连接」页面。如果「源地址」一列出现了手机的内网IP(我这里是192.168.81.161),类型是Tun,就说明手机的流量确实到了旁路由。

文章配图

从图里还能看到分流在正常工作:国内的地址走的是直连,其他的走节点。也就是说,使用端的分流规则完全由旁路由上的Clash决定,手机上不需要再维护任何规则。

大部分人要的效果:让设备连上Wi-Fi就自动生效

上面的方式是每台设备单独设置。设备多了之后比较繁琐,电视、游戏机改起来也不方便。

最直接的想法是改主路由的DHCP,把下发给所有设备的「默认网关」改成旁路由的IP。但我不建议这么做:

  • 旁路由一出问题,全家断网。 电脑重启、系统更新、代理客户端崩溃,所有设备都会受影响。

  • 不是所有路由器都支持。 很多品牌路由器的原厂系统只允许修改DNS,不允许修改DHCP下发的网关。

我自己用的是另一个办法:拿一台闲置的路由器,专门做一个「连上就能访问外网」的Wi-Fi。

思路

对应拓扑图里绿色的那台「第三方路由器」。它用路由模式接在交换机下面,自己管理一个独立的网段,给连上它的设备分配IP。

只需要改它的一处设置:把它上网口(WAN口)的网关指向旁路由。这样一来,连上这个Wi-Fi的所有设备,流量都会先经过这台路由器,再被它整体交给Mac mini。

设备 → 第三方路由器 → Mac mini(分流)→ 主路由 → 外网

这样做的好处是:

  • 设备端零设置。 手机、电视、游戏机连上这个Wi-Fi就能用,全部保持自动获取。

  • 不影响家里原有的网络。 主路由和Mesh的Wi-Fi一切照旧,家人完全无感。

  • 切换方便。 想走代理就连这个Wi-Fi,不想走就连回原来的Wi-Fi。

  • 出问题影响范围小。 Mac mini关机了,受影响的只有这一个Wi-Fi。

设置步骤

第一步:接线。 用网线把这台路由器的WAN口接到交换机上。注意是WAN口,不是LAN口。

第二步:把上网方式改成手动IP。 登录这台路由器的后台,找到「上网设置」(或「WAN口设置」)。上网方式一般有这几个选项:

选项含义选不选
拨号上网用宽带账号密码拨号,直连光猫时才用不选
自动IP由主路由自动分配,网关会是主路由不选
手动IP自己填写IP、网关和DNS,有的品牌叫「静态IP」选这个
桥接相当于AP模式,不再独立管理网段不选

只要不选桥接,这台路由器就工作在路由模式。选择「手动IP」后,按下表填写:

字段怎么填我的示例
IP地址主路由网段里一个没被占用的地址192.168.81.200
子网掩码和主路由一致255.255.255.0
网关填旁路由的IP192.168.81.172
DNS手动填写公共DNS223.5.5.5

文章配图

第三步:确认它自己的网段和主路由不同。 在这台路由器的「局域网设置(LAN)」里,确认它的网段和主路由不一样。我的主路由是192.168.81.x,这台路由器用的是192.168.2.x。如果两边网段相同,需要把这台路由器的LAN IP改成别的网段。它的DHCP保持开启,不需要修改。

文章配图

连在这台路由器下面的设备,拿到的会是它自己网段的IP,和主路由下的设备不在同一个网段,这是正常的。

第四步:给这个Wi-Fi起一个不一样的名字。 名字要和家里原有的Wi-Fi区分开,这样能分清自己连的是哪一个,手机也不会在两个网络之间自动切换。如果路由器支持「双频合一」,建议打开,只保留一个名字。我家原有的Wi-Fi叫Yolo,这个专用Wi-Fi我起名叫Yolo_Global。

文章配图

第五步:连上这个Wi-Fi验证。 手机连上这台路由器的Wi-Fi,所有设置保持自动,直接打开IP查询网站,看到的应该是节点的IP。

文章配图

这个方式需要注意的地方

  • 不要用AP模式,也不要接LAN口。 AP模式下这台路由器只是一个「无线网卡」,设备的网关仍然是主路由,旁路由不会生效。如果在这种接法下再打开它的DHCP,局域网里就会同时存在两个DHCP服务器,全家设备拿到的网关会变得随机,时好时坏。

  • 连这个Wi-Fi的设备和家里其他设备不在同一个网段。 投屏、隔空播放、局域网发现设备这类功能,跨网段可能用不了。需要用这些功能时,连回原来的Wi-Fi即可。

  • 给这台路由器的IP留个位置。 第二步填的静态IP最好在主路由的DHCP分配范围之外,或者在主路由后台做一下静态绑定,避免和其他设备冲突。

常见问题

Wi-Fi显示已连接,但打不开任何网页

按下面的顺序排查:

旁路由自己能不能上外网 ↓ IP转发有没有开(sysctl net.inet.ip.forwarding输出是不是1) ↓ 使用端的IP和旁路由是不是同一个网段 ↓ 使用端的「路由器」填的是不是旁路由的IP

能打开国内网站,打不开外网

通常是DNS的问题。先确认使用端的DNS已经改成手动,填的是223.5.5.5这样的公共DNS;再确认旁路由上的Clash处于虚拟网卡模式。

之前好好的,Mac mini重启后就不行了

大概率是IP转发没有持久化,或者Clash Verge没有自启动。回到Mac mini配置的第五步和第六步检查一遍。

旁路由关机了,手机上不了网

把手机Wi-Fi里的「配置IPv4」和「配置DNS」都改回「自动」即可,网络会立刻恢复成原来的样子。

家里开了IPv6

如果主路由开启了IPv6,设备的IPv6流量可能会绕过旁路由直接出去,造成部分网站不走代理。遇到这种情况,可以在主路由后台把IPv6关闭。

写在最后

到这里,一台现成的电脑就变成了旁路由。总结一下整个过程:

步骤Mac miniWindows
固定IP路由器后台静态绑定路由器后台静态绑定
接管流量Clash Verge虚拟网卡模式Clash Verge虚拟网卡模式
开启转发sysctl命令,需要做开机启动项修改注册表,重启生效
保持在线防止睡眠、断电后自动启动睡眠改为「从不」
使用端网关填旁路由IP,DNS手动填写网关填旁路由IP,DNS手动填写
设备多的时候用闲置路由器做专用Wi-Fi,网关指向旁路由同左

这个方案适合家里已经有常开电脑的朋友,零成本就能体验到旁路由的效果。但电脑毕竟不是专门的网络设备,想要更稳定、全家无感使用,最终还是要靠专门的软路由。

下一篇我会讲路由器软路由(OpenWrt)方案,更稳定,也不用再依赖一台电脑。

这篇教程会一直维护。步骤失效了,或者你有更好的做法,在评论区说一声,我会改进正文里。想在更新时收到提醒,关注我就行。

全文完
查看原文