批准子网路由
上一节我们开通了账号下设备之间的互访。本页继续完成一个常见场景:让已经接入云雀通的设备,访问某个内网网段里的设备。
本页以 192.168.6.0/24 为例。假设你有一台电脑或 Linux 服务器已经接入云雀通,并且它本身可以访问 192.168.6.0/24 这个内网。我们会让它作为子网路由节点,把这个网段发布到云雀通网络中。
什么是子网,为什么要宣告子网
子网可以理解为一组在同一个内网里的地址。比如 192.168.6.0/24 通常表示从 192.168.6.1 到 192.168.6.254 的一整段内网地址,里面可能有 NAS、打印机、摄像头、工控设备、数据库服务器或 Web 管理后台。
这些设备不一定都能安装云雀通客户端。比如很多 NAS 插件环境受限,摄像头和打印机根本无法安装客户端,老旧服务器也可能不方便改动。这时,只要内网里有一台电脑或 Linux 服务器已经安装了云雀通,并且它能访问这个子网,就可以让它充当“路由节点”。

宣告子网的意思就是:这台路由节点告诉云雀通控制面,“如果有人要访问 192.168.6.0/24,可以把流量交给我,我能把它转发到这个内网”。
这样做的便利非常明显:你不需要给每一台 NAS、打印机、摄像头都安装客户端,也不需要在公网路由器上做端口映射。只要批准这一条子网路由,再用 ACL 控制访问范围,授权设备就可以像在内网一样访问 192.168.6.0/24 里的资源。
可以把子网路由理解为“用一台已接入云雀通的设备,带起一整个内网”。它适合家庭 NAS、办公室局域网、机房管理网和工业现场网络。
先理解路由批准
子网路由需要同时满足三件事:
- 路由节点宣告:某台在线设备告诉系统“我可以转发
192.168.6.0/24”。 - 控制台批准:管理员在“路由”页面批准这个网段。
- ACL 放行:访问控制里允许用户或设备访问
192.168.6.0/24。
只宣告路由但没有批准,路由不会生效。只批准路由但没有 ACL,用户仍然可能访问不了目标网段。
开通前准备
- 一台已经登录云雀通客户端的电脑或 Linux 服务器。
- 这台设备本身位于
192.168.6.0/24网段内,或能访问这个网段。 - 这台设备需要保持在线,因为其他设备会通过它访问该子网。
- 如果是 Linux 服务器,建议确认系统已开启 IP 转发。
Linux 上可以临时开启 IPv4 转发:
sudo sysctl -w net.ipv4.ip_forward=1
如需重启后仍然生效,可以写入系统配置:
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-larktun-subnet-router.conf
sudo sysctl --system
1. 在路由节点上宣告子网
在准备作为路由节点的电脑或 Linux 服务器上执行命令。
使用 up 宣告 192.168.6.0/24 子网路由,并指定云雀通登录服务器:
sudo larktun up --advertise-routes=192.168.6.0/24 --login-server https://hs.larktun.com
如果你已经发布过其他网段,继续使用 up 并用逗号分隔多个网段,避免覆盖旧配置:
sudo larktun up --advertise-routes=192.168.6.0/24,10.20.0.0/16 --login-server https://hs.larktun.com
执行后,回到云雀通控制台的“路由”页面,应该能看到这台设备宣告的 192.168.6.0/24。
2. 在控制台批准路由
进入“路由”页面,找到刚才宣告路由的设备和 192.168.6.0/24 网段,然后打开右侧开关。

批准后,这条路由才会进入可用状态。后续如果你不想继续暴露这个网段,可以回到这里关闭开关。
3. 在 ACL 中放行子网访问
路由批准只是告诉系统“这个网段可以被转发”。真正决定谁能访问它的,仍然是 ACL。
进入“访问控制”,切换到 “JSON 编辑器”,添加一条访问 192.168.6.0/24 的规则。下面示例保留了上一节设备互访规则,并新增了一条子网访问规则:
{
"groups": {
"group:test@larktun.com": ["test@larktun.com@"]
},
"tagOwners": {},
"hosts": {},
"acls": [
{
"action": "accept",
"src": ["test@larktun.com@"],
"dst": ["test@larktun.com@:*"]
},
{
"action": "accept",
"src": ["*"],
"dst": ["192.168.6.0/24:*"]
}
],
"autoApprovers": {}
}

上面新增的第二条规则表示:允许来源访问 192.168.6.0/24 网段的全部端口。192.168.6.0/24:* 后面的 :* 表示该网段内目标设备的全部端口。
截图中为了第一次验证方便,src 使用了 *。长期使用时建议收紧来源,例如改成 test@larktun.com@、某个用户组,或更具体的设备标签。
如果你只想开放某个服务,可以把端口写得更精确:
{
"action": "accept",
"src": ["test@larktun.com@"],
"dst": ["192.168.6.0/24:443"]
}
这表示只允许 test@larktun.com 访问该子网内设备的 443 端口。
4. 在客户端接受路由并测试
需要访问这个子网的客户端,也要接受已批准的路由。可以在客户端上执行:
sudo larktun set --accept-routes
然后从客户端测试子网内的真实设备,例如:
ping 192.168.6.10
curl http://192.168.6.10
ssh user@192.168.6.10
只要能访问 192.168.6.0/24 内的目标服务,就说明“路由宣告、路由批准、ACL 放行”这三步已经全部生效。
常见问题快速定位
- 路由页面看不到网段:确认路由节点已在线,并且
--advertise-routes=192.168.6.0/24执行成功。 - 已看到网段但访问不了:确认右侧开关已经打开,路由处于批准状态。
- 路由已批准但仍然被拒绝:检查 ACL 是否包含
192.168.6.0/24:*或对应端口。 - 只能访问路由节点,访问不了子网其他设备:检查路由节点是否能访问该子网,并确认 Linux IP 转发或本机防火墙配置。
- 某个端口不通:确认目标设备服务已启动,本机防火墙没有拦截,同时 ACL 端口写法正确。
下一步
- 回顾 开通第一条安全访问链路
- 阅读 路由介绍
- 查看 常见问题