Хорошее подробное объяснение синтаксиса /etc/network/interfaces?

Вопрос или проблема

Я понял очень основную концепцию того, как использовать /etc/network/interfaces, но все, что я нахожу в Интернете, — это примеры, пример за примером, которые я могу копировать и вставлять. Мне не хватает объяснения синтаксиса, объяснения значений команд и порядка, в котором команды должны располагаться. Я хочу понять, потому что чаще всего простого копирования и вставки недостаточно, поскольку я не работаю на чистой машине, и я не могу просто перезаписать существующие конфигурации, потому что это сломает много вещей. man interfaces не был очень полезен, так как написан очень сложно.

Примеры вопросов, которые у меня есть: что именно означает inet в строке iface (я даже не мог это найти в мануале), что именно означает manual в строке iface (многие примеры используют это, но, согласно мануалу, это требует дополнительного конфигурационного файла, который не представлены в примерах), когда я должен их использовать или мне они нужны? Когда нет? Когда я создаю мост, что именно происходит с интерфейсами?

Итак, давайте разделим это на части, чтобы легче было понять /etc/network/interfaces:

Канальный уровень + варианты типа интерфейса (в общем, первый из каждого интерфейса стихи и называется семейство адресов + метод по interfaces(5) мануалам):

auto интерфейс – Запустить интерфейс(ы) при загрузке. Поэтому интерфейс lo использует этот тип конфигурации связи.

allow-auto интерфейс – То же самое, что и auto

allow-hotplug интерфейс – Запустить интерфейс, когда обнаруживается событие “подключения”. В реальном мире это используется в тех же ситуациях, что и auto, но разница в том, что он будет ждать события, такого как “обнаружение через udev hotplug api” или “подключение кабеля”. См. “Связанные материалы (hotplug)” для дополнительной информации.

Эти опции в основном являются опциями “канального уровня”, устанавливающими состояния связи на интерфейсах и не связанными с “сетевым уровнем” (маршрутизация и адресация). Например, вы можете иметь агрегацию каналов, где интерфейс bond0 должен быть активен независимо от состояния связи, а его члены могут быть активны после события состояния связи:

auto bond0
iface bond0 inet manual
        down ip link set $IFACE down
        post-down rmmod bonding
        pre-up modprobe bonding mode=4 miimon=200
        up ip link set $IFACE up mtu 9000
        up udevadm trigger

allow-hotplug eth0
iface eth0 inet manual
        up ifenslave bond0 $IFACE
        down ifenslave -d bond0 $IFACE 2> /dev/null

allow-hotplug eth1
iface eth1 inet manual
        up ifenslave bond0 $IFACE
        down ifenslave -d bond0 $IFACE 2> /dev/null

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

Наиболее распространенные типы интерфейсов:

Все опции ниже являются суффиксом для определенного интерфейса (iface <Семейство_интерфейсов>). В основном iface eth0 создает стих с именем eth0 на Ethernet-устройстве. iface ppp0 должен создать точечный интерфейс, и он может иметь разные способы получения адресов, такие как inet wvdial, который перенаправит конфигурацию этого интерфейса на скрипт wvdialconf. Кортеж inet/inet6 + option определит версию IP-протокола, который будет использоваться, и способ, которым будет настроен этот адрес (static, dhcp, scripts…).
Онлайн-мануалы Debian предоставят вам больше деталей об этом.

Опции для Ethernet-интерфейсов:

inet static – Определяет статический IP-адрес.

inet manual – Не определяет IP-адрес для интерфейса. Обычно используется интерфейсами, которые являются членами моста или агрегации, интерфейсами, которые должны работать в режиме прослушивания (например, зеркалирование портов или сетевые TAP), или имеют настроенное устройство VLAN. Это способ поддерживать интерфейс в рабочем состоянии без IP-адреса.

inet dhcp – Получить IP-адрес через DHCP-протокол.

inet6 static – Определяет статический IPv6-адрес.

Пример:

# Eth0
auto eth0
iface eth0 inet manual
    pre-up modprobe 8021q
    pre-up ifconfig eth0 up
    post-down ifconfig eth0 down

# VLAN интерфейс
auto vlan10
iface vlan10 inet static
        address 10.0.0.1
        netmask 255.255.255.0
        gateway 10.0.0.254
        vlan-raw-device eth0
        ip_rp_filter 0

Этот пример поднимет eth0 и создаст VLAN-интерфейс с именем vlan10, который будет обрабатывать тег номер 10 на Ethernet-кадре.

Общие опции внутри стиха интерфейса (канальный и сетевой уровень):

address – IP-адрес для статически настроенного интерфейса.

netmask – Сетевая маска. Можно опустить, если вы используете адрес CIDR. Пример:

iface eth1 inet static
    address 192.168.1.2/24
    gateway 192.168.1.1

gateway – Шлюз по умолчанию для сервера. Будьте осторожны, чтобы использовать только один.

vlan-raw-device – На VLAN-интерфейсе определяет его “родителя”.

bridge_ports – На мостовом интерфейсе определяет его членов.

down – Используйте следующую команду, чтобы отключить интерфейс вместо ifdown.

post-down – Действия, выполняемые сразу после отключения интерфейса.

pre-up – Действия перед включением интерфейса.

up – Используйте следующую команду, чтобы включить интерфейс вместо ifup. Здесь все зависит от вашей фантазии, чтобы использовать любые доступные опции в iputils. Например, мы могли бы использовать up ip link set $IFACE up mtu 9000, чтобы включить jumbo-кадры во время операции up (вместо того, чтобы использовать опцию mtu саму по себе). Вы также можете вызывать любое другое программное обеспечение, например, up sleep 5; mii-tool -F 100baseTx-FD $IFACE, чтобы заставить интерфейс использовать 100 Мбит/с полный дуплекс через 5 секунд после его включения.

hwaddress ether 00:00:00:00:00:00 – Изменить MAC-адрес интерфейса вместо использования того, который жестко закодирован в ПЗУ или сгенерирован алгоритмами. Вы можете использовать ключевое слово random, чтобы получить случайный MAC-адрес.

dns-nameservers – IP-адреса серверов имен. Требует пакет resolvconf. Это способ сосредоточить всю информацию в /etc/network/interfaces вместо использования /etc/resolv.conf для конфигураций, связанных с DNS.
Не редактируйте файл конфигурации resolv.conf вручную, так как он будет динамически изменяться программами в системе.

dns-search example.net – Добавьте example.net как домен к запросам хоста, создавая FQDN. Опция domain в /etc/resolv.conf

wpa-ssid – Беспроводной: Установите беспроводной WPA SSID.

mtuРазмер MTU. mtu 9000 = Jumbo Frame. Полезен, если ваш Linux-ящик подключен к коммутаторам, которые поддерживают большие размеры MTU. Может нарушать работу некоторых протоколов (у меня были плохие опыты с snmp и jumbo-кадрами).

wpa-psk – Беспроводной: Установите шестнадцатерично закодированный PSK для вашего SSID.

ip_rp_filter 1Обратный фильтр пути включен. Полезен в ситуациях, когда у вас есть 2 маршрута к хосту, и это заставит пакет вернуться откуда он пришел (один и тот же интерфейс, используя свои маршруты). Пример: вы подключены к своей локальной сети (192.168.1.1/24), и у вас есть dlna-сервер с одним интерфейсом в вашей локальной сети (192.168.1.10/24) и другим интерфейсом в DMZ для выполнения административных задач (172.16.1.1/24). Во время ssh-сеанса с вашего компьютера к dlna dmz ip информация должна вернуться к вам, но будет зависать вечно, потому что ваш dlna-сервер будет пытаться доставить ответ прямо через свой локальный интерфейс. С включенным rp_filter это гарантирует, что соединение вернется оттуда, откуда оно пришло. Более подробная информация здесь.

Некоторые из этих опций не являются необязательными. Debian предупредит вас, если вы укажете IP-адрес на интерфейсе без сетевой маски, например.

Вы можете найти больше хороших примеров сетевой конфигурации здесь.

Связанные материалы:

Ссылки с информацией, связанной с файлом конфигурации сети /etc/network/interfaces:

Я также хотел бы добавить, что:

  • интерфейсы предназначены для служб ifup/ifdown.
  • Когда вы используете allow-hotplug, он не запустится с ifup/ifdown, потому что вам нужно использовать флаг --allow=hotplug.

Вы можете отслеживать, что происходит с ifup, используя флаг –verbose.

Я не на 100% уверен в этом, но кажется, что, по сути, когда вызывается ifup, вы будете выполнять все из /etc/network/interfaces с up … если не указано иное.

Я не уверен, как это относится к: service networking …

Было бы здорово, если бы кто-то указал, что происходит после вызова:

service networking restart

в отношении ifup/ifdown.

Если вам нужно добавить опции при использовании пакета resolvconf, т.е. в Ubuntu вы помещаете эту конфигурацию в /etc/resolvconf/resolv.conf.d/base:

# /etc/resolvconf/resolv.conf.d/base
options timeout:1 attempts:1 rotate

Важная вещь для имен атрибутов:

Нет ни одного файла со стандартным описанием. Это означает, что этот файл определяется реализацией.

Он может быть в нижнем, верхнем или смешанном регистре.

Не имеет значения, ‘-‘ или ‘_’.

Не может содержать пробелов и табуляций.

Как говорят источники ifupdown

Кроме некоторых общих названий, таких как “pre-up”, “down” и т. д., которые нельзя записывать другим способом.

Ответ или решение

Понять синтаксис файла /etc/network/interfaces

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

Основные компоненты синтаксиса

Файл разделён на "стадзы" (stanzas), каждая из которых руководствуется определённым синтаксисом. Грубая структура выглядит так:

auto <интерфейс>
iface <интерфейс> <адресная_семья> <метод>
    <опции>

1. Директива auto

Эта директива указывает, что интерфейс должен автоматически запускаться при загрузке системы. Пример:

auto eth0

2. Директива iface

Это основной блок конфигурации для каждого интерфейса. Синтаксис:

iface <интерфейс> <адресная_семья> <метод>
  • <интерфейс> — имя интерфейса (например, eth0, wlan0).
  • <адресная_семья> может быть inet для IPv4, inet6 для IPv6 или bond для интерфейсов агрегации.
  • <метод> указывает способ настройки IP-адреса:
    • static для статической адресации,
    • dhcp для автоматического получения IP-адреса через DHCP,
    • manual для ручной конфигурации без присвоения IP-адреса.

Пример:

iface eth0 inet dhcp

3. Опции интерфейса

После объявления интерфейса возможно добавление дополнительных параметров. Вот несколько ключевых опций:

  • address — указывает статический IP-адрес для интерфейса.
  • netmask — маска подсети. Может быть опущена если используется CIDR-адрес.
  • gateway — указывает шлюз по умолчанию.
  • up/down — команды, которые будут выполнены соответственно перед и после активации интерфейса.
  • hwaddress — смена MAC-адреса интерфейса.

Пример установки статического адреса:

iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1

4. Директивы allow-auto и allow-hotplug

  • allow-auto — аналогично auto, но для динамической инициализации интерфейсов.
  • allow-hotplug — запускает интерфейс, когда система обнаруживает его наличие, что полезно для USB-устройств или других интерфейсов, которые могут подключаться и отключаться.

Пример использования allow-hotplug:

allow-hotplug wlan0
iface wlan0 inet dhcp

Применение и контекст использования

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

Как это связано с командами ifup и ifdown

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

Специальные сценарии

Создание ВЛАН

При создании VLAN интерфейсов, <интерфейс> может ссылаться на физический интерфейс, который будет служить "родительским" для VLAN. Это полезно для разделения сетевого трафика.

Вот пример конфигурации для VLAN 10:

auto vlan10
iface vlan10 inet static
    address 10.0.0.1
    netmask 255.255.255.0
    vlan-raw-device eth0

Проблемы конфигурации

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

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...