Enable/Disable running DHCP service using Linux command lines
I would like to disable running DHCP service using Linux command lines, inorder to use my own DHCP client or set static IP addresses. I know that as mentioned in this post, by setting interface type to static instead of dhcp in /etc/network/interfaces, DHCP is disabled for the concerned interface. But I would like to make a shell script that uses command lines to do this and the reverse.
2 Answers 2
By manipulating the ip address of an interface while it is configured to use dhcp, the risk is that your static ip is regularly override.
You then have to kill the dchclient related to your interface (htop and kill). However, it seems that the dhclient store the pid of its instance in a default directory : /var/run/dhclient..pid . You can then do :
ifce=eth0 kill -9 $(cat /var/run/dhclient.$.pid sudo ifconfig $ifce [IP] netmask [NETMASK]
ifce=eth0 dhclient -pf /var/run/dhclient.$.pid $ifce
It seems that the network manager monitors the dhclient instances. You may then provide another configuration to the manager.
- remove all references to your interface in the /etc/network/interfaces
- add the following line to the end of /etc/network/interfaces source /etc/network/interfaces.d/*.conf
- create the directory /etc/network/interfaces.d if it does not exist and the following two files:
- /etc/network/interfaces.d/.dhcp that contains the dhcp configuration of your interface
- /etc/network/interfaces.d/.static that contains the static configuration of your interface
- you can then swith from dhcp to static and vice versa by copying file to /etc/network/interfaces.d/.conf and restarting the interface, either
ifce=eth0 cp /etc/network/interfaces.d/$.static /etc/network/interfaces.d/$.conf ifdown $ifce ifup $ifce
ifce=eth0 cp /etc/network/interfaces.d/$.dhcp /etc/network/interfaces.d/$.conf ifdown $ifce ifup $ifce
Как отключить работу DHCP
Други, вроде простой вопрос — как отключить работу DHCP?
Установил CentOS из netinstall в варианте Minimal, и оказалось, что по дефолту сервис DHCP работает.
Но по команде chkconfig он отсутствует! Где же он прячется и как его отключить?
Потому что удалять его как пакет OpenDHCP все-таки не хочется, пусть бы себе был в нерабочем состоянии, чтобы когда понадобится, быстренько включить.
Запущена служба, которая раздаёт ip адреса в сеть с вашего CentOS или автоматически запускаются DHCP клиенты на интерфейсах ?
Ах, да — имеется в виду клиентский DHCP, который получает IP-адрес.
Я думаю вас заинтересуют параметры:
kostik87 ★★★★★ ( 11.04.13 15:40:46 MSK )
Последнее исправление: kostik87 11.04.13 15:40:55 MSK (всего исправлений: 1)
Документация дремучая, там то сих пор Kudzu упоминается 🙂
Но суть не в этом, насколько понял, для отключения DHCP-клиента нужно править /etc/sysconfig/network-scripts/ifcfg-eth0 ?
Пока правда не знаю как именно, но опять-таки суть не в этом — почему по команде chkconfig не вижу DHCP среди других сервисов и соответственно не могу отключить его автозагрузку удобной командой
chkconfig —level 345 dhcpd off
и остановить простой командой вида
service dhcpd stop ?
Ах, да — имеется в виду клиентский DHCP, который получает IP-адрес.
dhcp-клиент это не сервис. Если локальный интерфейс настроен на получение IP по DHCP, то в процессах будет висеть демон dhclient.
почему по команде chkconfig не вижу DHCP среди других сервисов
Потому что у тебя не установлено DHCP-сервера. Покажи вывод pgrep -l dhc
dhcp-клиент это не сервис. Если локальный интерфейс настроен на получение IP по DHCP, то в процессах будет висеть демон dhclient.
Ну это dhcp-клиент это я обозвал условно, не помню его точное название, поскольку в сервисах его не видно.
Хорошо, пусть правильное название клиента dhclient.
И он, как оказалось, действительно висит в памяти —
# pgrep -l dhc
974 dhclient
Так почему же его не видно по команде chkconfig? И откуда он тогда берется :-O
Так почему же его не видно по команде chkconfig?
Мда, вы читать и понимать то что написано когда уже научитесь ?
Ещё раз, dhclient — это клиент к dhcp серверу для получения IP адреса интерфейсом, в случае, если у вас выставлено получение параметров сети динамически. Как конфигурировать сетевой интерфейс указывается в конфигурационном файле /etc/sysconfig/network-scripts/ifcfg-, в частности в параметре BOOTPROTO= сервиса network. Сервис network запускает dhcpclient для каждого интерфейса, для которого указано получать параметры динамически и указано, что его нужно поднимать при старте системы, параметр ONBOOT=
Команда chkconfig управляет сервисами.
Действительно, не понимаю, почему этот dhclient сделали по управлению не такой, как другие сервисы, было удобнее, имхо, ну да ладно, это мои проблемы.
Объясните, пожалуйста, тогда такую вещь: как отключить этот dhclient, чтобы не мешал? Поскольку мне нужно перевести eth0 на статику.
Действительно, не понимаю, почему этот dhclient сделали по управлению не такой, как другие сервисы,
Потому что он не сервис и управлять им в отрыве от фреймворка настройки сети нет смысла.
У вас все так гармонично и картинка и ник и вопросы.
Действительно, не понимаю, почему этот dhclient сделали по управлению не такой, как другие сервисы,
Потому, что это не сервис. dhcpclient запускает сервис network, в зависимости от настроек интерфейсов, который вы указали в конфигурационном файле /etc/sysconfig/network-scripts/ifcfg-.
Объясните, пожалуйста, тогда такую вещь: как отключить этот dhclient, чтобы не мешал? Поскольку мне нужно перевести eth0 на статику.
почему этот dhclient сделали по управлению не такой, как другие сервисы
Потому что это не демон, как уже сказали выше. Не всякий процесс, запускающийся в фоновом режиме является демоном.
Чего ж его тогда не сделали демоном? Ну да ладно.
В-общем, решил проблему настройки eth0 следующим образом:
Установил утилиту system-config-network-tui-1.6.0.el6.2-1.el6.noarch, с помощью которого быстро отключил клиента dhcp и настроил адреса eth0.
Хоть утилита потянула за собой 8 пакетов (libnl-1.1-14.el6.i686 iw-0.9.17-4.el6.i686 crda-1.1.1_2010.11.22-1.el6.i686 wireless-tools-29-5.1.1.el6.i686 python-iwlib-0.1-1.2.el6.i686 python-ethtool-0.6-3.el6.i686 pciutils-3.1.10-2.el6.i686 dbus-python-0.83.0-6.1.el6.i686 tui-1.6.0.el6.2-1.el6.noarch), но зато с ней все наглядно, понятно и не требует ковыряться в конфигах.
Уж извините, но мне так оказалось проще.
Чего ж его тогда не сделали демоном? Ну да ладно.
Потому что смысла его делать демоном нет. Это клиент для DHCP сервера запускается для каждого интерфейса, который должен получать параметры работы сети. Как конфигурировать интерфейс указывается в параметрах сервиса network, что бы при его запуске у вас выставлялись статические ip адреса или он запускал для интерфейса dhclient .
Установил утилиту system-c27onfig-network-tui-1.6.0.el [/quote6.2-1.el6.noarch, с помощью которого быстро отключил клиента dhcp и настроил адреса eth0. Хоть утилита потянула за собой 8 пакетов (libnl-1.1-14.el6.i686 iw-0.9.17-4.el6.i686 crda-1.1.1_2010.11.22-1.el6.i686 wireless-tools-29-5.1.1.el6.i686 python-iwlib-0.1-1.2.el6.i686 python-ethtool-0.6-3.el6.i686 pciutils-3.1.10-2.el6.i686 dbus-python-0.83.0-6.1.el6.i686 tui-1.6.0.el6.2-1.el6.noarch), но зато с ней все наглядно, понятно и не требует ковыряться в конфигах.
Ну т.е. открыть в текстовом редакторе файл /etc/sysconfig/network-scripts/ifcfg-, т.е. например
nano /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 BOOTPROTO=none ONBOOT=yes NETWORK=10.0.1.0 NETMASK=255.255.255.0 IPADDR=10.0.1.27 GATEWAY=10.0.1.1 USERCTL=no
Включить / отключить запуск службы DHCP с помощью командной строки Linux
Я хотел бы отключить запуск службы DHCP с помощью командной строки Linux, чтобы использовать собственный DHCP-клиент или установить статические IP-адреса. Я знаю, что, как уже упоминалось в этом посте, установив статический тип интерфейса вместо dhcp в /etc /network /interfaces, DHCP отключается для соответствующего интерфейса. Но я хотел бы сделать сценарий оболочки, который использует командные строки, чтобы сделать это и наоборот.
2 ответа 2
Предполагая, что вы уже деактивировали NetworkManager для нужных интерфейсов, вы можете использовать команду «ip». Назначение вручную (скажем, ваш интерфейс — eth0):
ip link set eth0 up ip addr add 192.168.0.2/255.255.0.0 broadcast 192.168.255.255 dev eth0 ip route add default via 192.168.0.1
ip link set eth0 up dhclient eth0
Манипулируя IP-адресом интерфейса, в то время как он настроен на использование dhcp, существует риск того, что ваш статический ip будет регулярно переопределяться.
Затем вам нужно убить dchclient, связанный с вашим интерфейсом (htop и kill). Однако, похоже, что dhclient хранит pid своего экземпляра в каталоге по умолчанию: /var/run/dhclient..pid . Затем вы можете сделать:
ifce=eth0 kill -9 $(cat /var/run/dhclient.$.pid sudo ifconfig $ifce [IP] netmask [NETMASK]
ifce=eth0 dhclient -pf /var/run/dhclient.$.pid $ifce
РЕДАКТИРОВАТЬ
Кажется, что сетевой менеджер контролирует экземпляры dhclient. Затем вы можете предоставить другую конфигурацию менеджеру.
- удалите все ссылки на ваш интерфейс в /etc /network /interfaces
- добавьте следующую строку в конец /etc /network /interfaces source /etc/network/interfaces.d/*.conf
- создайте каталог /etc/network/interfaces.d если он не существует, и следующие два файла:
- /etc/network/interfaces.d/ndominterface‹.dhcp, который содержит конфигурацию dhcp вашего интерфейса
- /etc/network/interfaces.d/ndominterface‹.static, который содержит статическую конфигурацию вашего интерфейса
- Затем вы можете переключиться с dhcp на статический и наоборот, скопировав файл в /etc/network/interfaces.d/.conf и перезапустив интерфейс, либо
ifce=eth0 cp /etc/network/interfaces.d/$.static /etc/network/interfaces.d/$.conf ifdown $ifce ifup $ifce
ifce=eth0 cp /etc/network/interfaces.d/$.dhcp /etc/network/interfaces.d/$.conf ifdown $ifce ifup $ifce
isc-dhcp-server disabling and configuring
I’ve installed isc-dhcp-server just for a one-time task. So basically, after task is completed I dont’t need it anymore: should I just uninstall it? Or it possible to disable it completely? The command sudo service isc-dhcp-server stop seems don’t prevent restarting isc-dhcp service in background, after PC rebooted. Also, there was a lot of modifications in dhcpd.conf, also was assigned static IP to /etc/network/interfaces config: should edit changes back in interfaces config, as don’t need it anymore, or this changes are not persistent? Also, I forgot to backup the dhcpd.conf: how to get unchanged one?
2 Answers 2
It seems that you want to prevent running DHCP server after reboot. to do this action, you must update init scripts by update-rc.d :
sudo update-rc.d -f isc-dhcp-server remove
If you want to add DHCP Server to startup again, enter this command:
sudo update-rc.d isc-dhcp-server defaults
So it removes DHCP from system startup. If in the future I will need ISC-DHCP server again, how I can enable it? Regarding static IP that was set in /etc/network/interfaces : should I change config back?
@minto your change to /etc/network/interfaces must be reverted back because when you reboot your system, it’s uses /etc/network/interfaces to bring up your interfaces.
for ubuntu 16.04 and 14.04 this command :
sudo update-rc.d -f isc-dhcp-server remove
will not stop the service to start at boot time. How to check that ?
sudo service isc-dhcp-server status ● isc-dhcp-server.service - ISC DHCP IPv4 server Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled) Active: inactive (dead) Docs: man:dhcpd(8)
Despite the fact that the start and stop links on all rc.d levels are removed the service will still be started at boot time. It is still enable and start script in /etc/default/isc-dhcp-server will be run at boot time starting the service. To stop service loading at boot time use command:
sudo systemctl disable isc-dhcp-server.service
Now You can check the status :
sudo service isc-dhcp-server status ● isc-dhcp-server.service - ISC DHCP IPv4 server Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:dhcpd(8)
Now you see the service is disabled at boot time.