## 背景

在某个节点上,容器进程 A 默认是将数据包发给容器进程 B ,考虑到进程 B 升级,需要将流量转到其他机器上。

## 尝试

使用 ebpf 劫持 connect 系统调用可以做,以及使用 tc-ebpf 实现 nat ,但是被否了!理由是不够安全,存在影响其他容器的风险。

有大佬说可以使用 tc mirror 将流量镜像到 tun ,走隧道,发给本地进程 B 的就 drop 掉(暂时还没弄明白,可不可行,有无大佬解答)

iptables contrack 被禁止使用,导致无法使用其 nat 能力。

求问实现如上功能的方式
举报· 81 次点击
登录 注册 站外分享
5 条回复  
FishBear 小成 2024-8-27 21:22:37

[流量劫持] 求问如何本地进程 A 发给本地进程 B 的数据包转发给其他机器呢?

haproxy
leconio 小成 2024-8-27 22:41:09

[流量劫持] 求问如何本地进程 A 发给本地进程 B 的数据包转发给其他机器呢?

感觉原理很像透明代理和分流。看看 tproxy?
zhangeric 小成 2024-8-28 09:05:37

[流量劫持] 求问如何本地进程 A 发给本地进程 B 的数据包转发给其他机器呢?

这个是端口转发吧
bingfengfeifei 小成 2024-8-28 10:27:18

[流量劫持] 求问如何本地进程 A 发给本地进程 B 的数据包转发给其他机器呢?

感觉像是同时做 DNAT+SNAT ,然后转发到其他机器上。
本机:192.168.1.1
其他机器:192.168.1.2
两进程 localhost 通信
127.0.0.1:12345->127.0.0.1:8080
入站先使用 DNAT 变成 127.0.0.1:12345->192.168.1.2:80
出站使用 SNAT 变成 192.168.1.1:12345->192.168.1.2:80
这样其他机器的响应报文也可以发回来。

主要问题就是 localhost 好像和物理网卡的入站流量不太一样,iptables 拦截不太清楚能不能走到 PREROUTING 和 POSTROUTING 链,可能要开个 route_localnet 的选项
muziyu58 小成 2024-8-28 10:41:13

[流量劫持] 求问如何本地进程 A 发给本地进程 B 的数据包转发给其他机器呢?

@Charlie17Li A 机器端口数据包,转发到 B 机器端口上,看起来行得通呀
返回顶部