Różnice między /etc/dhcpcd.conf i / etc / network / interfaces?

63

Mam tę konfigurację w / 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

Bezprzewodowy statyczny adres IP działał, ale eth0 nie.

Próbowałem więc wykonać konfigurację w /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

I zadziałało. Jestem zdezorientowany i oto kilka pytań:

  1. Kiedy użyć którego pliku?

  2. Dlaczego wifi działało z / etc / network / interfaces, a eth0 nie?

  3. Czy dhcpcd ma jakoś pierwszeństwo przed / etc / network / interface ?

  4. Jak sprawdzić, która usługa ma priorytet czy coś? A która usługa korzysta z / etc / network / interface ?

CuriousGuy
źródło
4
Wielkie pytanie i coś miałem zapytać o #raspbian. Jako wieloletni administrator Un * x uważam, że ta fundamentalna zmiana jest zaskakująca, a jej uzupełnieniem jest absolutny brak dokumentacji. Zdarzyło mi się znaleźć to pytanie po godzinie prób i błędów. Chciałbym znaleźć wcześniej raspberrypi.stackexchange.com/questions/37920/...
Alastair McCormack
Myślę, że w komentarzach należy zadać pytanie, w jaki sposób zawiodła etyka? Jaka jest ip addrwydajność i systemctl status networkingwydajność? Ponieważ jeśli OP spróbuje to zrobić za pomocą ssh i przy użyciu ip eth0 do ssh, wówczas zmodyfikowany ip eth0 zostanie przypisany do ip jako drugorzędny ip, aby utrzymać nieprzerwaną sesję ssh, próbowałem zmienić ip eth0 jako OP wspomniane, ale sshing przez wlan0 i działa i ma pierwszeństwo przed dhcp, w moim przypadku było dhclient na Stretch, ale sshing przez eth0, poprzednio wspomniany przypadek ma miejsce.
Pavel Sayekat
I tak, dhcpcd również został przetestowany, żaden nie ma pierwszeństwa przed /etc/network/interfacesustawieniami.
Pavel Sayekat

Odpowiedzi:

65

Wszystkie odpowiedzi na to pytanie mają swoje zalety, ale myślę, że istnieje możliwość bezpośredniego zajęcia się konkretnymi pytaniami.

  1. Kiedy użyć którego pliku?

Przyjmuję założenie, że cierpisz z powodu ogólnego zamieszania, które występuje obecnie (w szerszej społeczności Raspberry Pi) z wprowadzeniem Debiana „ Jessie ” zamiast Debiana „Wheezy”. Ta zmiana spowodowała, że ​​duża liczba samouczków stała się w najgorszym przypadku przestarzała, aw najlepszym razie myląca.

Odpowiedź na to pytanie jest taka, że ​​przy korzystaniu z Wheezy normalne było wprowadzanie zmian w /etc/network/interfacespliku w celu konfiguracji interfejsów sieciowych (patrz rysunek). Podczas korzystania z Jessie konieczne będzie wprowadzenie zmian w pliku „/etc/dhcpcd.conf”. Jeśli jednak wprowadzasz zmiany w połączeniu bezprzewodowym ( wlan0), musisz również wprowadzić zmiany, do /etc/wpa_supplicant/wpa_supplicant.confktórych dodajesz identyfikator sieci SSID i hasło.

  1. Dlaczego wifi działało z / etc / network / interfaces, a eth0 nie?

Nie jestem pewien, jak mogło działać połączenie Wi-Fi, ponieważ w twoich plikach brakuje informacji (przynajmniej ssid). Jak zauważył janos, priorytet szczegółów połączenia eto następujących po szczegółach wlan0 prawdopodobnie sprawił, że działały (ponieważ byłyby widoczne jako ostatni podczas procesu odczytu pliku).

  1. Czy dhcpcd ma jakoś pierwszeństwo przed / etc / network / interface?

Nie, są różne i zostały zaprojektowane tak, aby odpowiadały różnym celom w ramach Jessie. Aby używać Jessie w dość prosty sposób, możesz zignorować interfacesplik i pracować z dhcpcd.conforaz wpa_supplicant.conf.

  1. Jak sprawdzić, która usługa ma priorytet lub coś takiego? A która usługa korzysta z / etc / network / interface?

Ponownie przyjmuję założenie, że pytanie brzmi raczej: „ Którego pliku używam i czy muszę użyć takiego, który ma pierwszeństwo? „pytanie. Odpowiedź jest taka, że ​​wraz ze zmianą z Wheezy na Jessie (i w szerszym sensie wraz z przyjęciem systemd ) konfiguracja plików „dhcpcd.conf” i „wpa_supplicant.conf” stanie się normą, a plik „interfejsów” pozostanie na własne urządzenia.

Co to dla ciebie znaczy?

Cóż (ponownie) zakładając, że próbujesz ustanowić połączenie przewodowe (eth0) i bezprzewodowe (wlan0) ze statycznymi adresami IP, chciałbyś, aby interfacesplik był domyślny tak, jak był początkowo instalowany;

# 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

Chciałbyś, aby Twój dhcpcd.confplik zawierał szczegóły połączenia na końcu pliku dla obu interfejsów, a dodatkowe wpisy prawdopodobnie wyglądałyby trochę tak;

# 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

Na koniec chcesz edytować wpa_supplicant.confplik, aby zawierał SSID dla sieci Wi-Fi i hasło. Prawdopodobnie powinno to wyglądać trochę tak;

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

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

Mam nadzieję, że to ukrywa. Istnieje bardzo realna możliwość, że moje założenia są błędne, ale ponieważ ostatnio przeszedłem podobną krzywą uczenia się, mam nadzieję, że dane są przydatne.

Faktycznie napisałem to i możesz uzyskać informacje w darmowym ebooku Wystarczy dość Raspberry Pi z Leanpub.

d3noob
źródło
1
Nie pracuj Jeśli uruchomimy oba interfejsy z .eg, ifconfig eth0 up ping na zewnątrz i ssh z zewnątrz nie działają. Jeśli umieścimy jeden z interfejsów w dhcp, wszystko działa.
giuseppe
Mam nadzieję, że ktoś będzie w stanie pomóc z twoim pytaniem
d3noob
Nie działało dla mnie z kilku powodów. Po pierwsze, pytanie jest ogólne, a jeśli odpowiedzi dotyczą Jessie, to dawno temu, a my przeszliśmy głównie do rozciągania, a ten tydzień był buster. W moim pliku interfejsów nie ma nic, o czym wspominałeś.
Brian
6

Priorytet dotyczy twojej konfiguracji init lub systemd. W odniesieniu do dhcp: jeśli masz interfejs skonfigurowany statycznie lub ręcznie, a dhcp zacznie później żądać adresu, zastąpi to, co już masz. W Debianie dhcp jest uruchamiany dla interfejsów, dla których określasz dhcp, a nie tylko magicznie. Jeśli masz nieoczekiwane zachowanie, być może w tle działa inny system, na przykład NetworkManager.

Za punkt:

  1. nie używaj w ogóle pliku dhcpcd.conf, zostaw to.
  2. Nie masz linii zezwalającej na hotplug eth0.
  3. Jeśli dhcpcd zostanie uruchomiony po podłączeniu go do sieci i skonfigurujesz go tak, aby przejął interfejs, zrobi to.
  4. Sprawdź kolejność uruchamiania tych usług.
John Keates
źródło
4

Bezprzewodowy statyczny adres IP działał, ale eth0 nie.

eth0Interfejs nie został prawdopodobnie wychowany przy starcie systemu, ponieważ nie jest notowana na autolinii. Od man interfaces:

Linie rozpoczynające się od słowa „auto” służą do identyfikacji fizycznych interfejsów, które mają być wywoływane, gdy ifup jest uruchamiany z opcją -a. (Ta opcja jest używana przez systemowe skrypty rozruchowe.) Nazwy interfejsów fizycznych powinny znajdować się po słowie „auto” w tym samym wierszu. Może być wiele zwrotek „automatycznych”. ifup wyświetla wymienione interfejsy w podanej kolejności.

Zmień tę linię:

auto lo

Do tego:

auto lo eth0

A potem powinno działać.

Pozostałe odpowiedzi dotyczyły innych pytań. Mam nadzieję, że to pomoże.

janos
źródło
2
TO jest odpowiedź. OP ma również inne problemy, ale dla ludzi takich jak ja, którzy postępowali zgodnie z innymi przewodnikami, które dodały statyczne informacje /etc/network/interfaces, brakujący element był po prostu auto eth0i ponownie uruchomił sieć lub uruchomił się ponownie!
Adam Kaplan,
2

Zobacz Jak skonfigurować sieć / WiFi / Statyczny adres IP, aby uzyskać szczegółowe informacje na temat konfiguracji sieci.

Możesz użyć starszej /etc/network/interfacesmetody, jeśli chcesz. Niestety wymieniony plik zawiera wiele błędów. Powinieneś trzymać się jednej ze standardowych konfiguracji.

Jeśli naprawdę chcesz używać /etc/network/interfaces (innego niż domyślny), musisz go wyłączyć dhcpcd.

Wyjaśnienie tego dhcpcdjest zbyt skomplikowane dla tego forum, ale link https://wiki.archlinux.org/index.php/dhcpcd zapewnia dobre podsumowanie.

Milliways
źródło
2

Najpierw przywróć /etc/network/interfacesplik do oryginalnej wersji ...

# 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

Następnie zachowaj zmiany w /etc/dhcpcd.confpliku proste i tylko dla bezprzewodowego ...

(na dole pliku ...)

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
}
Greg Oij
źródło
0

Pamiętaj, że najnowsza wersja Raspbian Jessie (30.12.2016) zawiera lukę w drugiej linii pliku interfejsów. W drugim wierszu brakuje wiodącego symbolu # w celu oznaczenia linii jako komentarza. Ten problem powoduje, że plik interfejsów jest nieczytelny dla systemu. Spędziłem wiele godzin próbując uruchomić moje wifi, zanim znalazłem ten błąd.

Aby to naprawić, po prostu dodaj symbol # na początku linii.

EVictory
źródło