路由管理

详细了解 Cloudnet 的子网路由功能的使用方法

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后才能通信

禁用路由

只有子网管理员才有权限禁用路由

  1. 登录用户中心,点击 路由 菜单
  2. 找到您要修改的路由,点击 禁用 按钮
  3. 在弹出框中选择 确认即可

删除路由

只有子网管理员才有权限删除路由

  1. 登录用户中心,点击 路由 菜单
  2. 找到您要修改的路由,点击 删除 按钮
  3. 在弹出框中选择 确认即可

场景案例

以下结合实际的场景来说明路由的使用方法.

  • 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 宕机后自动切换路由,请参考路由高可用章节.

最后修改 2024.02.02: dev (ad6ee86)