- Вопрос или проблема
- Ответ или решение
- Понять синтаксис файла /etc/network/interfaces
- Основные компоненты синтаксиса
- 1. Директива auto
- 2. Директива iface
- 3. Опции интерфейса
- 4. Директивы allow-auto и allow-hotplug
- Применение и контекст использования
- Как это связано с командами ifup и ifdown
- Специальные сценарии
- Создание ВЛАН
- Проблемы конфигурации
- Заключение
Вопрос или проблема
Я понял очень основную концепцию того, как использовать /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 и агрегации, правильная настройка гарантирует бесперебойную работу ваших сетевых интерфейсов. Не забывайте экспериментировать и документировать изменения для поддержания структуры конфигурации.