Lorsque j'accède à ma plage de ports locaux sur Debian 7, je peux voir que ma plage de ports éphémères est la suivante :
cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
Mon /etc/sysctl.conf
est vide.
Normalement, cela signifie que toutes les demandes provenant de ce résolveur de serveur de noms doivent utiliser les ports de cette plage. Cependant, l'utilisation de tcpdump
Quand je regarde une demande et une réponse DNS créées avec dig
Je peux voir que la demande peut utiliser un port d'envoi aussi bas que 1500.
Par exemple, dans l'exemple suivant tcpdump
exemple ( tcpdump udp and port 53 and host server.domain
), la requête provenait du port 15591. Ce port est bien inférieur à la limite inférieure du serveur pour les ports éphémères que nous avons vue précédemment : 32768. En d'autres termes, en utilisant dig
les requêtes DNS sont hors de la plage de ports locaux.
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)
Je me demande ce qui a pu changer la plage de ports des ports éphémères sur mes Debian 7 & 8. La seule chose qui vaut peut-être la peine d'être mentionnée. J'ai utilisé sur l'un d'entre eux ifenslave
& on utilise ifenslave
pour relier deux ports ethernet.
Le résolveur est le serveur lui-même et
#cat /etc/resolv.conf
nameserver ::1
mais il fait exactement la même chose avec nameserver 127.0.0.1
parce que les partages ipv4 & ipv6 /proc/sys/net/ipv4/ip_local_port_range
( référence ) & je l'ai également essayé.
Pour éviter toute confusion avec IPv6, j'ai décidé d'utiliser uniquement Ipv4. J'ai seulement ajouté nameserver 127.0.0.1
a /etc/resolv.conf
.
Les résultats ci-dessous sont avec nameserver 127.0.0.1
en /etc/resolv.conf
seulement.
Ensuite, j'ai émis rndc flush
pour vider le cache DNS du résolveur et dig google.com
J'ai ouvert une deuxième fenêtre de terminal et j'ai tapé tcpdump udp and port 53
:
Beaucoup d'enregistrements mais j'ai remarqué que, quelle que soit la requête (A, PTR...) et l'hôte récepteur, les requêtes DNS PEUVENT être émises depuis un port inférieur à 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)=[{"\251\261\1\0\0\1\0\0\0\0\0\0\3www\6google\3com\0\0\1\0\1", 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)=[{"\251\261\201\200\0\1\0\1\0\4\0\4\3www\6google\3com\0\0\1\0\1"..., 65535}], msg_controllen=32, {cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */, ...}, msg_flags=0}, 0) = 184
Ce problème est lié à mon pare-feu. Étant donné que les ports éphémères peuvent être émis de (à mon avis) 1024 à 65000, cela signifie que je ne peux pas bloquer le trafic d'entrée provenant de ports supérieurs à 1024, comme dans le passé. Si je fais cela, je ralentirai ou bloquerai la résolution DNS.
MISE À JOUR : merci, je comprends que si je veux utiliser un serveur comme résolveur DNS, cela signifie que je dois considérer que la plage de ports UDP 1024:65535 est la plage de ports éphémères.