Ogu*_*gic 18 networking dns hostname dhcp
我希望 Ubuntu 从DHCP客户端获取主机名和 DNS 名称。Ubuntu 11.10 (Oneiric Ocelot)的默认安装不会这样做。
请注意,使用Ubuntu 18.04时不再需要搭配脚本。localhost如果在 DHCP 客户端中设置安装的主机名,/etc/hostname则将在启动时使用 DHCP 颁发的名称(如果存在)自动设置主机名。运行时hostnamectl,它将列为localhost永久主机名,而 DHCP 发出的任何内容将列为临时主机名。
testaccount@dhcp-hostname:~$ hostnamectl
Static hostname: localhost
Transient hostname: dhcp-hostname
Run Code Online (Sandbox Code Playgroud)
有一种方法可以使用此处描述的 dhcp 挂钩的小脚本来实现。
创建一个新文件:
sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname
Run Code Online (Sandbox Code Playgroud)
并粘贴以下代码:
#!/bin/sh
# Filename: /etc/dhcp/dhclient-exit-hooks.d/hostname
# Purpose: Used by dhclient-script to set the hostname of the system
# to match the DNS information for the host as provided by
# DHCP.
#
# Do not update hostname for virtual machine IP assignments
if [ "$interface" != "eth0" ] && [ "$interface" != "wlan0" ]
then
return
fi
if [ "$reason" != BOUND ] && [ "$reason" != RENEW ] \
&& [ "$reason" != REBIND ] && [ "$reason" != REBOOT ]
then
return
fi
echo dhclient-exit-hooks.d/hostname: Dynamic IP address = $new_ip_address
hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -r 's/((.*)[^\.])\.?/\1/g' )
echo $hostname > /etc/hostname
hostname $hostname
echo dhclient-exit-hooks.d/hostname: Dynamic Hostname = $hostname
Run Code Online (Sandbox Code Playgroud)
将eth0和替换wlan0为要从中获取主机名的接口的名称。在大多数情况下eth0,wlan0应该保持不变。
确保它是可读的...
chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname
Run Code Online (Sandbox Code Playgroud)
就这样。在下一个 dhcp 响应中,您的主机名将自动更新。
小智 6
Oli 的回答显然是错误的(“您没有从 DHCP 服务器获得您的主机名”),这里的其他回答以及我最近在 RHEL7 系统上的经验都证明了这一点。所述系统从 DHCP 服务器获得其主机名。
而且,确实,DHCP 配置文件中的某些内容应该可以实现。例如:
host host4 { # verified
hardware ethernet 41:88:22:11:33:22;
fixed-address 192.168.0.4;
option host-name "host4";
}
Run Code Online (Sandbox Code Playgroud)
应该告诉那个主机他的名字是host4。
事实证明,isc 的 dhclient 似乎不支持这个!
但是,dhcpcd5 是开箱即用的。停止 dhclient,安装 dhcpcd5,运行 dhcpcd,更新您的租约,然后,您的 DHCP 客户端上的主机名设置为从 DHCP 服务器发送的名称。没有dhclient-exit-hooks.d脚本,没有黑客rc.local,什么都没有。
最后,我花了很多时间尝试使用 ISC 的 dhclient 使其工作。即使服务器发送主机名,也绝对没有乐趣。
我对这个问题的最初解决方案是编写一些可爱的代码rc.local来检测网络何时出现并强制(在我的情况下)搜索/etc/hosts以获取主机名,然后hostname使用该主机名运行。它可以工作,但是在网络出现之前,您的主机名可能是错误的(第一次部署主机时,我删除了/etc/hostname,因此主机名是localhost直到/etc/init.d/hostname.sh start网络出现后我可以运行- 所以当第一次获得新名称时,您需要启动两次 - 一次获取您的主机名,一次让该名称在一切启动时可用...)。
小智 5
您可以从 DHCP 服务器获取主机名 - 它是 DHCP 规范的一部分。
https://tools.ietf.org/html/rfc1533#section-3.14
“此选项指定客户端的名称”
| 归档时间: |
|
| 查看次数: |
118489 次 |
| 最近记录: |