# MacOS 使用 Surge 的网关方案

By [John Torres](https://paragraph.com/@lota) · 2022-03-27

---

![Surge on MacOS](https://storage.googleapis.com/papyrus_images/cd54644e5ad4e8006e41cc2230425bafacfac34e1a1d39061e7ca32e76e06f60.png)

Surge on MacOS

目的
--

局域网内（家/办公室），只需要有一台 MacOS 安装 Surge，配置好，内网其它设备都不用再安装任何代理工具（比如不方便安装代理的 AppleTV、电视棒、Switch、XBox、Oculas），都可以使用 MacOS 当网关，自动分流上网。

相比于软路由等方案，成本会更高，但配置更轻松、维护方便、使用过程有图形界面，Mac 运行稳定性仅次于 Linux 可以长期动行，几乎不怎么需要重启，除非操作系统版本升级。

一. 简介
-----

*   在 MacOS 上运行 Surge，推荐使用一台 24 小时开机的 MacMini
    
*   允许局域网内的其它设备将 MacOS 当作网关使用
    
*   分组内自动 URL Test 选择延迟最低的节点，节点故障时自动切换
    
*   网络数据经 Surge on MacOS 自动分流（可以手动选择不同分组对应的分流策略）
    
    *   国内的走国内直连
        
        *   国内的搜索引擎、APP、聊天、视频服务等，GoogleFCM 服务也应该是直连的
            
    *   国际的走机场代理
        
        *   Google, YouTube, Spotify, Netflix, Twitter, Discord, Twitter 等
            

二. 成本
-----

### $99

购买 Surge4 的 5 个授权（这个选项性价比最高，可用于 5 台 MacOS 设备）

### $xx

代理服务 （机场不要太过于在意成本，成本太低的机场往往线路质量不稳定，有集体坠机的风险）

三. 相关链接
-------

### Surge 官网

[https://nssurge.com/](https://nssurge.com/)

四. 使用自动代理分组和优化规则生成工具
--------------------

*   自动获取节点配置列表
    
*   生成代理分组（自动测试线路可用性）
    
*   生成分流规则
    
*   导出配置文件到 iCloud 文件夹（Surge 配置可以跨设备自动同步）
    

### 1\. 下载和安装依赖

安装最新 LTS 版本的 `Node.js`

[https://nodejs.org/en/](https://nodejs.org/en/)

安装最新版本的 `git`

[https://git-scm.com/](https://git-scm.com/)

### 2\. GitHub

_\-- 这一步不需要操作，如果你有能力优化贡献代码，欢迎欢迎 --_

*   这个工具是自己写的
    
*   自动导出代理分组和分流规则配置文件
    
*   我自己正在使用的配置文件就是用这生成的
    

[https://github.com/web3jt/rules](https://github.com/web3jt/rules)

### 3\. 下载、初始化、编辑配置

打开 Terminal 打开命令行工具

    # 这一个区块的内容，熟悉命令行的用户不用管，直接跳到下一段
    
    # 进入用户文件夹
    $ cd ~
    
    # 新建一个专用文件夹，<dir-name> 换成自己想起的名字
    $ mkdir <dir-name>
    
    # 进入这个文件夹
    $ cd <dir-name>
    

    # 下载库
    $ git clone https://github.com/web3jt/rules
    
    # 进入文件夹
    $ cd rules
    
    # 自动安装依赖包
    $ npm install
    
    # 创建配置文件
    $ cp config.sample.yaml config.yaml
    
    # 编辑配置文件，或者不用 nano 工具，用任何文本编辑工具编辑这个 config.yaml 文件都可以
    $ nano config.yaml
    

### 4\. 编辑配置文件 config.yaml

    SURGE_PROVIDER: "https://example.com/subscribe/<key>?protocols=smart&list=surge"
    
    SURGE_OUTPUT: "/Users/<username>/Library/Mobile Documents/iCloud~com~nssurge~inc/Documents/<profile-name>.conf"
    

*   `SURGE_PROVIDER` 填入机场提供的代理配置列表 URL
    
*   `SURGE_OUTPUT` 中将 `<username>` 修改成 Mac 的用户名，也就是 Terminal 里命令提示符 `@` 前边的名字
    
*   `SURGE_OUTPUT` 中将 `<profile-name>` 修改成你想要的配置文件名，我自己用的就是机场的英文名
    
*   如果 iCloud 里没有这么一个文件夹，那么随便指定到任何一个文件夹，起个名字，都行
    

![附图，我正在使用的机场可导出的节点列表的地方](https://storage.googleapis.com/papyrus_images/9e01f7965dd4226fa0bc09a3ccef8ba21652f4569f45d54c65ec725882b10a6e.png)

附图，我正在使用的机场可导出的节点列表的地方

### 5\. 运行脚本，自动获取代理列表并导出配置文件

    $ node surge.js
    Saved...
    

运行完毕后，配置文件会自动导出到 iCloud 文件夹

以后每次想重新获取最新节点列表，并再次生成配置文件覆盖的时候，只执行这一条命令就行了……

或者写一个 cron 每天运行一次

五. 在 Surge 中应用刚刚导出的配置文件
-----------------------

Surge 主窗口 - More （左下） - Profile - 切换配置文件为刚刚导出的 `profile-name`

六. 设置 Surge 为系统代理并开启增强模式
------------------------

*   Surge 主窗口 - Activity （左上）- 开启 System Proxy （右下）
    
*   Surge 主窗口 - Activity （左上）- 开启 Enhanced Mode （右下）
    

七. 将 MacOS 的 IP 地址设为固定
----------------------

*   防止 MacOS 每次连入路由器、或路由器重启时，MacOS 被分配随机的 IP 地址
    
*   进入路由器设置，在 `DHCP` 相关设置里，找到 `Mac/IP 绑定` 然后将 Mac （网卡物理地址）与想要设置的 IP 地址进行绑定
    
*   推荐使用 `192.168.x.254` 这种 `.254` 结尾的子网内最末一个 IP _（因为一般家用路由器的 DHCP 分配规则都是小于 200，如果进入路由器设置页面进行绑定，你是可以看到 DHCP 的分配规则的，这里的 IP 没有确定之规，只要不在自动分配范围里就行，但一定要在路由器所在的子网网段里，如果路由器的 IP 是_ `192.168.1.1` _那么就不要把 MacOS 的 IP 设置为非_ `192.168.1.x` _的）_
    
*   或者手动在 Mac 网络选项里设置 `TCP/IP` 的 `IPv4` 地址 （更推荐上一条在路由器里设置 Mac/IP 绑定，除非你连路由器的管理密码都忘了）
    

八. 设置局里网里的其它设备
--------------

比如：电脑、手机、Switch、XBox、Oculas、AppleTV、Amazon 电视棒、Google 音箱等

*   进入 WiFi 设置
    
    *   手动编辑网关地址为刚刚绑定的 `192.168.1.254`
        
    *   手动编辑 DNS 地址为 `198.18.0.2` （这是 Surge 提供的内网专用 DNS，使用 Surge 为网关时，必须使用此 DNS 才能正常访问网络）
        
*   LAN 设置，同理
    

九. 进阶
-----

如果你希望某一批设备，只要连接 WiFi 就能自动使用你的 Surge on MacOS 为网关的话：

*   在主路由 LAN 口上再插另外一台路由器（以下称之为 `2 号路由`）
    
*   2 号路由的 WAN 口上网模式设置为 DHCP 自动分配
    
*   将 MacOS 连入 2 号路由器（最好用网线，比 WiFi 延迟低）
    
*   固定 MacOS 的 IP 地址
    
*   2 号路由设置，将 DHCP 服务下发 IP 配置时的 `网关地址` 设定为 MacOS 的 IP 地址
    

如此，可以做到：

*   家里有两个 WiFi 热点可以使用
    
*   所有接入 2 号路由的设备都自动将 Surge on MacOS 当作网关，所有网络访问自动分流
    
*   某个设备如果不需要自动分流（直连网络），那么接入 1 号路由就行了
    

如果你使用商用路由 + AP/AC 甚至多层交换的解决方案，就像我一样用 vLAN 吧，多个子网，想互通就互通，想隔离就隔离，家人、访客、出海、工作、电视和游戏、物联网、监控，都能有相当舒服的姿势

有商用路由的也不需要我这里哔哔了，诸神可借鉴思路、动动手指轻松搞定

写在最后 欢迎打赏，给啥都行，不嫌多不嫌少，哈哈 ETH/BSC 钱包地址 `0x66666666f6d4Eef3bF30A60DDe1Bf50Ce056e87f` ENS 域名 `lota.eth` 祝大家刷绿码！收红包！！
-----------------------------------------------------------------------------------------------------------------

---

*Originally published on [John Torres](https://paragraph.com/@lota/macos-surge)*
