Как настроить статический IP-адрес, кроме DNS через DHCP

Я настроил статический 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

Но я бы хотел, чтобы DNS настраивался автоматически с DHCP. Например, если я запускаю dhclient, он правильно заполняет /etc/resolv.conf. Но я бы хотел, чтобы это запускалось при запуске, и я не уверен, где это правильно.

Это изображение облака Ubuntu 12.04 (Precise Pangolin).

3 ответа

То, что вы запрашиваете, - это, по сути, гибридная конфигурация статического 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 DNS, статический IP, если только у вас не установлена ​​статическая запись в таблице назначений DHCP на маршрутизаторе, что гарантирует, что вы всегда будете получать этот IP, потому что он специально уже зарезервирован для этой конкретной системы. /MAC-адрес

С помощью DHCP вы получаете адреса DNS-серверов DNS, которые маршрутизатор получает, когда получает IP-адрес от вашего интернет-провайдера (ISP). Вы можете использовать адреса 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-серверов от DHCP без использования другой информации.

Dhcpcd может позволить запросить его (dhcpcd -o domain_name_servers -T), но я не смог найти ничего для клиента.

Помимо использования модифицированного dhclient (см. Здесь на GitHub и здесь, на Stack Overflow) или тест-клиента ( как в этом блоге) или других скриптов ( см. Это на Stack Overflow), я нашел решение powershell здесь на indented.co.uk.

Это заставило меня задуматься об использовании "основ" в Linux, и я закончил с созданным dhcp-запросом, используя printf,

Некоторые поля могут быть фиктивными (например, mac aa:bb:cc:dd:ee:ff), но они содержат опции 53=0x35 (len 1 / value 1 = Request) и 55=0x37 (len 1 / value 6 для DNS).

Для трансляции используется сокат:

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, я нашел то, что искал...

Другие вопросы по тегам