在我的 Ubuntu 16.04 机器上,我使用 DHCP 从 ISP 的路由器获取 IP 地址。它回复我想要覆盖的 DNS 服务器和 DNS 搜索域。
/etc/dhcp/dhclient.conf
:
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
send host-name = "my.hostname";
request subnet-mask, broadcast-address, routers, interface-mtu;
supersede domain-name-servers 10.1.2.3;
supersede domain-search "mydomain.tld";
在这里我已将 DHCP 客户端配置为:
- 不请求域名服务器和/或搜索域
- 无论如何,如果提供了的话,请覆盖
domain-name-servers
两者domain-search
。
但是,resolvconf 现在发生的情况是:
/etc/resolv.conf
:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.1.2.3
search home mydomain.tld
注意到home
那里的条目了吗?这就是我那糟糕的 ISP 路由器发送给我的,尽管我没有请求它(使用 tcpdump 确认,见下文)。因此,显然,dhclient 是附加的,而不是覆盖的,就像我使用了append
而不是 一样supersede
。
我做错了什么?我希望 dhclient 忽略虚假的不可配置 DNS 搜索域。
我认为这是一个安全问题,因为我不想让它在每次我在主机上执行 DNS 查询时都搜索一个诡异的域。另外,dhclient 为什么还要费心去解析它没有要求的回复选项?
软件版本信息(所有库存的Ubuntu 16.04):
ii isc-dhcp-client 4.3.3-5ubuntu12.7
ii resolvconf 1.78ubuntu4
tcpdump:
01:09:35.629136 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 52:54:00:23:86:a8, length 300, xid 0x9e3d912a, Flags [none] (0x0000)
Client-Ethernet-Address 52:54:00:23:86:a8
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Request
Requested-IP Option 50, length 4: 192.168.999.24
Hostname Option 12, length 27: "my.hostname"
Parameter-Request Option 55, length 4:
Subnet-Mask, BR, Default-Gateway, MTU
01:09:35.642166 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 576)
192.168.999.1.67 > 192.168.999.24.68: [udp sum ok] BOOTP/DHCP, Reply, length 548, xid 0x9e3d912a, Flags [none] (0x0000)
Your-IP 192.168.999.24
Server-IP 192.168.999.1
Client-Ethernet-Address 52:54:00:23:86:a8
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: ACK
Server-ID Option 54, length 4: 192.168.999.1
Lease-Time Option 51, length 4: 3600
Hostname Option 12, length 27: "my.hostname"
Subnet-Mask Option 1, length 4: 255.255.255.0
Default-Gateway Option 3, length 4: 192.168.999.1
Domain-Name-Server Option 6, length 8: 1.2.3.4,4.5.6.7
Domain-Name Option 15, length 4: "home"
TTL Option 23, length 1: 64
答案1
我正在取代错误的 dhcp 选项。
domain-name-search
我的 ISP 路由器没有给出选项,而是给出了一个domain-name
选项。后者是要取代的选项。
dhclient-resolvconf 组合似乎将主域名(home
此处)和搜索域的信息合并在一起。
仍有待思考:dhclient 为什么要费心解析和处理该选项domain-name
?我没有请求它。显然,我需要取代这个不受信任的设备发送给我的所有我没有要求的答案?听起来像是一个不错的攻击媒介……
答案2
关于为什么domain-name
DHCPD 服务器返回的问题,请参阅dhclient.conf
:
请求语句使客户端请求任何响应客户端的服务器向客户端发送其指定选项的值。请求语句中只应指定选项名称 - 而不是选项参数。默认情况下,DHCPv4 客户端请求子网掩码、广播地址、时间偏移、路由器、域名、域搜索、域名服务器、主机名、nis 域、nis 服务器、ntp 服务器和接口 mtu 选项。DHCPv6 客户端默认请求名称服务器和域搜索。请注意,如果您输入“请求”语句,则会覆盖此默认值,并且不会请求这些选项。
要求request;
设置默认设置:
默认情况下,DHCPv4 客户端请求子网掩码、广播地址、时间偏移、路由器、域名、域搜索、域名服务器、主机名、nis 域、nis 服务器、ntp 服务器和接口 mtu 选项