分流可以定义
一组目标 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