Brook Shiliew Cheap Zhi Meeting Nan mitmproxy client Network Activity Monitor iOS Old App Downloader SSH Terminal Server Dashboard 菜根谭 Socks5 Configurator IPvBar File Link Markdown Editor IP nami joker brook ipio nico z zoro hancock mad httpserver google hosts

如何开启 Shiliew 的同时连接公司内网

Updated at: 2026-02-01

需求

一个 Shiliew 客户遇到一个场景:远程办公,使用公司提供的 OpenVPN 客户端进入公司网络来访问公司内网的服务,如果运行 OpenVPN 客户端,就无法同时运行 Shiliew 客户端。

原因是:OpenVPN 客户端在尝试接管底层系统网络,而 Shiliew 客户端也会尝试接管整个系统的网络,所以一般情况下无法同时运行。如果一个网络软件可以和 OpenVPN 客户端同时运行,那么这个网络软件可能只是创建了一个 socks5 或 http 代理,属于工作在应用层,而非从更底层进行网络处理。而应用层代理无法接管很多应用的网络,往往也只能处理 TCP 和 IPv4。而 Shiliew 则可以接管整个系统的网络,TCP/UDP/IPv4/IPv6。

那么公司提供 OpenVPN 方案只是手段,最终的目的是给远程办公的员工提供一个加密隧道,以让员工可以通过这个加密隧道进入公司网络,进而访问公司内网的服务。所以可以不用 OpenVPN 方案,让员工只用一个 Shiliew 客户端就可以实现目的。

解决方案

我们知道 Shiliew 客户端包含所有 Brook Plus 客户端的功能,所以也可以通过编程实现任意的网络需求。

我们先看一下公司采用 OpenVPN 方案时员工电脑的网络拓扑:

x

现在将 OpenVPN 方案替换掉。员工只需要使用 Shiliew 客户端即可,我们先看一下网络拓扑:

x

公司侧

首先在公司的接入服务器上部署 brook server,很简单只需一行命令(daemon 可以用 jokerz 或其他喜欢的工具):

brook server --listen :9999 --password hello

然后生成一个 brook link(假设公司服务器的外网 IP 是 1.2.3.4)

brook link -s 1.2.3.4:9999 -p hello --name '起个名字'

会输出一个 brook link, 类似 brook://...,可以将这个 brook link 给员工

员工侧

默认 Shiliew 开启了如下模块,如果想了解更多可以阅读 Brook Docs:

x

现在我们需要增加一个模块,这个模块来定义 brook link,url 留空即可

x

// 在运行时之前定义多个 Server,并在运行时通过 brooklinkkey 选择使用哪一个
modules = append(modules, {
    brooklinks: func(m) {
        return {
            "company": "brook://...替换为公司提供的..."
        }
    }
})

假设要访问的公司的服务有:

⚠️ 如果你是用的 Shiliew macOS 客户端,有两个模式:TUN 模式和 App 模式,默认是 TUN 模式,建议使用默认 TUN 模式。App 模式针对传输层协议有再加工,可以让你看到每个请求是哪个 App 发起的,也可以基于 App 编程控制网络,但是对于这种场景下某些协议有不兼容(已知 Mysql),当然如果你所访问的服务协议没有不兼容的情况下也可以选择 App 模式。

然后再添加一个模块,这个模块让访问以上服务时,通过公司提供的 brook link 走公司的 brook server 进入公司网络来访问,url 留空即可

x

modules = append(modules, {
    address: func(m) {
        if m.domainaddress {          
            if m.domainaddress == "www.company.com:443" {                              
                return {brooklinkkey: "company"}
            }    
        }
        if m.ipaddress {
            l := [
              "192.168.9.10:80",
              "192.168.9.11:3306",
              "192.168.9.12:6379"
            ]
            for v in l {
              if m.ipaddress == v {
                return {brooklinkkey: "company"}
              }
            }
        }          
    }                                 
})

因为模块是顺序匹配的,直到某个模块处理为止,所以需要调整一下新建的两个模块的顺序到上面一些:

x

然后断开重连即可。

解决方案之公司侧进阶版

简单情况下,根据以上方案,公司可以运行一个 brook server,然后把这个 brook server 的 brook link 给每一个员工即可。事情就解决了。

如果公司想控制不同员工对 brook server 的访问权限,比如想单独停掉某个员工的 brook server,以上共用一个 brook server 的方案就不可行了,一停就都停了,对吧。所以可以运行多个 brook server,如果都在一个服务器上则每个 brook server 监听不同的端口和使用不同的密码,然后给不同的员工不同的 brook server 就可以了。

一般以上就可以满足需求了,如果公司有编程能力想要更多控制,brook link --token 参数可以指定用户标识,brook server 需要搭配 brook --userAPI 使用。参考文档:user.md,参考实现:brook-store

如果公司想控制员工通过 brook server 可访问的服务,比如只允许访问某些服务,或不允许访问某些服务,则可以用 brook --script 来实现精细控制,参考文档:Brook Docs,参考示例:Brook Script Gallery

© TxThinking, Inc. All Rights Reserved.