Различия между /etc/dhcpcd.conf и / etc / network / interfaces?

64

У меня есть эта конфигурация в / etc / network / interfaces :

auto lo
iface lo inet loopback

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan0
#iface wlan0 inet dhcp
        iface wlan0 inet static
        address 192.168.0.110
        netmask 255.255.255.0
        network 192.168.0.1
        gateway 192.168.0.1
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp


iface eth0 inet static
    address 192.168.0.115
    netmask 255.255.255.0
    network 192.168.0.1
    gateway 192.168.0.1

Беспроводной статический IP работал, но eth0 не работал.

Поэтому я попытался сделать конфигурацию в /etc/dhcpcd.conf :

interface eth0
static ip_address=192.168.0.115/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

И это сработало. Я в замешательстве и вот несколько вопросов:

  1. Когда использовать какой файл?

  2. Почему Wi-Fi работает с / etc / network / interfaces, а eth0 - нет?

  3. Имеет ли dhcpcd какой- то приоритет над / etc / network / interface ?

  4. Как проверить, какой сервис имеет приоритет или какой-то? А какой сервис использует / etc / network / interface ?

CuriousGuy
источник
4
Отличный вопрос и кое-что, о чем я собирался задать #raspbian. Как многолетний администратор Un * x, я считаю, что это фундаментальное изменение ставит в тупик абсолютную нехватку документации. Мне удалось найти этот вопрос после часа проб и ошибок. Хотел бы я найти raspberrypi.stackexchange.com/questions/37920/… ранее
Аластер МакКормак
Я думаю, что вопрос должен был быть задан в комментариях, как именно eth0 потерпел неудачу? Что такое ip addrвыход и systemctl status networkingвыход? Потому что, если OP попытался сделать это через ssh и использовать eth0 ip для ssh в, то модифицированный eth0 ip будет назначен как вторичный ip для eth0, чтобы сохранить непрерывный сеанс ssh непрерывным, я попытался изменить eth0 ip в качестве OP упоминается, но sshing через wlan0, и он работает и имеет преимущество перед dhcp, в моем случае это был dhclient на Stretch, но sshing через eth0, имеет место предыдущий упомянутый случай.
Павел Сайек
И да, dhcpcd также был протестирован, ни один не имеет предпочтения перед /etc/network/interfacesнастройками.
Павел Сайек

Ответы:

65

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

  1. Когда использовать какой файл?

Я собираюсь сделать предположение, что вы страдаете от общей степени путаницы, которая происходит в данный момент (в более широком сообществе Raspberry Pi) с появлением Debian ' Jessie ' вместо Debian 'Wheezy'. Это изменение сделало большое количество учебников в худшем случае устаревшим и в лучшем случае запутанным.

Ответ на этот вопрос заключается в том, что при использовании Wheezy было нормально вносить изменения в /etc/network/interfacesфайл для настройки сетевых интерфейсов (см. Рисунок). При использовании Jessie необходимо будет внести изменения в /etc/dhcpcd.conf. Однако, если wlan0вы вносите изменения в беспроводное соединение ( ), вам также нужно будет внести изменения, в /etc/wpa_supplicant/wpa_supplicant.confкоторые вы добавляете сетевой ssid и пароль.

  1. Почему Wi-Fi работает с / etc / network / interfaces, а eth0 - нет?

Я не уверен, как могло работать соединение Wi-Fi, поскольку в ваших файлах отсутствует некоторая информация (по крайней мере, ssid). Как указывал janos, приоритет деталей соединения etho, следующих за деталями wlan0, вероятно, сделал их работоспособными (так как они были бы замечены последним процессом, читающим файл).

  1. Имеет ли dhcpcd какой-то приоритет над / etc / network / interface?

Нет, они разные и предназначены для разных целей под Джесси. В целях использования Джесси довольно простым способом вы можете в значительной степени игнорировать interfacesфайл и работать с dhcpcd.confи wpa_supplicant.conf.

  1. Как проверить, какой сервис имеет приоритет или какой-то? А какой сервис использует / etc / network / interface?

Опять же, я сделаю предположение, что вопрос скорее в том, « Какой файл я использую, и нужно ли мне использовать тот, который имеет приоритет? вопрос. Ответ заключается в том, что с переходом с Wheezy на Jessie (и в более широком смысле с принятием systemd ) конфигурация `dhcpcd.conf 'и' wpa_supplicant.conf 'будет нормой, а файл' interfaces 'останется к своим собственным устройствам.

Что это значит для тебя?

Хорошо (опять же) предполагая, что вы пытаетесь настроить проводные (eth0) и беспроводные (wlan0) соединения со статическими IP-адресами, вы хотели бы, чтобы ваш interfacesфайл был по умолчанию, как он был первоначально установлен;

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Вы хотели бы, чтобы ваш dhcpcd.confфайл включал сведения о соединении в конце файла для обоих интерфейсов, и дополнительные записи, вероятно, выглядели бы примерно так;

# Custom static IP address for eth0.
interface eth0
static ip_address=192.168.0.115/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

# Custom static IP address for wlan0.
interface wlan0
static ip_address=192.168.0.115/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

Наконец, вы хотели бы отредактировать ваш wpa_supplicant.confфайл так, чтобы он включал ssid для сети Wi-Fi и пароль. Вероятно, это должно выглядеть примерно так;

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="homenetwork"
    psk="h0mepassw0rd"
}

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

Я на самом деле написал это, и вы можете получить информацию в бесплатной электронной книге « Достаточно Raspberry Pi» от Leanpub.

d3noob
источник
1
Не работает Если мы включим оба интерфейса с помощью .eg, ifconfig eth0 up ping снаружи и ssh снаружи не будет работать. Если мы поместим один из интерфейсов в dhcp, все будет работать.
Джузеппе
Надеюсь, кто-нибудь сможет помочь с вашим вопросом
d3noob
У меня не получилось по нескольким причинам. Во-первых, этот вопрос носит общий характер, и если ответы на этот вопрос для Джесси, это было давно, и мы перешли в основном к растяжке, и только на этой неделе это было круто. В моем файле интерфейсов нет ничего из того, что вы упоминаете.
Брайан Булковски
6

Приоритет связан с вашей конфигурацией init или systemd. Что касается dhcp: если у вас есть статически или вручную настроенный интерфейс, и dhcp начинает запрашивать адрес впоследствии, он переопределит то, что у вас уже есть. В Debian dhcp запускается для интерфейсов, для которых вы указываете dhcp, а не только волшебным образом. Если у вас неожиданное поведение, у вас может быть другая система, работающая в фоновом режиме, например NetworkManager.

За точку:

  1. вообще не используйте dhcpcd.conf, оставьте все как есть.
  2. У вас нет горячей линии с разрешением eth0.
  3. Если dhcpcd запускается после подключения к сети и у вас настроено управление интерфейсом, он будет работать.
  4. Проверьте порядок, в котором вы запускаете эти услуги.
Джон Китс
источник
4

Беспроводной статический IP работал, но eth0 не работал.

eth0Интерфейс был , вероятно , не воспитывался при загрузке системы , потому что его нет в списке на autoлинии. От man interfaces:

Строки, начинающиеся со слова «auto», используются для определения физических интерфейсов, которые будут вызываться при запуске ifup с параметром -a. (Эта опция используется сценариями загрузки системы.) Имена физических интерфейсов должны следовать за словом «auto» в той же строке. Может быть несколько «авто» строф. ifup выводит именованные интерфейсы в указанном порядке.

Измените эту строку:

auto lo

К этому:

auto lo eth0

И тогда это должно работать.

Другие ответы адресовали ваши другие вопросы. Надеюсь, это поможет.

Янош
источник
2
Это ответ. У ОП есть и другие проблемы, но для людей, подобных мне, которые следовали другим руководствам, которые просто добавляли статическую информацию /etc/network/interfaces, отсутствующий фрагмент был просто auto eth0и перезапускал сеть или перезагружался!
Адам Каплан
2

Посмотрите, Как я настраиваю сеть / WiFi / Статический IP для деталей о том, как настроить сеть.

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

Если вы действительно хотите использовать /etc/network/interfaces (кроме его по умолчанию), вам нужно будет отключить dhcpcd.

Объяснение dhcpcdэтого форума слишком сложное, но ссылка https://wiki.archlinux.org/index.php/dhcpcd содержит хорошее резюме.

Milliways
источник
2

Сначала /etc/network/interfacesверните файл в исходную версию ...

# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult `/etc/dhcpcd.conf` and `man dhcpcd.conf`

# Include files from `/etc/network/interfaces.d`:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Затем сохраните ваши изменения в /etc/dhcpcd.confфайле просто и просто для беспроводного ...

(внизу файла ...)

nohook lookup-hostname

interface wlan0
    static ip_address=192.168.0.53/24
    static routers=192.168.0.1
    static domain_name_servers=8.8.8.8

/etc/wpa_supplicant/wpa_supplicant.conf:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US

network={
    ssid="The SSID of your Router"
    psk="daPassword"
    scan_ssid=1
    key_mgmt=WPA-PSK
}
Грег Ой
источник
0

Имейте в виду, что последняя версия Raspbian Jessie (30.12.2016) содержит ошибку во второй строке файла интерфейсов. Во второй строке отсутствует символ #, который обозначает строку как комментарий. Эта проблема делает файл интерфейсов нечитаемым для системы. Я потратил много часов, пытаясь заставить мой Wi-Fi работать, прежде чем я нашел эту ошибку.

Чтобы это исправить, просто добавьте символ # в начало строки.

EVictory
источник