iptables 太他妈难用了

2023-02-11 19:05:58 +08:00
 huiyanpohundh123

搞了一下午,想在部署了 docker 的机器上搞个透明代理,看了一天也没看懂 docker 的 nat 是怎么配的,模拟怎么也跑不通

话说有了第一条规则后,后面的规则还有屁用啊

10726 次点击
所在节点    程序员
68 条回复
yaott2020
2023-02-11 19:24:08 +08:00
你是没见过 nftables 的规则吧
huiyanpohundh123
2023-02-11 19:26:45 +08:00
@yaott2020 没见过
PendingOni
2023-02-11 19:30:55 +08:00
可以试下 ip route
duke807
2023-02-11 19:31:21 +08:00
有没有一种可能,是 docker 本身难用
huiyanpohundh123
2023-02-11 19:36:05 +08:00
@PendingOni 这不是路由能解决的吧 我的要求是 docker ,本机,和局域网的其他机器都能走代理
PendingOni
2023-02-11 19:38:07 +08:00
@huiyanpohundh123 说实话 我以为你需要用 iptables 做路由, 我也不是很清楚你现在的需求是什么,或许 docker inspect 看下呢?
choury
2023-02-11 19:41:31 +08:00
你这需求要用策略路由才行吧
huiyanpohundh123
2023-02-11 19:48:14 +08:00
差不多就是做个 nat 转换 所有流量都通过 tcp 和 udp 代理
seaguest
2023-02-11 19:53:22 +08:00
huiyanpohundh123
2023-02-11 19:58:11 +08:00
@PendingOni 我的需求说白了就是把这个机器做个旁路由,只要把局域网内其他机器的网关设置为这台机器就能直接科学,然后网上找了个教程,透明代理倒是成了,但是我的 docker 服务没法访问了,然后又开始折腾。

透明代理并不是用 docker 搭建的,所以可能没法通过路由来解决,iptables 配置不太熟悉,只能看懂 78 成,但是 iptables 麻烦就麻烦在它还有个几个表还有一套调用顺序,我自己推演模拟始终觉得有问题。具体是 return 这个指令匹配规则后到底是执行下一条规则还是直接跳过链路,我的推演是只有执行下一条规则 docker 的 nat 才有可能,但是网上搜了很多东西,也大概率是不执行下面的规则,而是使用默认策略跳到下一层链路。

不理解原理就调试不了,就卡住了
huiyanpohundh123
2023-02-11 20:00:18 +08:00
@seaguest 我看了,或许可以,但是就「不透明」了,我希望是只改 iptables ,这也是我这么执着要把 iptables 搞明白的原因
zedpass
2023-02-11 20:02:51 +08:00
可以问 chatgpt 试试:

需要将外网访问本地 IP(192.168.75.5)的 80 端口转换为访问 192.168.75.3 的 8000 端口,提供 iptables 配置
--------
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.75.3:8000
huiyanpohundh123
2023-02-11 20:04:01 +08:00
@zedpass 这个倒是知道,透明代理已经成功了,但是 docker 服务访问不了了,在解决这个问题
crysislinux
2023-02-11 20:11:58 +08:00
docker 本身改了一些网络的配置,导致常规的 iptables 不按预期工作了。我是把配置改回来了,就是不知道 docker 还能不能工作。具体改的啥忘了,你搜索应该能找到,这个问题
rekulas
2023-02-11 20:46:01 +08:00
虚拟机实现倒是简单,docker 要搞感觉网络确实会比较麻烦

非常赞同你的标题 iptables 确实 tm 难用 只是简单开关个端口还要,做更底层的操作就知道多蛋疼了
documentzhangx66
2023-02-11 21:25:39 +08:00
iptables 难用的原因很简单:

1.这玩意的设计,违背了 Linux 的一物一用的原则。它混杂了太多功能与设定,调试又极其麻烦。

2.这玩意的作者偷懒,很多必要功能都没设计,比如规则去重。

3.这玩意的作者想搞事,比如它提供了一个虚拟交换机的功能,但设计这玩意的人又没多少交换机的经验,设计的一塌糊涂。

给个建议,如果需要使用 iptables 做复杂的功能,建议专机专用,别与 docker 混在一起。

也就是一台机器专门跑 iptables ,一台机器跑 docker 。
defunct9
2023-02-11 22:50:49 +08:00
开 ssh ,让我上去试试
0o0O0o0O0o
2023-02-11 22:57:03 +08:00
是 tproxy 实现的吗? docker 的网络遇上 tproxy 透明代理就是有点麻烦的,网上也有文章介绍,简言之,net.bridge.bridge-nf-call-iptables
digimoon
2023-02-11 23:00:30 +08:00
docker 本身也有几种网络,你折腾完 iptables 后有重启一下 docker 的网络吗? docker 会往 iptables 里面插一堆规则的
2503
2023-02-11 23:01:01 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/915216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX