Cloudnet: 路由管理
注意: 此功能需要您具备一定的 Linux 系统操作经验和网络技术基础.
创建路由
Cloudnet 要求基于 Linux 内核 kennel ≥ 3.10
暂不支持在 Windows/macOS/BSD/Android/iOS 等系统上创建路由.
# 首先确保您已经安装了客户端和命令行工具
curl -fsSL https://pkgs.cloudnet.world/stable/install.sh | sh
# 然后使用命令行工具创建路由, 例如:
cnet start --accept-routes=true --advertise-routes=192.168.1.0/24,192.168.2.0/24
# --accept-routes=true 表示接受别的节点广播的路由
# --advertise-routes 表示创建本地网络路由
# 创建路由为: 192.168.1.0/24,192.168.2.0/24
# 创建多条路由请使用英文逗号(,)分隔, 以上地址仅为示例, 请根据您的实际情况修改.
启用路由
成功创建路由后,该路由并不会立即生效,您需要在 Cloudnet 路由管理 中启用路由. 启用成功后该设备就会成为路由节点.
只有子网管理员才有权限启用路由
路由高可用
Cloudnet 支持路由高可用, 即当某个路由节点宕机时, 该节点的路由会自动切换到备用路由节点上.
# 首先在 hostA 设备上, 使用命令行工具创建路由, 例如:
cnet start --accept-routes=true --advertise-routes=192.168.1.0/24,192.168.2.0/24
# 然后在 hostB 设备上, 使用命令行工具创建路由, 例如:
cnet start --accept-routes=true --advertise-routes=192.168.1.0/24,192.168.2.0/24
# 注意:
# hostA 和 hostB 的路由必须完全相同, 否则无法实现高可用
# hostA 和 hostB 必须在同一个子网内, 否则无法实现高可用
创建成功后,在
路由管理
页面可以看到主路由状态(Primary
)和备用路由状态(Failover
)
旁路网关
如何在不改动现有网络设施的情况下, 将特定的流量从一个网络路径转移到另一个网络路径? 旁路网关可以帮助您实现这一目标.
准备工作
- 一台 Linux 主机, 可以是虚拟机或树莓派或 OpenWRT, 且内核版本 ≥ 3.10
- 支持 iptables 或 netfilter 的 Linux 主机
- 该主机需放置在路由器或防火墙内部, 且与路由器或防火墙在同一个子网内
- 路由器或防火墙具备添加或修改路由表的功能
使用 Cloudnet 搭建旁路网关
# 开启 IP 转发功能
echo 'net.ipv4.ip_forward = 1' | tee /etc/sysctl.d/ipforward.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/ipforward.conf
sysctl -p /etc/sysctl.d/ipforward.conf
# 使用命令行工具接收其它路由节点的广播, 例如:
cnet start --accept-routes=true
# --accept-routes=true 表示接受别的路由节点广播的路由
# Cloudnet 会自动创建相关的 iptables 规则
在路由器或防火墙上添加路由表
以家用路由器为例
如果你使用的是家用路由器, 登录路由器找到静态路由
选项, 添加一条静态路由, 目的网段为 Cloudnet 路由节点广播的网段, 下一跳为 Cloudnet 旁路网关的 IP 地址.
以 OpenWRT 路由器为例
# 以 Linux 路由为例, 以下命令仅供参考, 请根据您的实际情况修改
# 创建 IP 网段列表
ipset create cnetlist hash:net
ipset add cnetlist 172.16.0.0/16
ipset add cnetlist 172.17.80.0/20
# 标记流量
iptables -t mangle -A fwmark -s 10.0.0.0/20 -m set --match-set cnetlist dst -j MARK --set-mark 0x52
iptables -t nat -A POSTROUTING -m mark --mark 0x52 -j MASQUERADE
# 添加路由表,10.0.0.5 为 Cloudnet 旁路网关的 IP 地址
ip route add default via 10.0.0.5 table cnet
ip rule add fwmark 0x52 table cnet
注意事项
- 在启用子网路由的模式下,本地网络内部的主机无需安装客户端,只需要在网关主机上安装客户端即可
- 本地网络内部的主机可以直接与 Cloudnet 通告(
--advertise-routes
)的网段通信 - 本地网络内部的主机不能直接与 Cloudnet 的子网通信, Cloudnet 子网内的设备必须设置
--accept-routes=true
后才能通信
禁用路由
只有子网管理员才有权限禁用路由
- 登录用户中心,点击
路由
菜单 - 找到您要修改的路由,点击
禁用
按钮 - 在弹出框中选择
确认
即可
删除路由
只有子网管理员才有权限删除路由
- 登录用户中心,点击
路由
菜单 - 找到您要修改的路由,点击
删除
按钮 - 在弹出框中选择
确认
即可
场景案例
以下结合实际的场景来说明路由的使用方法.
- Cloudnet: 172.30.30.0/24, 设备 A 和 C 安装了客户端
- 家里的网络: 192.168.0.0/24, 设备 A,B
- 公司的网络: 192.168.1.0/24, 设备 C,D
- A: 192.168.0.11,172.30.30.1
- B: 192.168.0.12
- C: 192.168.1.11,172.30.30.2
- D: 192.168.1.12
如果设备 A 与设备 C 通讯, 需要进行以下操作
- A 和 C 均安装了客户端,它们可以通过 Cloudnet 网段直接通讯
如果设备 A 与设备 D 通讯, 需要进行以下操作
由于设备 D 没有安装客户端,所以无法通过 Cloudnet 网段直接通讯,需要通过子网路由来实现.
- D 须与 C 处于同一个网段: 192.168.1.0/24
- C 需是一个基于 Linux 的系统并安装了客户端
- C 需要开启路由通告(–advertise-routes=192.168.1.0/24)
- 登录用户中心-路由-启用路由: 192.168.1.0/24
- A 需要点击客户端右键菜单-设置-子网路由
经过以上设置后即可实现 A 直接和 D 通讯.
如果设备 B 与设备 D 互通, 需要进行以下操作
由于设备 B 和 D 都没有安装客户端,所以无法通过 Cloudnet 网段直接通讯,需要通过旁路网关来实现.通俗的讲就是局域网桥接.
- A 和 C 需是一个基于 Linux 的系统并安装了客户端
- A 需要开启路由通告(–advertise-routes=192.168.0.0/24)
- C 需要开启路由通告(–advertise-routes=192.168.1.0/24)
- 登录用户中心-路由-启用路由: 192.168.0.0/24 和 192.168.1.0/24
- 设置 A 网络的路由器, 添加静态路由, 目的网段: 192.168.1.0/24 下一跳: 192.168.0.11, 此步可实现 B 访问 D
- 设置 C 网络的路由器, 添加静态路由, 目的网段: 192.168.0.0/24 下一跳: 192.168.1.11, 此步可实现 D 访问 B
经过以上设置后即可实现 B 和 D 互通. 在此场景中, A 和 C 就是旁路网关, 用于桥接两个局域网. 但是它们都是单点的, 如果需要实现 A 和 C 宕机后自动切换路由,请参考路由高可用章节.