Есть ли безопасный способ отключить DHCP из командной строки?
Укороченная версия
Я знаю, что этот вопрос очень похож на другие, и я действительно искал ответы в Интернете, но кажется, что подход не работает или решения кажутся "сложными, чтобы быть лучшей практикой" (я постараюсь объяснить). Я ищу безопасный способ отключить DHCP из командной строки (для использования в сценариях).
Фон
Я пытаюсь создать "Live-Cd" с Ubuntu Server 12.04 и remastersys (работает хорошо). По умолчанию система настроена на получение IP с DHCP при загрузке. Это нормально - важно то, что скрипт (который запускается после загрузки) может (в некоторых конкретных случаях) устанавливать статический IP с помощью ifconfig (не / etc / network / interfaces):
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, но: решит ли это проблему? Это сломает другие вещи?
Там действительно нет команды для этого? Надеюсь, я просто упустил это.
5 ответов
Я постараюсь дать вам краткий пример того, что вы можете сделать, но это не полный пример, потому что точные настройки, потребности и т. Д. Могут сильно отличаться.
Во-первых, давайте сделаем некоторые предположения, чтобы сделать этот случай более простым:
- Вы не используете сетевой менеджер
- Вы не используете
resolvconf, но статический файл /etc/resolv.conf - Ваш интерфейсный файл не содержит
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
Вы можете использовать "systemctl", если он доступен для вашего дистрибутива. Он доступен для моего дистрибутива openSUSE, и я использую его для отключения сервисов следующим образом.
systemctl disable wickedd-dhcp4.service
где wickedd-dhcp4 - это имя службы, обрабатывающей конфигурацию DHCP-клиента в моей системе. Существует также сервис для настройки IPv6 dhcp, возможно, вы тоже не хотите его отключать.
systemctl disable wickedd-dhcp6.service
Я использую следующую команду для отключения DHCP на моем сервере.
sudo update-rc.d -f dhcp3-server remove
То, что он делает, это удаляет любые ссылки запуска системы для /etc/init.d/dhcp3-server,
Чтобы при следующей перезагрузке DHCP не пинался.
Вот и все, просто чисто, легко и безопасно.
Самый простой стандартный способ исправить это очень просто: просто скажите вашему DHCP-серверу, какие IP-адреса следует назначать определенным MAC-адресам. Каждый маршрутизатор, к которому я когда-либо прикасался, имел эту функцию, и если вы используете dhcp3-serverЭто так же просто.