Skip to content

分流可以定义一组目标 IP 行为, 应用在一组客户端

有任何想法欢迎在此发布评论, 或者新建一个也是可以的: https://github.com/ThisSeanZhang/landscape/discussions/88

分流

  • Flow: 一组策略,拥有入口和出口
  • 入口: 一组内网客户端, 使用 IP 地址 + QoS 标识进行匹配
  • 出口: Docker 容器,之后将会增加多 WAN

通过侧边栏的 分流设置 进入配置

每个流拥有独立的 DNS 缓存以及自己的规则, 可通过各流卡片上方的 DNS 进行配置专属于该流的配置。

目标IP 也是如此.

在 DNS / IP 中的每条规则拥有以下的 流量动作. 用于限制该组配置中的 入口流量 访问规则中的 目标 IP 时的动作( 对于DNS是域名查询后得到的地址 ).

以下的前提是建立在, 源 IP 匹配上了 该 Flow 的

其中

  • 无动作: 标识按照当前的 Flow 出口
  • 忽略 Flow 设置: 忽略当前 Flow 指定的出口, 将这个数据包按照默认行为进行处理
  • 禁止连接: 丢弃该数据包
  • 重定向至流: 使用另一个 Flow 的出口发送这个数据包
  • 允许端口共享: 允许访问此目标的接口被用于 其他IP 进行使用, 在使用 STUN 建立组网时使用.

当前 Flow 的流量出口仅有 Docker 容器 (容器中的程序需要与接应程序配合使用), 当前还不支持 多WAN 作为流的出口.

多个 Flow 组合

当流量进入容器后, 假设流量变为该 容器的 IP 进行发送, 那么可以新建一个 Flow 配置, 将该容器 IP 加入, 这样就能控制该容器发出流量的行为. ( 大多数情况应该属于多此一举 )

分流在代码中的流程示意图:

接应程序

项目提供了一个测试接应程序以便进行测试, 使用 编译脚本 选择对应的架构进行编译:

text
./build_redirect_docker_img.sh 
No target specified.
Supported architectures:
1) aarch64
2) x86_64
3) armv7
4) Use default architecture (x86_64)
Please select a target architecture by entering the corresponding number [default = x86_64]:

如果使用 UI 进行启动可以忽略, 如果使用第三方或者手动启动则需要注意添加以下参数:

  • docker run
shell
docker run \
--sysctl net.ipv4.conf.lo.accept_local=1 \
--cap-add=NET_ADMIN \
--cap-add=BPF \
--cap-add=PERFMON \
xxxx
  • compose
yaml
services:
  your_service:
    image: your_image
    sysctls:
      - net.ipv4.conf.lo.accept_local=1
    cap_add:
      - NET_ADMIN
      - BPF
      - PERFMON