UbuntuはDHCPクライアントからホスト名とDNS名を取得します。Ubuntu 11.10(Oneiric Ocelot)のデフォルトのインストールはそれを行いません。
UbuntuはDHCPクライアントからホスト名とDNS名を取得します。Ubuntu 11.10(Oneiric Ocelot)のデフォルトのインストールはそれを行いません。
回答:
ここで説明されているように、dhcpフック用の小さなスクリプトでそれを行う方法があります。
新しいファイルを作成します。
sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname
次のコードを貼り付けます:
#!/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
eth0
とwlan0
を、ホスト名を取得するインターフェイスの名前に置き換えます。ほとんどの場合eth0
とwlan0
同じ滞在する必要があります。
読み取り可能であることを確認してください...
chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname
それで全部です。次のdhcp応答で、ホスト名が自動的に更新されます。
あなたはできるあなたのDHCPサーバからホスト名を取得する-それはDHCP仕様の一部です。
https://tools.ietf.org/html/rfc1533#section-3.14
「このオプションはクライアントの名前を指定します」
d_inevitableの答えは私の問題をほぼ解決しましたが、完全ではありませんでした。問題は次のとおりでした:
DHCPサーバーはホスト名を送信していました(追加することにより
option host name 'client1'
dhcpd.confで)、wiresharkでDHCPオファーの内容をキャプチャして分析することで実際に検証しました
DHCPクライアントは、DHCPサーバーからホスト名を予期していました(追加することにより
request host-name
dhclient.conf内)
クライアントは新しいホスト名を取得していませんでした(簡単に入力できます
hostname
ターミナルで古いホスト名を取得するか、コンテンツ/ファイルを削除した場合はホスト名を取得しません)。その結果、d_inevitableによって提案されたソリューションは、空の文字列をコピーするだけでした。
それを解決するために、私はクラッディングソリューションを適用しました。それは、私がそうであったように、あなたがそれを機能させようと必死でない限り、一般的に従うべきではありません。
まず、編集機能を使用してDHCPクライアント制御スクリプトを開きます。
sudo vi /sbin/dhclient-script
そこで、機能を見つけなければなりません
set_hostname()
検索を使用するだけで、すぐに表示されます。さて、少なくとも私のコンピューターでは、この関数には、互いにカプセル化された3つのif-then-else条件があります。
#ホスト名を設定set_hostname(){local current_hostname
if [ -n "$new_host_name" ]; then current_hostname=$(hostname) # current host name is empty, '(none)' or 'localhost' or differs from new one from DHCP if [ -z "$current_hostname" ] || [ "$current_hostname" = '(none)' ] || [ "$current_hostname" = 'localhost' ] || [ "$current_hostname" = "$old_host_name" ]; then if [ "$new_host_name" != "$old_host_name" ]; then hostname "$new_host_name" fi fi fi }
ここで必要なのは、ホスト名に関係なく、新しいホスト名を強制的に割り当てることです。したがって、カプセル化された2つのif-then-elseをコメントアウトする必要があります。結果は次のようになります。
#ホスト名を設定set_hostname(){local current_hostname
if [ -n "$new_host_name" ]; then current_hostname=$(hostname) # current host name is empty, '(none)' or 'localhost' or differs from new one from DHCP #if [ -z "$current_hostname" ] || # [ "$current_hostname" = '(none)' ] || # [ "$current_hostname" = 'localhost' ] || # [ "$current_hostname" = "$old_host_name" ]; then # if [ "$new_host_name" != "$old_host_name" ]; then hostname "$new_host_name" # fi #fi fi }
これで、d_inevitableまたはこれが期待どおりに動作するはずです。あなたが私と同じような絶望的な欲求不満に陥っている場合に役立つことを願っています。
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";
}
そのホストに彼の名前が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
-新しい名前を取得するときは起動する必要があります2回-ホスト名を取得するために1回、すべての起動時にその名前を使用可能にするために1回...)。
DHCPサーバーからホスト名を取得しません。
あなたはでき送るあなたが割り当てられているIPを変更することができ、サーバにホスト名を。Network Manager接続を編集するか(フィールドはDHCPクライアントIDと呼ばれる)、または(rootとして)編集することにより、送信する名前を変更できます/etc/dhcp/dhclient.conf
。次の行を探します。
send host-name "<hostname>";
... <hostname>
好きなものに変更します。
デフォルトでは、UbuntuはルーターからDNS設定を取得します(送信する場合)が、ホスト名で他のコンピューターにアクセスできるローカルDNS / mDNSについて話しているのではないかと思います。これはUbuntuではAhaviまたはZeroconfと呼ばれ、デフォルトでインストールされます。
次の方法でコンピューターにアクセスできるはずです。 <hostname>.local
hostname
とこの割り当てられたホスト名が表示され、入力するとドメインが表示されるはずhostname -d
です。fqdnはhostname.domainである必要があります
send host-name "example.com";
特定のIPアドレスを取得するために、あなただけのようにもすることができます要求すると1をrequest host-name;
。
見つかった場合、dhcpclientスクリプトのバグである可能性があります。http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html
IP更新時に$ old_host_nameをクリーンアップしてみてください
echo unset old_host_name> /etc/dhcp/dhclient-enter-hooks.d/unset_old_hostname
また、静的な/ etc / hostnameにはdhcp応答よりも優先度があるようなので、空のままにしておきます
> / etc / hostname
ubuntu 14.04およびdnsmasqサーバーでテスト済み。
Ubuntu 18.04を使用する場合、タイインスクリプトは不要になることに注意してください。インストールのホスト名に設定されている場合localhost
に/etc/hostname
、DHCPクライアント存在する場合、DHCPによって発行された名前を使用して起動時に自動的にホスト名を設定します。実行hostnamectl
するとlocalhost
、永続的なホスト名、および一時的なホスト名として発行されるDHCP がリストされます。
testaccount@dhcp-hostname:~$ hostnamectl
Static hostname: localhost
Transient hostname: dhcp-hostname
答えは、DHCPサーバーで静的リースを使用しているかどうかによって異なります。使用している場合、DNSからホスト名を取得する必要はありません。d_inevitableのソリューションでこの行を変更できます
hostname=$(host $new_ip_address | cut -d ' ' -f 5)
に
hostname=${new_host_name}
ただし、ホスト名が最初にlocalhost.localdomainに設定されている場合、これは自動的に行われるため、スクリプトを記述する必要はありません。ただし、ホスト名をFQDNに設定する場合は、d_inevitableのスクリプトを次のように変更する必要があります。
hostname=${new_host_name}.${new_domain_name}
繰り返しますが、これはすべて、静的リースを使用している場合にのみ機能します。
コメントするのに十分な評判はありませんが、dhclientフックを使用して問題をほとんど解決したので、前の回答に便乗したいと思います。
何らかの理由で標準のISC DHCPサーバーを使用すると、前述のフックは「。」が付いたホスト名を出力することがわかりました。何らかの理由でホスト名の最後にピリオド文字があります。
したがって、前の回答では、sedを使用して余分な期間を「切り取る」必要があります。
hostname=$(host $new_ip_address | cut -d ' ' -f 5)
になるでしょう:
hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -e "s/\.$//g")
host
コマンドを使用して)DNSクエリを使用して、割り当てられたIPアドレスに関連付けられたホスト名を抽出します。DHCPサーバーは、ホスト名オプション(オプション12)を実際に明示的に設定できます。これは、IPのDNSクエリから取得したホスト名と異なる可能性があります(DNSにIPのPTRレコードが存在しない場合、失敗する可能性もあります) )