V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xi_lin
V2EX  ›  问与答

使用 docker 时的 iptables 规则设置求助

  •  
  •   xi_lin · 2017-05-16 18:18:14 +08:00 · 2586 次点击
    这是一个创建于 2777 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在一个 CentOS 6.5 的机器上使用 docker,默认已设置了一定的 iptables 规则。

    启动容器时用-p 9123:3000 指定了端口映射。

    目前在 iptables 启用的状态下不论是从外网机器还是 host 本机上,都无法从 9123 端口拿到数据。如果执行sudo service iptables stop后,则可以正常获得数据。

    不知道应该怎么设置 iptables 才能访问 9123 端口?

    使用如下命令查看 iptables 规则

    sudo service iptables status

    输出结果是

    Table: filter
    Chain INPUT (policy DROP)
    num  target     prot opt source               destination
    1    ACCEPT     41   --  0.0.0.0/0            0.0.0.0/0
    2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
    3    ACCEPT     all  --  127.0.0.1            127.0.0.1
    4    ACCEPT     all  --  127.0.0.1            127.0.0.1
    5    ACCEPT     all  --  127.0.0.1            127.0.0.1
    6    ACCEPT     all  --  127.0.0.1            127.0.0.1
    7    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
    21   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:9123
    22   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3000
    
    Chain FORWARD (policy DROP)
    num  target     prot opt source               destination
    
    Chain OUTPUT (policy DROP)
    num  target     prot opt source               destination
    1    ACCEPT     41   --  0.0.0.0/0            0.0.0.0/0
    2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
    3    ACCEPT     all  --  127.0.0.1            127.0.0.1
    4    ACCEPT     all  --  127.0.0.1            127.0.0.1
    5    ACCEPT     all  --  127.0.0.1            127.0.0.1
    6    ACCEPT     all  --  127.0.0.1            127.0.0.1
    7    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
    9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
    17   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:9123
    18   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:3000
    
    Table: nat
    Chain PREROUTING (policy ACCEPT)
    num  target     prot opt source               destination
    1    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           ADDRTYPE match dst-type LOCAL
    
    Chain POSTROUTING (policy ACCEPT)
    num  target     prot opt source               destination
    1    MASQUERADE  all  --  192.168.42.0/24      0.0.0.0/0
    2    MASQUERADE  tcp  --  192.168.42.3         192.168.42.3        tcp dpt:3000
    
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8         ADDRTYPE match dst-type LOCAL
    
    Chain DOCKER (2 references)
    num  target     prot opt source               destination
    1    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:9123 to:192.168.42.3:3000
    
    第 1 条附言  ·  2017-05-16 23:58:01 +08:00
    大概知道因为 docker 加的是 nat 规则所以目前 forward 设置是有问题的

    Chain FORWARD (policy DROP)

    改成 ACCEPT 是可行的,还在尝试细化的放开应该怎么做
    第 2 条附言  ·  2017-05-17 00:22:48 +08:00
    端口上的转发规则似乎配置起来无效,还是没弄懂原理
    暂时先设成放开所有的 docker0 输入

    iptables -A FORWARD -i docker0 -j ACCEPT
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2778 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:40 · PVG 22:40 · LAX 06:40 · JFK 09:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.