Quando eu vou para o meu intervalo de portas local no Debian 7, eu posso ver que o meu intervalo de portas efêmeras é:
cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
Meu /etc/sysctl.conf
está vazio.
Normalmente, isso significaria que todas as solicitações que saem desse resolvedor de nameserver devem usar portas nesse intervalo. No entanto, usando tcpdump
, quando vejo uma solicitação de DNS & resposta criada com dig
, posso ver que o pedido pode usar uma porta de envio tão baixa quanto 1500.
Por exemplo, no exemplo tcpdump
a seguir ( tcpdump udp and port 53 and host server.domain
), a solicitação veio da porta 15591. Está bem abaixo do limite de portas mais baixo do servidor para portas efêmeras que vimos anteriormente: 32768. Em outras palavras, usando dig
, as solicitações de DNS estão fora do intervalo de portas locais.
11:57:33.704090 IP baremetal.15591 > M.ROOT-SERVERS.NET.domain: 41939% [1au] A? r.arin.net. (39)
11:57:33.704400 IP baremetal.41573 > M.ROOT-SERVERS.NET.domain: 40945% [1au] A? t.arin.net. (39)
11:57:33.704541 IP baremetal.22658 > M.ROOT-SERVERS.NET.domain: 44090% [1au] AAAA? t.arin.net. (39)
11:57:33.705295 IP baremetal.13277 > M.ROOT-SERVERS.NET.domain: 42356% [1au] A? v.arin.net. (39)
11:57:33.705499 IP baremetal.48755 > M.ROOT-SERVERS.NET.domain: 32253% [1au] A? w.arin.net. (39)
11:57:33.705639 IP baremetal.55309 > M.ROOT-SERVERS.NET.domain: 64660% [1au] AAAA? w.arin.net. (39)
11:57:33.705812 IP baremetal.56652 > M.ROOT-SERVERS.NET.domain: 43023% [1au] A? y.arin.net. (39)
11:57:33.706012 IP baremetal.26383 > M.ROOT-SERVERS.NET.domain: 42377% [1au] AAAA? y.arin.net. (39)
11:57:33.706172 IP baremetal.12895 > M.ROOT-SERVERS.NET.domain: 13206% [1au] AAAA? z.arin.net. (39)
Gostaria de saber o que poderia ter mudado o intervalo de porta de portas efêmeras no Debian 7 & 8. Única coisa que talvez valha a pena mencionar. Eu usei em um deles ifenslave
& um usa ifenslave
para ligar duas portas ethernet.
O resolvedor é o próprio servidor e
#cat /etc/resolv.conf
nameserver ::1
mas faz exatamente o mesmo com nameserver 127.0.0.1
porque ipv4 & compartilhamentos de ipv6 /proc/sys/net/ipv4/ip_local_port_range
( referência ) & também tentei.
Para evitar confusão com o IPv6, decidi usar apenas o Ipv4. Eu adicionei apenas nameserver 127.0.0.1
a /etc/resolv.conf
.
Os resultados abaixo estão com nameserver 127.0.0.1
em /etc/resolv.conf
apenas.
Em seguida, emiti rndc flush
para liberar o cache DNS do resolvedor e dig google.com
Eu abri uma segunda janela de terminal e digitei tcpdump udp and port 53
:
Muitos registros, mas notei, qualquer que seja a solicitação (A, PTR ...) & receber o host, solicitações de DNS podem ser emitidas a partir da porta inferior a 32768
>strace -f dig www.google.com 2>&1 | egrep 'sendmsg|recvmsg|connect|bind'
open("/usr/lib/libbind9.so.80", O_RDONLY) = 3
[pid 10651] bind(20, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[pid 10651] recvmsg(20, 0x7f5dd95cab60, 0) = -1 EAGAIN (Resource temporarily unavailable)
[pid 10651] sendmsg(20, {msg_name(16)={sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"11cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
11:57:33.704090 IP baremetal.15591 > M.ROOT-SERVERS.NET.domain: 41939% [1au] A? r.arin.net. (39)
11:57:33.704400 IP baremetal.41573 > M.ROOT-SERVERS.NET.domain: 40945% [1au] A? t.arin.net. (39)
11:57:33.704541 IP baremetal.22658 > M.ROOT-SERVERS.NET.domain: 44090% [1au] AAAA? t.arin.net. (39)
11:57:33.705295 IP baremetal.13277 > M.ROOT-SERVERS.NET.domain: 42356% [1au] A? v.arin.net. (39)
11:57:33.705499 IP baremetal.48755 > M.ROOT-SERVERS.NET.domain: 32253% [1au] A? w.arin.net. (39)
11:57:33.705639 IP baremetal.55309 > M.ROOT-SERVERS.NET.domain: 64660% [1au] AAAA? w.arin.net. (39)
11:57:33.705812 IP baremetal.56652 > M.ROOT-SERVERS.NET.domain: 43023% [1au] A? y.arin.net. (39)
11:57:33.706012 IP baremetal.26383 > M.ROOT-SERVERS.NET.domain: 42377% [1au] AAAA? y.arin.net. (39)
11:57:33.706172 IP baremetal.12895 > M.ROOT-SERVERS.NET.domain: 13206% [1au] AAAA? z.arin.net. (39)
#cat /etc/resolv.conf
nameserver ::1
>strace -f dig www.google.com 2>&1 | egrep 'sendmsg|recvmsg|connect|bind'
open("/usr/lib/libbind9.so.80", O_RDONLY) = 3
[pid 10651] bind(20, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[pid 10651] recvmsg(20, 0x7f5dd95cab60, 0) = -1 EAGAIN (Resource temporarily unavailable)
[pid 10651] sendmsg(20, {msg_name(16)={sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"11%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%wwwgooglecom%pre%%pre%%pre%", 32}], msg_controllen=0, msg_flags=0}, 0 <unfinished ...>
[pid 10651] <... sendmsg resumed> ) = 32
[pid 10651] recvmsg(20, {msg_name(16)={sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"1110%pre%%pre%%pre%%pre%wwwgooglecom%pre%%pre%%pre%"..., 65535}], msg_controllen=32, {cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */, ...}, msg_flags=0}, 0) = 184
%pre%%pre%%pre%%pre%wwwgooglecom%pre%%pre%%pre%", 32}], msg_controllen=0, msg_flags=0}, 0 <unfinished ...>
[pid 10651] <... sendmsg resumed> ) = 32
[pid 10651] recvmsg(20, {msg_name(16)={sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, msg_iov(1)=[{"1110%pre%%pre%%pre%%pre%wwwgooglecom%pre%%pre%%pre%"..., 65535}], msg_controllen=32, {cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */, ...}, msg_flags=0}, 0) = 184
Esse problema está relacionado ao meu firewall. Como as portas efêmeras podem ser emitidas de (meu próprio palpite) 1024 a 65000, isso significa que não posso bloquear o tráfego de entrada proveniente de portas superiores a 1024, como nos velhos tempos. Se eu fizer isso, vou diminuir ou bloquear a resolução de DNS.
UPDATE: obrigado, eu entendo que se eu quiser usar um servidor como um resolvedor de DNS, isso significa que eu tenho que considerar que o intervalo de portas UDP 1024: 65535 é o intervalo de portas efêmeras.