web-dev-qa-db-ja.com

静的IPアドレスを構成する方法、ただしDHCP経由のDNS

ファイルに静的IPアドレスを設定しました / etc/network/interfaces

auto eth0
iface eth0 inet static
    address 10.152.187.122
    gateway 10.152.187.1
    netmask 255.255.255.0

しかし、私は DNSDHCP で自動的に設定したいと思います。たとえば、dhclientを実行すると、 / etc/resolv.conf が適切に設定されます。しかし、私はこれを起動時に実行したいと思います。それを設定する適切な方法がどこにあるかわかりません。

これは buntu 12.04(正確なセンザンコウ)雲画像 にあります。

3
Ian Kelling

DHCPを使用すると、ルーターがインターネットサービスプロバイダー(ISP)からIPアドレスを取得するときに取得するDNSネームサーバーアドレスを取得できます。ルーターが持つDNSネームサーバーアドレスは次のように使用できます。

auto eth0
iface eth0 inet static
  address 10.152.187.122   
  netmask 255.255.255.0
  gateway 10.152.187.1
  dns-nameservers 10.152.187.1
2
chili555

求めているのは、本質的には静的IPとDHCP DNSのハイブリッド構成です。そのようなタイプのネットワーク設定はありません-静的またはDHCPがあります。

ただし、構成でDNSネームサーバーを明示的に定義することもできます。これは静的アドレスを保持しますが、残念ながらDNSを動的に設定しません(このようなハイブリッド設定では実際には不可能です)。

auto eth0
iface eth0 inet static
  address 10.152.187.122
  netmask 255.255.255.0
  gateway 10.152.187.1
  dns-nameservers 10.152.187.1
  dns-nameservers 8.8.8.8
  dns-nameservers 8.8.4.4
  ...

TL; DR:ルーターのDHCP割り当てテーブルに静的なエントリが設定されていない限り、DHCP DNS、静的IPを取得する方法はありません。 /Macアドレス

2
Thomas Ward

また、他の情報を使用せずにDHCPからDNSサーバーを照会することに興味があります。

Dhcpcdはクエリを許可する可能性があります(dhcpcd -o domain_name_servers -T)が、dhclientについては何も見つかりませんでした。

変更されたdhclient( ここGitHubでここでStack Overflow を参照)またはtest-client( このブログのように )または異なるスクリプト( Stack Overflowでこれを参照 )PowerShellソリューション ここindented.co.uk を見つけました。

これにより、Linuxで「基本」を使用することを考えるようになり、printfを使用して細工されたdhcp-requestになりました。

一部のフィールドは偽物(mac aa:bb:cc:dd:ee:ffなど)ですが、オプション53 = 0x35(len 1/value 1 = Request)と55 = 0x37(len 1/value DNS for DNS)が含まれています。

ブロードキャストにはsocatが使用されます:

printf "\x1\x1\x6\x0\xd3\x44\x33\xeb\x0\x0\x80\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xaa\xbb\xcc\xdd\xee\xff\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x63\x82\x53\x63\x35\x01\x01\x37\x01\x06\xff" |  socat - UDP4-DATAGRAM:255.255.255.255:67,broadcast

Simliar socatは、返信の受信に使用されます

socat -u udp-recv:68,reuseaddr -

または

socat -u udp-recv:68 - | dd bs=1 skip=$( printf "%d" 0xec )

Xxdを使用して、探していたものを見つけました...

0