本地端口和运输端口之间的差异 UDP 使用 dig 在名称服务器转换器上 Debian

当我转向我当地的港口范围时 Debian 7, 我看到我的临时端口范围:

cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000

我的

/etc/sysctl.conf

空的。

这通常意味着该名称服务器转换器的所有请求必须使用此范围的端口。 但是,使用

tcpdump

, 当我看待请求并回答 DNS, 用帮助创造

dig

, 我看到请求可以使用货件端口 1500.

例如,如下

tcpdump

例子 (

tcpdump udp and port 53 and host server.domain

), 请求来自港口 15591. 它远低于我们之前看到的短暂港口的最低服务器端口限制: 32768. 换句话说,使用

dig

, 询问 DNS 超越本地端口的范围。

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)

我想知道什么可以改变我的短暂港口的范围 Debian 7 和 8. 也许是值得一提的唯一的事情。 我在其中一个人

ifenslave

和一个用途

ifenslave

连接两个端口 Ethernet.

解析器。 - 这是服务器本身和

#cat /etc/resolv.conf
nameserver ::1

但他和他一样

nameserver 127.0.0.1

因为 ipv4 和 ipv6 共享

/proc/sys/net/ipv4/ip_local_port_range

(
http://www.tldp.org/HOWTO/Linu ... .html
) 我也试过。

避免混淆 IPv6, 我决定只使用 Ipv4. 我只补充了

nameserver 127.0.0.1



/etc/resolv.conf

.

结果低于C.

nameserver 127.0.0.1



/etc/resolv.conf

只要。

然后我发布了

rndc flush

清除kesh. DNS 从转换器I.

dig google.com

我打开了第二个终端窗口并得分

tcpdump udp and port 53

:

许多记录,但我注意到,无论要求如何 (A, PTR ...) 和主机,DNS请求可以从下面的端口发货 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] &lt;... sendmsg resumed&gt; ) = 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

这个问题与我的防火墙有关。 由于临时港口可以发出 (我自己的假设) 经过 1024 到 65000, 这意味着我无法阻止来自上面的端口的传入流量 1024, 如在过去的。 如果我这样做,我会减慢或阻止许可 DNS.

更新:谢谢,我明白,如果我想用服务器作为转换器 DNS, 这意味着我必须考虑到港口范围 UDP 1024: 65535 这是一个临时端口范围。
</unfinished>
已邀请:

涵秋

赞同来自:

我不认为你的

ip_local_port_range

或者这通常不适用于这种类型的脚本,我宁愿相信它与虚假反应的复杂性直接相关 DNS.

我们看到了你的

strace

你有结论

dig

发送数据报

127.0.0.1

(有某种服务器转换器), 但

tcpdump

输出似乎与来自此服务器的流量涉及识别,而不是

dig

他自己。

正常的旧 DNS (没有 DNSSEC) 只依靠
https://tools.ietf.org/html/rfc1035#section-4.1.1
和数据B.

问题

符合收到的答案的部分 UDP, 有了早些时候发货的请求。

由于数据报的事实 UDP 易于假,只有 16 需要猜测需要猜测特定名称作为目标的机会,可以猜出正确的事务标识符 (平均 32k 假设) 在收到真正的答案之前 .

因此,所有现代的解决方案服务器
http://www.kb.cert.org/vuls/id/800113
增加必须猜测的随机位数。

您真的需要作为更大范围的端口,因此,似乎,它将在端口的整个端口中随机化> 1024, 与它为您提供操作系统的标准处理相比,将添加大量机会。

也就是说,我认为它只是考虑了忽略OS本地端口的套接字的通常处理的“最佳实践”。

要回复问题请先登录注册