dnsmasq em execução no namespace não pode receber consultas de dentro do namespace

1

Eu configurei um dnsmasq.conf padrão com praticamente nenhuma modificação, exceto:

listen-address=192.168.42.2
interface=veth1 # Also tried without
server=8.8.8.8

E meu /etc/hosts é assim:

127.0.0.1    test.testing.com

Eu criei um namespace assim:

# ip netns add spacename
# ip link add veth0 type veth peer name veth1
# ip link set veth1 netns spacename
# ip addr add 192.168.42.1/24 dev veth0
# ip link set dev veth0 up
# ip netns exec spacename ip addr add 192.168.42.2/24 dev veth1
# ip netns exec spacename ip link set dev veth1 up
# ip netns exec spacename ip route add default via 192.168.42.1
# iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eno1 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ip netns exec spacename /bin/bash
(namespace)# echo 1 > /proc/sys/net/ipv4/ip_forward

Isso tudo configura tudo de bom e elegante.
Posso confirmar via:

[root@arch Torxed]# ip netns list
spacename (id: 0)

Aqui é onde as coisas ficam estranhas

Eu crio um shell permanente dentro do namespace e inicio o dnsmasq.

# ip netns spacename /bin/bash
(namespace)# /usr/bin/dnsmasq -k --enable-dbus --user=dnsmasq --pid-file --log-queries --no-daemon

E tudo começa bem. Eu confirmo isso emitindo:

(namespace)# ss -lun
State                Recv-Q                Send-Q                                Local Address:Port                                 Peer Address:Port                
UNCONN               0                     0                                           0.0.0.0:53                                        0.0.0.0:*                   
UNCONN               0                     0                                              [::]:53                                           [::]:* 

E do lado de fora, não há porta escutando. Como pretendido. Mas sempre que eu faço:

(namespace)# dig test.testing.com @192.168.42.2

Nada acontece. Mas quando eu faço

# dig test.testing.com @192.168.42.2
;test.testing.com.               IN      A

;; ANSWER SECTION:
test.testing.com.        0       IN      A       127.0.0.1

;; Query time: 0 msec
;; SERVER: 192.168.42.2#53(192.168.42.2)
;; WHEN: Sat Nov 24 19:58:37 CET 2018
;; MSG SIZE  rcvd: 60

Funciona ... fora do namespace.
Por que em internets green earth não consigo cavar de dentro do namespace onde o dnsmasq está rodando ?

Eu verifiquei novamente o iptables, ele não tem nada suspeito dentro ou fora do namespace:

[root@arch Torxed]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Parece o mesmo dentro do namespace.
Eu não consigo pingar meu namespace ip:

(namespace)# ping 192.168.42.2 -c 1
PING 192.168.42.2 (192.168.42.2) 56(84) bytes of data.

--- 192.168.42.2 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

Ping no outro lado do espaço de nomes funciona tho, o receptor no "domínio padrão":

(namespace)# ping 192.168.42.1 -c 1
PING 192.168.42.1 (192.168.42.1) 56(84) bytes of data.
64 bytes from 192.168.42.1: icmp_seq=1 ttl=64 time=0.024 ms

--- 192.168.42.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms

O que significa que o espaço de nomes não pode fazer o ping do próprio IP da interface de namespace.

Tentei tcpdump -vv -n -i veth1 de dentro do namespace também. Não me dá nada quando tento pingar o ip atribuído a veth1 . Mas quando eu pingar veth0 (192.168.42.1) eu recebo os pacotes sem nenhum problema.

Eu verifiquei:

Nenhum dos quais realmente explica por que isso é ou como resolvê-lo.

lista de verificação

  • Nenhuma outra forma de ponte
  • iptables: ACCEPT all -- anywhere anywhere em todas as tabelas, cadeias e políticas. Não há regras DROP que assim sempre.
  • Nenhum outro firewall instalado ou ativo
  • Todas as interfaces estão ativadas (dupla verificação)
  • Existem rotas de e para o namespace (a tabela de roteamento parece bem)
  • Ping fora - > dentro endereço funciona
  • Ping dentro de - > fora funciona o endereço
  • Ping dentro de - > dentro o não funciona.
  • Ping fora - > fora funciona

Onde eu errei?

    
por Torxed 24.11.2018 / 21:29

1 resposta

0

A resposta é tão boba quando você a vê.
Tudo estava correto, exceto pelo fato de que o namespace loopback device estava inativo.

E como tudo é roteado localmente por lo , essa interface também precisa estar ativa.

# ip netns spacename ip link set up dev lo
# ip netns spacename ip addr add 127.0.0.1/8 dev lo

Resolve o problema. Muito obrigado a TJ- em irc.freenoce.net/#ubuntu

00:51 < TJ-> DoXiD: "ip netns spacename ip link set up dev lo"  :D --- it was down!
00:52 < TJ-> DoXiD: I knew it had something to do with the way localhost is handled, but I didn't look at the basics
00:53 < TJ-> DoXiD: anything routed inside the host uses lo
    
por 25.11.2018 / 00:57