Есть ли способ отключить DHCP-клиент в Raspbian Linux на Rasperry Pi?


15

У меня есть сервер Linux (Rasperry Pi, использующий Raspbian в качестве ОС), который должен использовать только статический IP.

Однако я заметил, что он также получил IP от DHCP-сервера (IP, выданный DHCP, есть 192.168.111.2). В соответствии с сетевыми настройками сервер должен использовать только статический IP ( 192.168.111.100).

Содержание /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.111.100
netmask 255.255.255.0
gateway 192.168.111.1
dns-nameservers ip1 ip2

Несмотря на использование статической конфигурации, я могу подключиться к устройству по протоколу SSH, используя IP-адрес, предоставленный DHCP. Также кажется, что ntpdиспользует неправильный IP, а также правильный.

Выход Netstat:

udp        0      0 192.168.111.2:123       0.0.0.0:*                           2774/ntpd
udp        0      0 192.168.111.100:123     0.0.0.0:*                           2774/ntpd

По ifconfigIP 192.168.111.2не используется:

eth0      Link encap:Ethernet  HWaddr b8:27:eb:be:18:1c
          inet addr:192.168.111.100  Bcast:192.168.111.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:138099 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81146 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:95954711 (91.5 MiB)  TX bytes:27076870 (25.8 MiB)

ps -ef | grep dhcp показывает, что у меня работает демон DHCP:

root      2000     1  0 Oct07 ?        00:00:06 /sbin/dhcpcd

Как отключить DHCPзапуск демона и убедиться, что мой сервер использует только статический?


На какую команду вы ссылаетесь?
Мадок Комадрин

Я попробовал эти команды, но не смог найти ничего, что могло бы помочь мне в этом.
Мадок Комадрин

@ barlop В этом нет ничего плохого, ifconfigи он используется регулярно. В один прекрасный день его заменят, ipно, честно говоря, это не имеет никакого значения, если кто-то из бандитов будет говорить о том, что «лучше», так как это не состязание. ifconfigпредоставляет более чем достаточно деталей для отладки подобных вещей.
JakeGould

Ответы:


11

Этот сценарий звучит очень странно, потому что ваша установка должна работать так, как вы описываете, и надеяться, что она будет работать, если в ней установлен статический IP /etc/network/interfaces. Тем не менее, эта дискуссия на официальном сайте Raspberry Pi фокусируется на проблеме с пользователем «rpdom», заявив об этом в посте «Четверг 28 мая 2015 6:21 утра»:

Это происходит в последних обновлениях. Это вызвано тем, что новый клиент dhcp игнорирует то, что делают файлы интерфейсов, и, кроме того, делает свое дело ... кажется мне безумным. Я бы посмотрел, как перенастроить клиент dhcp (не помню, какой он есть или как это сделать, я все еще на старом, который мне подходит), отключить его или удалить (если это возможно).

Глубже в теме пользователь «KLL» предлагает следующий пост в своем ответе от «Пн Авг 10, 2015 12:59 pm». Согласно «кнуту»:

Где-то в процессе обновления мой /etc/network/interfacesфайл был заменен словом «вручную» вместо dhcp или static, и я получил два IP-адреса: мой статический и dhcp-адрес. Я наконец-то успел поиграть с ним и обнаружил, что он dhcpcd5работает не так, как раньше. Чтобы получить только ваш статический адрес, не изменяйте /etc/network/interfaces. Верните слово «ручной», если вы его изменили, и вместо этого измените, /etc/dhcpcd.confкак показано в примере из документов.

Таким образом, идея заключается в том, что dhcpcd5поведение изменилось в одном из обновлений. И предложение для решения этой проблемы состоит в том, чтобы удалить любые изменения /etc/network/interfacesи вместо этого изменить настройки, /etc/dhcpcd.confчтобы получить статический IP-адрес; Пример конфигурации ниже:

static <value>
             Configures a static <value>.  If you set ip_address then dhcpcd
             will not attempt to obtain a lease and just use the value for the
             address with an infinite lease time.

             Here is an example which configures a static address, routes and
             dns.
                   interface eth0
                   static ip_address=192.168.0.10/24
                   static routers=192.168.0.1
                   static domain_name_servers=192.168.0.1

Более подробную информацию о содержании dhcpcd.confможно найти на официальной странице руководства для этого .

Тем не менее, другая идея состоит в том, чтобы сохранить настройки, которые у вас есть, /etc/network/interfacesно затем отредактировать, /etc/dhcpcd.confдобавив строку, denyinterfaces eth0чтобы демон DHCP полностью игнорировал eth0. Любое решение должно работать, но одно решение может быть более предпочтительным в зависимости от ваших общих сетевых потребностей.


2
Мой случай был почти идентичен описанному здесь. Единственная разница была в том, что мое /etc/network/interfacesникогда не менялось, manualкак в случае с Raspberry Pi. Предлагаемые решения работали и для меня.
Мадок Комадрин

1
То же самое, где даже с "static" я получаю dhcp на моем eth0. Это все еще проблема с установкой jessie-lite. Обходной путь мне пока не помогает, так как у меня есть ситуация, когда мне нужно, чтобы интерфейс wlan0 имел более низкую метрику, чем интерфейс eth0, и я не могу заставить dhcpcd5 позволить мне это сделать (пока).
Питер Хансен

3
Обходной что сделал работу для меня, однако, сказать dhcpcd5 не смотреть на eth0. Это было сделано путем добавления «denyinterfaces eth0» в /etc/dhcpcd.conf.
Питер Хансен

1
@PeterHansen Полезно знать! Добавил эту информацию в конец моего ответа.
JakeGould

2
Продолжение: в некоторых случаях я обнаружил, что у меня установлены оба dhcpcd5 и isc-dhcp-client, оба назначают адреса. Кроме того, существует инициированный системой dhcpcd.service, который запускается на всех интерфейсах (с параметрами -q -b), а также процесс dhcpcd5, запускаемый параметром "dhcp" в сети / интерфейсах. Вздох ... довольно легко решить, как только ты все это знаешь, я надеюсь.
Питер Хансен

8

у меня получилось использовать / etc / network / interfaces как в исходном вопросе и просто удалить клиент dhcp:

apt-get remove dhcpcd5 isc-dhcp-client isc-dhcp-common

В сценарии, когда вам не нужен DHCP (или что-то еще, что может сделать dhcpcd), это самое простое решение.
AVee

1

Должен сказать, что, к сожалению, ни одно из предложенных здесь решений не помогло мне. Но после долгой битвы с DHCP я наконец смог решить проблему:

vi /etc/systemd/network/eth0.network

сдача:

[Match]
Name=eth0

[Network]
DHCP=yes

чтобы:

[Network]
DHCP=no

надеюсь это поможет.


1

Предпочтительным способом отключения любой службы, такой как dhcpcd, является использование функций управления системой. Вам нужно будет перезагрузиться, чтобы оно вступило в силу - если только вы не остановите службу.

Для Джесси (которая использует systemdуправление):

sudo systemctl disable dhcpcd.service

А для старшего Уизи ( System-Vуправление):

sudo update-rc.d dhcpcd disable

Но если вы отключите его, то вам нужно убедиться, что у вас есть статическая конфигурация ip, /etc/network/interfacesиначе ваши интерфейсы не получат IP-адрес.


0

Вот краткое изложение того, что мне нужно было сделать для Raspbian Jessie 2017-01-11:

Отредактируйте / etc / network / interfaces и добавьте раздел статического адреса, удалите другие ссылки на статический интерфейс (в данном случае eth0). Автоматическая строка важна, иначе интерфейс не запустится при загрузке:

    auto eth0
    iface eth0 inet static
      address 192.168.44.17
      netmask 255.255.255.0
      gateway 192.168.44.27

Затем отключите dhcpcd и включите стандартную сеть:

  • Отключить dhcpcd: systemctl disable dhcpcd.service
  • Включить сеть: systemctl enable networking
  • перезагрузка

Raspbian Jessie, начиная с версии 2017-01-11, похоже, не использует сетевую систему


0

Попробовал несколько вещей и обнаружил, что

 apt list --installed | grep dhcp

нашел:

dhcpcd5 
isc-dhcp-client
isc-dhcp-common

Я просто отключил dhcpcd5и исправил это с помощью:

 sudo apt-get remove dhcpcd5

сделал перезагрузку и все было денди

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.