首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker macvlan丢弃UDP (DNS)流量,TCP工作

Docker macvlan丢弃UDP (DNS)流量,TCP工作
EN

Server Fault用户
提问于 2021-07-06 16:31:41
回答 2查看 1.3K关注 0票数 0

我正在尝试使用macvlan来创建一个容器,它是我局域网上的头等公民。

我使用的是静态IP (虽然我理解使用一些“技巧”-使用DHCP也是可能 )。

我理解用host网络来实现它的可能性,但是我计划运行两个独立的DNS容器,我希望每个容器都有不同的IP,所以host不是我想要的解决方案。

我的设置

有关我的网络和主机设置的详细信息:

  • Unifi路由器,内部IP:192.168.1.254
  • 网络掩码:192.168.1.0/24
  • 主机操作系统: Ubuntu 20.04 LTS (焦点Fossa)
  • Docker版本20.10.2,构建20.10.2-0ubuntu1~20.04.2
  • docker-编写版本1.28.5,构建c4eb3a1f
  • 主机IP是通过连接到我的以太网端口的桥接口(名为br-lan)接收的。

我使用[adguard-home][2]作为测试容器的映像,下面是docker输出:

代码语言:javascript
运行
复制
version: '3.7'
networks:
  br-lan:
    driver: macvlan
    driver_opts:
      parent: br-lan
    ipam:
      config:
      - gateway: 192.168.1.254
        subnet: 192.168.1.0/24
      driver: default

services:
  adguard:
    dns: # adguards default upstream DNS servers
    - 9.9.9.10
    - 149.112.112.10
    - 2620:fe::10
    - 2620:fe::fe:10
    image: adguard/adguardhome
    mac_address: '00:01:02:03:04:05:06:07' # Some randomized MAC address
    mem_limit: 500mb
    networks:
      br-lan:
        ipv4_address: 192.168.1.53
    restart: unless-stopped
    volumes:
    - /etc/localtime:/etc/localtime:ro
    - /srv/adguard/data/conf:/opt/adguardhome/conf:rw
    - /srv/adguard/data/work:/opt/adguardhome/work:rw

什么工作

这实际上适用于TCP,我可以访问WebUI (端口3000和80),只要在TCP上完成DNS查询,它就能工作(tcp端口53)。

容器本身可以访问web,反过来,主机和局域网上的机器也可以访问容器。

什么不起作用

UDP DNS查询失败。

我是怎么测试的?

在网络中的Windows 10机器上,我运行以下PowerShell命令:

代码语言:javascript
运行
复制
# Default (UDP) DNS Query - Fails
❯ Resolve-DnsName -DnsOnly -Server 192.168.1.53 -Name stackoverflow.com # Test regular UDP DNS Query
<# The Error output is
Resolve-DnsName : stackoverflow.com : DNS name does not exist
At line:1 char:1
+ Resolve-DnsName -DnsOnly -Server 192.168.1.53 -Name stackoverflow.c ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (stackoverflow.com:String) [Resolve-DnsName], Win32Exception
    + FullyQualifiedErrorId : DNS_ERROR_RCODE_NAME_ERROR,Microsoft.DnsClient.Commands.ResolveDnsName
#>

# TCP DNS Query - works
❯ Resolve-DnsName -DnsOnly -Server 192.168.1.53 -Name stackoverflow.com -TcpOnly

Name                                           Type   TTL   Section    IPAddress
----                                           ----   ---   -------    ---------
stackoverflow.com                              A      2507  Answer     151.101.65.69
stackoverflow.com                              A      2507  Answer     151.101.129.69
stackoverflow.com                              A      2507  Answer     151.101.193.69
stackoverflow.com                              A      2507  Answer     151.101.1.69

,我的问题是什么,我为什么在这里发帖?

我不明白为什么在TCP工作时UDP会失败。我对UDP和macvlan的搜索并没有取得什么成果,我希望这里的人能够指导我如何解决这个问题,这样我就可以识别我的设计中的缺陷,或者解释我能做些什么来解决这个问题。

EN

回答 2

Server Fault用户

回答已采纳

发布于 2021-07-11 14:42:03

看来这个问题和我的网络设置有关。

重新启动后,UDP通信开始工作。

注意(与问题无关,但可能感兴趣),默认情况下,容器和主机之间的通信在默认情况下被阻塞。

只是更多的细节:我最终使用了ipvlan,这样做效果更好。为了连接到主机( ipvlan和macvlan块),我添加了一个桥并使用本地ip (本地机器上的主机文件解决了这个问题)。

原来的问题没有得到正确的描述,所以我稍后将删除这个答案。

票数 0
EN

Server Fault用户

发布于 2021-07-11 15:18:28

重新启动并不能解决问题。

我想您的问题在重新启动后得到了解决,因为防火墙服务的自动启动是不启用的,而现在您的防火墙还没有启动。

在ubuntu 20中,您可以使用ufw管理防火墙,并且必须在防火墙中添加端口53。

代码语言:javascript
运行
复制
sudo systemctl start ufw # start firewall service
sudo systemctl enabled ufw # enable automatically start firewall service
sudo ufw allow 53 # open tcp/udp dns port
sudo ufw reload # apply firewall rule
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1068807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档