Есть ли безопасный способ отключить DHCP из командной строки?

Короткая версия

Я знаю, что этот вопрос очень похож на другие, и я действительно искал ответы в Интернете, но кажется, что никакой подход не работает или решения кажутся «сложными, чтобы быть лучшими». практика »(постараюсь объяснить). Я ищу безопасный способ отключить DHCP из командной строки (для использования в сценариях).

Справочная информация

Я пытаюсь создать «Live-Cd» с Ubuntu Server 12.04 и remastersys (работает хорошо). По умолчанию система настроена на получение IP с DHCP при загрузке. Это нормально - важно то, что скрипт (который запускается после загрузки) может (в некоторых конкретных случаях) устанавливать статический IP-адрес, используя ifconfig ( не / etc / network / interfaces ): [ 119]

ifconfig eth0 192.168.0.1

На самом деле это тоже работает, но IP сохраняется только до истечения времени аренды DHCP ранее полученной аренды. Новый IP будет назначен на eth0, что (вкратце) нарушает работу системы. Я подумал: «Ничего страшного, наверняка будет что-то вроде:» ​​

ifconfig eth0 dhcpdisabled

Но в итоге я узнал, это не так просто. Редактировать /etc/network/interfaces немного сложно, потому что он генерируется remastersys (на самом деле сетевой сценарий Каспера).

Я мог бы переписать его и перезапустить сеть, но что будет с активными dhclient.leases? Будет ли DHClient по-прежнему работать в фоновом режиме (не должно, но некоторые сообщения предполагают, что это будет , мои тесты показали, что он перезапускается «случайно», если dhclient убит), должен ли я удалить или пустые файлы dhclient.leases, а как насчет resolv.conf?

Отчаяние

Подводя итог - на мой взгляд, это не совсем «просто» и в некоторой степени не «чувствует себя стабильно». Этот вопрос (156183) предложил удалить пакет dhclient, но: решит ли это проблему? Это сломает другие вещи?

Неужели для этого нет команды? Надеюсь, я просто упустил это из виду.

4
задан 14 August 2013 в 11:22

5 ответов

Я попытаюсь дать вам краткий пример того, что вы можете сделать, но это не полный пример, потому что точные настройки, потребности и т. Д. Могут сильно различаться.

Во-первых, давайте сделаем некоторые предположения, чтобы сделать этот случай более простым:

  1. Вы не используете сетевой менеджер
  2. Вы используете не resolvconf, а статический /etc/resolv.conf file
  3. Ваш интерфейсный файл не содержит allow-hotplug строк для перенастройки, если кабель отключен / подключен.

Давайте настроим нашу вспомогательную переменную DEV

## your device is eth0
# stop /etc/interface control of the eth0 device, should also stop/kill dhcp for that device
ifdown eth0
## stop dhclient to be sure, don't worry about leases files etc
pkill dhclient
## ubuntu precise calls dhclient with dhclient3
pkill dhclient3
# set ip manually: (NETMASK is quite often 24 == 255.255.255.0) 
ifconfig eth0 up 192.168.0.1/NETMASK
# do you need default gw? (for this example it's 192.168.0.254)
route add default gw  192.168.0.254

## if your /etc/resolv.conf is incorrect add correct nameserver like this:
### 8.8.8.8 = goole open dns
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Теперь, если предположение 1) ложно, делайте (остановите сетевой менеджер):

stop network-manager

Для предположения 2) либо удалить resolvconf или удалить /etc/resolv.conf, если это символическая ссылка, и заменить ее статическим файлом

[ -h /etc/resolv.conf ] && rm /etc/resolv.conf

И для предположения 3): это должно закомментировать строки горячего подключения ... и я надеюсь, что этого достаточно

perl -i -pe 's/^(\s*allow-hotplug)/# $1/g' /etc/network/interfaces
0
ответ дан 14 August 2013 в 11:22

Вы можете использовать «systemctl», если он доступен для вашего дистрибутива. Он доступен для моего дистрибутива openSUSE, и я использую его для отключения сервисов следующим образом.

systemctl disable wickedd-dhcp4.service

где wickedd-dhcp4 - это имя службы, обрабатывающей конфигурацию DHCP-клиента в моей системе. Существует также сервис для настройки IPv6 dhcp, вы, возможно, тоже не хотите его отключать.

systemctl disable wickedd-dhcp6.service
0
ответ дан 14 August 2013 в 11:22

Самый простой стандартный способ исправить это просто: просто скажите вашему DHCP-серверу, какие IP-адреса следует назначать определенным MAC-адресам. Каждый маршрутизатор, к которому я когда-либо прикасался, имел эту функцию, и если вы используете dhcp3-server, он так же прост .

0
ответ дан 14 August 2013 в 11:22

Я использую следующую команду для отключения DHCP на моем сервере.

sudo update-rc.d -f dhcp3-server remove

То, что он делает, это удаляет любые ссылки запуска системы для /etc/init.d/dhcp3-server.

Чтобы при следующей перезагрузке DHCP не срабатывал.

Вот и все, просто чисто, легко и безопасно.

0
ответ дан 14 August 2013 в 11:22

Как насчет простой остановки клиента dhcp с помощью pkill dhclient?

0
ответ дан 14 August 2013 в 11:22

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

Похожие вопросы: