请教个 docker 或是 iptables 防火墙问题:容器内能 ping 通 ip 但 ping 不通域名,提示“bad address” - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
AllenHua
V2EX    Linux

请教 docker 或是 iptables 防火墙问题:容器内能 ping 通 ip 但 ping 不通域名,提示“bad address”

  •  1
     
  •   AllenHua 2021-04-12 08:54:50 +08:00 8286 次点击
    这是一个创建于 1645 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原帖发在了恩山,https://www.right.com.cn/forum/thread-4109783-1-1.html

    dns 服务器应该不是问题了,可能就是防火墙的问题。用的是 x86 的 openwrt,防火墙是 iptables 程序,这条 iptables 规则怎么写? docker 中的容器 ping 不通域名这个问题是怎么一回事?

    echo echo "91.189.92.201 archive.ubuntu.com" >> /etc/hosts 后就能 ping 通 archive.ubuntu.com 这个域名

    搜到了下面的方法,但是我不知道用 iptables 该怎么解决,救救孩子吧

    firewall-cmd --zOne=public --add-masquerade --permanent firewall-cmd --reload systemctl restart docker 
    第 1 条附言    2021-04-12 09:50:14 +08:00

    docker 默认提供三种网络模式

    1. host
    2. bridge
    3. none

    楼主测试的都是使用的 bridge 桥接网络,宿主机创建了 docker0 网络接口似乎是没有问题的

    ifconfig docker0

    docker0 Link encap:Ethernet HWaddr 02:42:AB:19:BF:95 inet addr:192.168.20.1 Bcast:192.168.21.255 Mask:255.255.254.0 inet6 addr: fe80::42:abff:fe19:bf95/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4449 errors:0 dropped:0 overruns:0 frame:0 TX packets:5611 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4624642 (4.4 MiB) TX bytes:7529616 (7.1 MiB)

    使用默认的网络模式 bridge 启动 alpine docker run -it --rm alpine /bin/ash

    echo "151.101.110.133 dl-cdn.alpinelinux.org" >> /etc/hosts apk update && apk add bind-tools

    然后 dig baidu.com 下面是输出

    dig baidu.com

    ; <<>> DiG 9.16.11 <<>> baidu.com ;; global options: +cmd ;; connection timed out; no servers could be reached

    能 ping 通ip 8.8.8.8 223.5.5.5 这些

    换个思路,将alpine使用 宿主机的模式启动, docker run -it --net=host --rm alpine /bin/ash

    这样就能ping通域名,容器内访问外网正常了

    第 2 条附言    2021-04-12 09:52:54 +08:00

    且这三种网络模式 不可删除

    刚刚格式出了点问题,重新发下

    宿主机docker0

    # ifconfig docker0 docker0 Link encap:Ethernet HWaddr 02:42:AB:19:BF:95 inet addr:192.168.20.1 Bcast:192.168.21.255 Mask:255.255.254.0 inet6 addr: fe80::42:abff:fe19:bf95/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4449 errors:0 dropped:0 overruns:0 frame:0 TX packets:5611 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4624642 (4.4 MiB) TX bytes:7529616 (7.1 MiB) 
    # dig baidu.com ; <<>> DiG 9.16.11 <<>> baidu.com ;; global options: +cmd ;; connection timed out; no servers could be reached # ping baidu.com -c 2 ping: bad address 'baidu.com' 
    第 3 条附言    2021-04-12 10:42:46 +08:00

    在bridge模式下,连在同一网桥上的容器可以相互通信(若出于安全考虑,也可以禁止它们之间通信,方法是在DOCKER_OPTsS变量中设置icc=false,这样只有使用link才能使两个容器通信)。

    Docker可以开启容器间通信(意味着默认配置--icc=true),也就是说,宿主机上的所有容器可以不受任何限制地相互通信,这可能导致拒绝服务攻击。进一步地,Docker可以通过--ip_forward和--iptables两个选项控制容器间、容器和外部世界的通信。

    容器也可以与外部通信,我们看一下主机上的Iptable规则,可以看到这么一条

    -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE 

    这条规则会将源地址为172.17.0.0/16的包(也就是从Docker容器产生的包),并且不是从docker0网卡发出的,进行源地址转换,转换成主机网卡的地址。这么说可能不太好理解,举一个例子说明一下。假设主机有一块网卡为eth0,IP地址为192.168.0.136/24,网关为192.168.0.254。从主机上一个IP为172.17.0.1/16的容器中ping百度(180.76.3.151)。IP包首先从容器发往自己的默认网关docker0,包到达docker0后,也就到达了主机上。然后会查询主机的路由表,发现包应该从主机的eth0发往主机的网关10.10.105.254/24。接着包会转发给eth0,并从eth0发出去(主机的ip_forward转发应该已经打开)。这时候,上面的Iptable规则就会起作用,对包做SNAT转换,将源地址换为eth0的地址。这样,在外界看来,这个包就是从192.168.0.136上发出来的,Docker容器对外是不可见的。

    那么,外面的机器是如何访问Docker容器的服务呢?我们首先用下面命令创建一个含有web应用的容器,将容器的80端口映射到主机的80端口。

    docker run --name web1 -d -p 80:80 nginx docker run --name web2 -d -p 81:80 nginx 

    然后查看Iptable规则的变化,发现多了这样一条规则

    -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.3:80 

    上面内容来自 https://www.cnblogs.com/wangxu01/articles/11316447.html

    下面是楼主机器上的

    20210412104152.png

    此图文本链接:https://paste.ubuntu.com/p/jS8QCM4nvx/

    感觉明明知道是 iptables 防火墙问题但不懂怎么解决 sigh

    第 4 条附言    2021-04-12 19:15:56 +08:00
    十分感谢各位热心大佬的回复,特别感谢 32 楼兄弟跟我追踪问题

    楼主来更新一下进展:后面通过 wireshark 抓包,分析 dns icmp,发现可能是容器内部发起的 ping 请求 icmp 包一开始就被 docker 劫持了,导致后面 port unreachable

    这个固态硬盘暂时搁置 系统还在里面 以后有空再研究

    后面重新刷了一个 openwrt 固件(另外一块 ssd 上):sirpdboy 的固件,就没有这个问题,一进入容器即可 ping 通外网域名和 ip,根本不需要配置 防火墙……
    但这个固件的 /etc/init.d/dockerd 启动脚本有问题 start 都 start 不了,改了一些 shell 代码后 可以 启动了 但是自启(/etc/init.d/dockerd enable )始终不行

    谢谢大家
    50 条回复    2021-04-12 21:56:03 +08:00
    wunsch0106
        1
    wunsch0106  
       2021-04-12 08:59:19 +08:00
    修改下 dns
    AllenHua
        2
    AllenHua  
    OP
       2021-04-12 09:04:46 +08:00
    @wunsch0106 #1 改成了 223.5.5.5 180.76.76.76 8.8.8.8 这种公共 dns 都没成功

    感觉是防火墙问题
    cpstar
        3
    cpstar  
       2021-04-12 09:08:10 +08:00
    你那个 echo 相当于本地解析,所以 archive.ubuntu.com 肯定成功
    判断的方法很简单,关掉防火墙,如果立马正常,那就是防火墙的问题。
    加一条 udp53 的端口放行。但是定义了 wan 和 lan,默认 lan->wan 不拦截。
    codehz
        4
    codehz  
       2021-04-12 09:09:15 +08:00 via Android
    你用 nslookup/dig 测试 dns,别用 ping 测试域名,根本不是一个用途的
    cpstar
        5
    cpstar  
       2021-04-12 09:12:58 +08:00
    原帖说的网络结构比本贴复杂啊
    先找个外网的 IP,测试路由是否通顺,别 docker 里的数据包路由上就不带转发的。
    然后网络结构略复杂,一层 NAT 就是一层损耗,想办法缩减一下结构吧。
    AllenHua
        6
    AllenHua  
    OP
       2021-04-12 09:22:17 +08:00
    @codehz #4 # ping 10.10.10.1 -c 2
    PING 10.10.10.1 (10.10.10.1): 56 data bytes
    64 bytes from 10.10.10.1: seq=0 ttl=64 time=0.458 ms
    64 bytes from 10.10.10.1: seq=1 ttl=64 time=0.256 ms

    --- 10.10.10.1 ping statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max = 0.256/0.357/0.458 ms
    / # ping 8.8.8.8 -c 2
    PING 8.8.8.8 (8.8.8.8): 56 data bytes
    64 bytes from 8.8.8.8: seq=0 ttl=46 time=8.660 ms
    64 bytes from 8.8.8.8: seq=1 ttl=46 time=8.481 ms

    --- 8.8.8.8 ping statistics ---
    2 packets transmitted, 2 packets received, 0% packet loss
    round-trip min/avg/max = 8.481/8.570/8.660 ms
    / # cat /etc/resolv.conf
    search lan
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    / # dig baidu.com

    ; <<>> DiG 9.16.11 <<>> baidu.com
    ;; global options: +cmd
    ;; connection timed out; no servers could be reached

    / # ping baidu.com -c 2
    ping: bad address 'baidu.com'

    我的宿主机 是 10.10.10.1

    docker 的 dns 指定了 8.8.8.8 和 8.8.4.4

    能 ping 通 8.8.8.8 但是 ping 不通 baidu.com dig 也是超时,没有能到达的服务器
    @cpstar #3
    @cpstar #5
    AllenHua
        7
    AllenHua  
    OP
       2021-04-12 09:23:37 +08:00
    @cpstar #5 房东的路由器 我也没法拆 只能这样了吧,我自己还要在路由上搭建服务 于是只能 docker 内部 192.168.20.x -> 到我的路由器 10.10.10.1 再到房东的 192.168.1.1 然后出去
    AllenHua
        8
    AllenHua  
    OP
       2021-04-12 09:24:32 +08:00
    @cpstar #3 昨晚尝试 关掉了防火墙 /etc/init.d/firewall stop 整个网络都不行了 /捂脸
    codehz
        9
    codehz  
       2021-04-12 09:26:14 +08:00 via Android
    dig 强制指定一个 dns 试试看
    dig @8.8.8.8 g.cn +trace
    AllenHua
        10
    AllenHua  
    OP
       2021-04-12 09:33:13 +08:00
    @codehz #9 谢谢,下面是输出

    # dig @8.8.8.8 g.cn +trace

    ; <<>> DiG 9.16.11 <<>> @8.8.8.8 g.cn +trace
    ; (1 server found)
    ;; global options: +cmd
    ;; connection timed out; no servers could be reached
    oluoluo
        11
    oluoluo  
       2021-04-12 09:34:16 +08:00
    `iptables -A INPUT -p udp --dport 53 -j ACCEPT` 加个这个访问规则可不可以呢
    AllenHua
        12
    AllenHua  
    OP
       2021-04-12 09:44:18 +08:00
    @oluoluo #11 还是不可以 感谢。我附言一下最新“进展”
    xuanbg
        13
    xuanbg  
       2021-04-12 09:58:10 +08:00
    没有复杂网络需求的,容器一律使用宿主机网络,也就是 host 。
    codehz
        14
    codehz  
       2021-04-12 09:58:11 +08:00 via Android
    看起来是 udp 53 连接被阻止了,试试+tcp 的选项(附加到后面,另外多测试几种 dns 服务器,难说是抽风了)
    应该就是防火墙的配置问题(((
    AllenHua
        15
    AllenHua  
    OP
       2021-04-12 10:08:48 +08:00
    @xuanbg #13 好的 谢谢
    @codehz #14 感觉是 iptables 配置的问题

    `iptables -t nat -vnL` 执行这一句 输出没有 docker0 这个接口的相关内容(防火墙小白阵亡……

    https://www.cnblogs.com/wangxu01/articles/11316447.html 参考这个 感觉复杂 头大♂
    Jirajine
        16
    Jirajine  
       2021-04-12 10:17:16 +08:00 via Android
    docker 的网络模式命名非常迷惑人,这个“bridge”模式在其他虚拟机等类似情况下都叫“nat 模式”,而对应传统虚拟机的 bridge 模式在 docker 里是 macvlan (类似但不同),而真正的 bridge 模式 docker 并不支持。
    cpstar
        17
    cpstar  
       2021-04-12 10:50:47 +08:00
    哈,firewall 不能直接关,我好像忘了这茬事了。因为 iptables 上是不是带着路由转发呢,哎,不对啊,路由和 iptables 应当是两码事。

    从 6#的情况看,肯定 UDP53 被拦截了。你定义一下 firewall 的区域。

    然后我没整明白那个 10.10.10.x 是个什么存在,也就是 192.168.1.1-10.10.10.1-192.168.20.x ?有点怪。。。
    AllenHua
        18
    AllenHua  
    OP
       2021-04-12 11:07:38 +08:00
    @cpstar #17
    @codehz #14
    @oluoluo #11
    ![20210412110547.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210412110547.png)

    ```
    ACCEPT tcp -- anywhere anywhere tcp dpt:domain /* !fw3: tcpudp53 */
    ACCEPT udp -- anywhere anywhere udp dpt:domain /* !fw3: tcpudp53 */
    ```

    放行了 dns 查询的 53 端口 tcp+udp 容器内还是 ping 不通域名
    bowser1701
        19
    bowser1701  
       2021-04-12 11:07:56 +08:00
    试试 `dig @119.29.29.29 baidu.com` 和 `dig baidu.com` 比较一下看看是不是本地的 DNS server 出问题了。
    zhangsanfeng2012
        20
    zhangsanfeng2012  
       2021-04-12 11:10:24 +08:00
    你的路由器是 openrt,那你 openwrt 中能 ping 通域名吗?你的 docker 装在 openwrt 的机子里面?
    AllenHua
        21
    AllenHua  
    OP
       2021-04-12 11:23:48 +08:00
    @bowser1701 #19
    @zhangsanfeng2012 #20

    # ping z.cn -c 4
    PING z.cn (54.222.60.252): 56 data bytes
    64 bytes from 54.222.60.252: seq=0 ttl=229 time=30.494 ms
    64 bytes from 54.222.60.252: seq=1 ttl=229 time=30.804 ms
    64 bytes from 54.222.60.252: seq=2 ttl=229 time=30.618 ms
    64 bytes from 54.222.60.252: seq=3 ttl=229 time=30.987 ms

    --- z.cn ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 30.494/30.725/30.987 ms


    # dig z.cn

    ; <<>> DiG 9.17.11 <<>> z.cn
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21711
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;z.cn. IN A

    ;; ANSWER SECTION:
    z.cn. 599 IN A 54.222.60.252

    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
    ;; WHEN: Mon Apr 12 11:19:33 CST 2021
    ;; MSG SIZE rcvd: 49

    本地搭建了 dnsmasq 任何局域网的 dns 请求都请求 10.10.10.1:53


    @cpstar #17 不好意思 造成理解上困难了

    房东的路由器(我不能乱动)是 192.168.1.1
    我的路由器是 10.10.10.1 (然后我的其他设备都是 10.10.10.x )
    docker 创建的虚拟网卡 是这个网段 192.168.20.0/23
    docker0 自身的 ip 地址是 192.168.20.1
    docker 中使用 bridge 网络的容器默认网关都是 192.168.20.1 这些容器的 ip 地址是 192.168.20.x
    AllenHua
        22
    AllenHua  
    OP
       2021-04-12 11:24:44 +08:00
    @zhangsanfeng2012 #20 是的 docker 安装在 openwrt 里。openwrt 中可以 ping 通域名的,我现在各个设备上网都是没问题的呀
    mlcq
        23
    mlcq  
       2021-04-12 11:39:48 +08:00
    能 ping 通 ip,ping 不同域名,还是 dns 解析的问题
    bowser1701
        24
    bowser1701  
       2021-04-12 11:40:30 +08:00
    @AllenHua 你是在 container 里面 dig 的嘛,我意思是可以测试下你的容器里的 DNS server
    caicaiwoshishui
        25
    caicaiwoshishui  
       2021-04-12 11:43:34 +08:00 via iPhone
    我的 openwrt 不能访问国内,全局就能访问,ping
    不同 baidu.com ,不知道怎么处理,哪里有问题。
    Openwrt 用了 adgurd home 但是注释了防火墙转 53 的规则。
    cpstar
        26
    cpstar  
       2021-04-12 11:50:12 +08:00
    18# ,感觉那个接受入站,应该是接受出站。入站成了外网访问你的 53,而不是你的子网要访问外边的 53 。

    然后,合并 @caicaiwoshishui 的问题,openwrt 内置了很多个 dns 有关的服务,我当时是从 53 端口(查看监听程序),一个一个往上捋,adguard 、smartdns,还有几个,一个一个挨个关闭,各种拦截广告、防止 DNS 污染的,是好事,但也挺闹心,比如某些依赖或者看似广告网址的,无故被拦截,然后导致 APP 应用功能不能用,最后关掉各种 DNS 过滤器,一下子好了。
    AllenHua
        27
    AllenHua  
    OP
       2021-04-12 11:51:54 +08:00
    @bowser1701 #24

    @mlcq #23

    ![20210412115049.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210412115049.png)

    无法回复文本了 提示我 “请不要在每一个回复中都包括外链,这看起来像是在 spamming” sigh
    zhangsanfeng2012
        28
    zhangsanfeng2012  
       2021-04-12 11:57:00 +08:00 via Android
    openwrt 里面抓下包看看,tcpdump -i docker0 -w /tmp/test.pcap,然后在容器里面 dig 一下
    wunsch0106
        29
    wunsch0106  
       2021-04-12 12:02:31 +08:00
    ping localhost 试一下 还是 bad address 那肯定就是 dns 问题了, /etc/resolv.conf 配置了可能没生效把。
    cpstar
        30
    cpstar  
       2021-04-12 12:04:12 +08:00
    @zhangsanfeng2012 28# 越整越高深了,LZ 吃不消。。。哈

    这么说吧,ping 走的 ICMP 数据包,能 ping 通,证明 10.10.10.1 转发了 ICMP 包。
    然后可以在 docker 里去 telnet 任何一台外网机器的 80,比如获取 t.cn 的 IP 之后,telnet t.cn 的 ip 80,这个能够检测 TCP 路径是否畅通,最后就是 UDP 是否畅通了,我的知识范围,还没找到一个能够检测远端 UDP 畅通的有效办法
    AllenHua
        31
    AllenHua  
    OP
       2021-04-12 12:51:37 +08:00
    @zhangsanfeng2012 #28
    抓到了这些内容

    ```
    `BEN+@5:o baiducom)

    Ej;EN+@5:n;o baiducom)

    `BEN@T15:o baiducom)

    Ej@EN@15:r?o baiducom)

    `BEN@5:o baiducom)

    Ej;EN@5:n;o baiducom)

    `BEN@F15:o baiducom)

    Ej]@EN@15:r?o baiducom)

    `BEN@v5:o baiducom)

    E;EN5:n;o baiducom)

    `BEN'@"15:o baiducom)

    EjH@EN'@15:r?o baiducom)
    ```


    @wunsch0106 #29 容器内 ping locahost 或者 127.0.0.1 都是 ok 的
    @cpstar #30

    # telnet 10.10.10.1 88
    Connected to 10.10.10.1

    # telnet dl-cdn.alpinelinux.org 443
    Connected to dl-cdn.alpinelinux.org

    说明 TCP 是通的
    lcdtyph
        32
    lcdtyph  
       2021-04-12 12:53:23 +08:00
    排除一下 53 端口的问题
    dig www.baidu.com @202.141.162.123 -p5353
    能正常查询么
    AllenHua
        33
    AllenHua  
    OP
       2021-04-12 12:55:06 +08:00
    @lcdtyph #32 能!大佬 能继续分析一下吗
    AllenHua
        34
    AllenHua  
    OP
       2021-04-12 12:55:33 +08:00
    @lcdtyph #32 udp 53 端口 被防火墙阻断了吗
    lcdtyph
        35
    lcdtyph  
       2021-04-12 12:59:01 +08:00
    @AllenHua #34
    看上去是的了,openwrt 上有安装 clash 类的工具么?

    在此之前先看一下换个 dns 能不能返回结果吧,8888 有的地方直接封了
    dig <domain> @202.141.162.123
    AllenHua
        36
    AllenHua  
    OP
       2021-04-12 13:33:08 +08:00
    @lcdtyph #35 有安装 openclash 但还没启用,adguardhome 也没启动 所以应该不用考虑他们会带来影响

    202.141.162.123 这个是 中科大电信 dns 吧 使用 53 端口不能查,但使用 5353 可以

    ![20210412132941.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210412132941.png)

    防火墙里加了这条 但是似乎没起作用
    lcdtyph
        37
    lcdtyph  
       2021-04-12 13:36:43 +08:00 via iPhone
    @AllenHua
    对,是中科大 dns,因为有非标准端口方便调试
    找个地方把 iptables -vnL 和 iptables -t nat -vnL 和 iptables -t mangle -nvL 贴出来看看吧
    AllenHua
        38
    AllenHua  
    OP
       2021-04-12 13:45:54 +08:00
    @lcdtyph #37 能通过 tg 沟通一下吗 base64 encoded: aHR0cHM6Ly90Lm1lL2FsbGVuaHVh
    cpstar
        39
    cpstar  
       2021-04-12 13:48:34 +08:00
    #36 是吧,一堆自带的看起来方便但是各种卸载很闹心的应用,反而使使用变得麻烦。不用就卸载吧,一个一个全卸载干净。

    看一下 UDP53 谁监听了,netstat -unlp,然后看配置做了什么上游 DNS,然后顺藤摸瓜。
    AllenHua
        40
    AllenHua  
    OP
       2021-04-12 13:54:23 +08:00
    @cpstar #39 有时候 这些应用的确挺有用 但是排查起来问题 需要有足够的知识和耐心,不然真的是很闹心的
    @lcdtyph #37

    root@dkRouter:~# iptables -t nat -vnL
    Chain PREROUTING (policy ACCEPT 804 packets, 114K bytes)
    pkts bytes target prot opt in out source destination
    888 120K prerouting_rule all -- * * 0.0.0.0/0 0.0.0.0/0 /* !fw3: Custom prerouting rule chain */
    836 116K zone_lan_prerouting all -- br-lan * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
    11 888 zone_wan_prerouting all -- eth4 * 0.0.0.0/0 0.0.0.0/0 /* !fw3 */
    84 5940 REDIRECT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 redir ports 53
    0 0 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 redir ports 53

    完整的在 https://paste.ubuntu.com/p/MbhNMXPdTc/

    是不是转发 dns 请求的目的地址是所有地址导致的? 应该指定一下 10.10.10.1:53 ?

    对于 iptables 的 四表五链不是很懂(啊 摔!
    AllenHua
        41
    AllenHua  
    OP
       2021-04-12 13:59:53 +08:00
    @cpstar #39 dnsmasq 和 avahi-daemon 前者监听 53 后者监听了 5353
    # netstat -unlp |grep 53
    udp 0 0 127.0.0.1:53 0.0.0.0:* 9303/dnsmasq
    udp 0 0 10.10.10.1:53 0.0.0.0:* 9303/dnsmasq
    udp 0 0 0.0.0.0:5353 0.0.0.0:* 6347/avahi-daemon:
    udp 0 0 :::5353 :::* 6347/avahi-daemon:
    zhangsanfeng2012
        42
    zhangsanfeng2012  
       2021-04-12 14:07:55 +08:00
    iptables -D PREROUTING -t nat -p udp --dport 53 -j REDIRECT --to-ports 53 试一下删掉 53 端口转发

    然后贴一下 iptables-save -t nat
    nxforce
        43
    nxforce  
       2021-04-12 14:35:18 +08:00
    我貌似遇到这个问题,容器内 DNS 解析的问题,都是和防火墙有关的,因为 docker 的 iptable 规则是独立于管理者自己设置的规则的,不能被 admin 统筹管理端口开放规则,建议防火墙的前端不要采用 nftables,直接采用 iptables,这样子就可以使用了,另外关于 docker 的防火墙规则,建议还要依靠外部的防火墙实施端口隔离吧,搞本季内部的防火墙很容易导致冲突。
    nxforce
        44
    nxforce  
       2021-04-12 14:38:31 +08:00
    docker run -it --net=host --rm alpine /bin/ash

    这个是有比较大风险的,相当于无视 docker 容器的网络隔离特性,一下子把那个容器的网络提升至最高,理论上它可以访问任何运行中的容器。
    magua
        45
    magua  
       2021-04-12 15:29:01 +08:00
    有试过修改容器内的 dns 服务器的 ip 吗?我之前在 k8s 的 pod 中也遇到过类似的问题,修改容器内的 dns 好了。
    OldCarMan
        46
    OldCarMan  
       2021-04-12 17:30:57 +08:00
    AllenHua
        47
    AllenHua  
    OP
       2021-04-12 19:08:35 +08:00
    @zhangsanfeng2012 #42 实在是没辙了

    用 wireshark 抓包 发现问题 应该还是 iptables 的配置问题
    @joyhub2140 #43 谢谢分享!
    @joyhub2140 #44 是这样 本来使用容器的主要目的就是将容器与宿主机隔离开来 容器共享主机 ip 不是一个明智之举 谢谢指出
    @magua #45 没搞好了 后面重新刷了一个固件 可以了
    @OldCarMan #46 这个就是正文中提到的这个吧

    ```
    firewall-cmd --zOne=public --add-masquerade --permanent
    firewall-cmd --reload
    systemctl restart docker
    ```
    zhangsanfeng2012
        48
    zhangsanfeng2012  
       2021-04-12 19:14:08 +08:00
    @AllenHua 删掉 53 重定向也不行吗
    AllenHua
        49
    AllenHua  
    OP
       2021-04-12 19:17:27 +08:00
    @zhangsanfeng2012 #48 当时是把那两条规则删掉了 不行 我新增了附言 层主有兴趣 我们可以 tg 私聊
    OldCarMan
        50
    OldCarMan  
       2021-04-12 21:56:03 +08:00
    @AllenHua 你估计没看全,只是第一项允许防火墙转发 NAT 跟你正文中提到的一样,后面还有两项配置(开启 IPv4 转发和允许数据包通过 docker bridge network )你可以设置一下,看看结果。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2299 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 16:05 PVG 00:05 LAX 09:05 JFK 12:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86