AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1068807
Accepted
user123963
user123963
Asked: 2021-07-07 08:31:41 +0800 CST2021-07-07 08:31:41 +0800 CST 2021-07-07 08:31:41 +0800 CST

O Docker macvlan descarta o tráfego UDP (DNS), o TCP funciona

  • 772

Estou tentando usar macvlanpara criar um container que seja um cidadão de primeira classe na minha lan .

Estou usando um IP estático (embora eu entenda que usando alguns 'truques' é possível usar DHCP também).

Eu entendo que é possível fazer isso com a hostrede , mas estou planejando executar 2 contêineres DNS separados e quero que cada um deles tenha um IP diferente, então hostnão é a solução que estou procurando.

Minha configuração

Detalhes sobre minha configuração de rede e host:

  • Roteador Unifi UGS, IP interno:192.168.1.254
  • Máscara de rede:192.168.1.0/24
  • SO do host: Ubuntu 20.04 LTS (Focal Fossa)
  • Versão do Docker 20.10.2, compilação 20.10.2-0ubuntu1~20.04.2
  • versão do docker-compose 1.28.5, compilação c4eb3a1f
  • O IP do host é recebido por uma interface de ponte (chamada br-lan) que está conectada à minha porta ethernet.

Estou usando [adguard-home][2]como imagem do contêiner de teste, abaixo está a saída de configuração do docker-compose:

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

O que funciona

Isso realmente funciona para TCP, posso acessar a WebUI (portas 3000 e 80) e, desde que as consultas DNS sejam feitas sobre TCP, funciona (porta tcp 53).

O próprio contêiner pode acessar a web e, por sua vez, o contêiner pode ser acessado pelo host, bem como pelas máquinas na LAN.

O que não funciona

As consultas DNS UDP falham.

Como estou testando?

Em uma máquina Windows 10 na rede, estou executando o seguinte comando do PowerShell:

# 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

Qual é a minha dúvida e porque estou postando aqui?

Não consigo descobrir por que o UDP falha enquanto o TCP funciona. Minhas pesquisas sobre UDP macvlannão foram frutíferas, e eu esperava que alguém aqui pudesse me orientar sobre como solucionar isso para que eu possa identificar a falha no meu design ou explicar o que posso fazer para corrigir isso.

networking udp internal-dns docker docker-compose
  • 2 2 respostas
  • 786 Views

2 respostas

  • Voted
  1. Best Answer
    user123963
    2021-07-12T06:42:03+08:002021-07-12T06:42:03+08:00

    Parece que o problema tinha algo a ver com a configuração da minha rede.

    Após uma reinicialização, a comunicação UDP começou a funcionar.

    Observe (não relacionado à pergunta, mas pode ser de interesse), que por padrão a comunicação entre o contêiner e o host é bloqueada por padrão.

    Apenas mais alguns detalhes: acabei usando o ipvlan, que funcionou melhor. Para conectar ao host (que ipvlan e macvlan bloqueiam), adicionei uma bridge e usei um ip local (arquivo hosts na máquina local resolveu esse problema).

    O problema original não está descrito corretamente e, portanto, excluirei esta resposta mais tarde.

    • 0
  2. Morteza Mohammadi
    2021-07-12T07:18:28+08:002021-07-12T07:18:28+08:00

    reiniciar não é solução.

    Eu acho que seu problema foi resolvido após a reinicialização porque o início automático do serviço de firewall não está ativado e agora seu firewall não foi iniciado.

    no Ubuntu 20 você pode gerenciar o firewall com o ufw e você deve adicionar a porta 53 ao firewall

    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

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve