V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Raul7
V2EX  ›  Docker

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

  •  
  •   Raul7 · 2020-07-01 14:10:24 +08:00 · 1789 次点击
    这是一个创建于 1590 天前的主题,其中的信息可能已经有所发展或是发生改变。

    两台机器( 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 的服务。

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

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

    不过一个简单不折腾的办法是用 docker-compose 起,yaml 里写个 network 就行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1691 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:49 · PVG 00:49 · LAX 08:49 · JFK 11:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.