一个困扰了好久的 docker 与 iptables 的问题

2020-07-01 14:10:24 +08:00
 Raul7

两台机器( A 和 B ),分别 ip link add 了两个网卡,配置独立网络段( 10.1.1.x ),设置互通。

# A 机器配置
ip link add gre-y type gre local A 机器 ip remote B 机器 ip ttl 64
ip link set gre-y up
ip addr add 10.1.1.2/24 dev gre-yy

# B 机器配置
ip link add gre-x type gre local B 机器 ip remote A 机器 ip ttl 64
ip link set gre-x up
ip addr add 10.1.1.3/24 dev gre-x

现在 B 机器( Centos7 )上 docker 启了一个 6379 端口。

A 机器上使用 iptables,将 6379 转发到 B 机器上,命令如下:

iptables -t nat -I PREROUTING -p tcp --dport 6379 -j DNAT --to-destination 10.1.1.3:6379

由于 B 机器上 docker 起了几个服务,默认开启了很多 iptables 规则。刚开始配置好后,B 机器( 10.1.1.3 )和 A 机器( 10.1.1.2 )不能通过 10.1.1.x 的 ip 互相 ping 通,随后在 B 机器设置了条 iptables 规则:iptables -I INPUT -p gre -j ACCEPT,随后可以互相 ping 通。

但是 A 机器的 6379 端口一直转发不过来,B 机器上抓 gre-x 网卡的包,可以看到有 A 机器的转发流量,但是实际上流量并未到达机器上 6379 的服务。

请教各位大佬,我该如何配置?

1789 次点击
所在节点    Docker
3 条回复
Jirajine
2020-07-01 14:15:50 +08:00
除了 INPUT 之外,forward 也得放行。
Raul7
2020-07-01 14:26:28 +08:00
@Jirajine 直接`iptables -I FORWARD -p gre -j ACCEPT`吗 需要 FORWARD 到 docker 的那个网卡上吗
ihciah
2020-07-01 14:31:42 +08:00
为啥 accept gre 能通 icmp……😯

不过一个简单不折腾的办法是用 docker-compose 起,yaml 里写个 network 就行。

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

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

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

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

© 2021 V2EX