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

139

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

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

Фу Бар
источник
4
Страница man говорит, что после имени интерфейса будет семейство адресов, которое использует интерфейс. «inet» - это имя для IPv4, inet6 для ipv6. Также есть ipx, x25, appletalk ..., хотя ifupdown работает только с inet / inet6 / ipx, как объясняется на странице руководства. manualозначает, что если upupdown ничего не делает с ними, вы должны сделать это самостоятельно вручную.
Стефан Шазелас

Ответы:

169

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

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

auto interface- Запустите интерфейс (ы) при загрузке. Вот почему loинтерфейс использует такую ​​конфигурацию связывания.

allow-auto interface - Такой же как auto

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

Эти параметры в значительной степени являются параметрами «уровня 2», устанавливающими состояния каналов на интерфейсах, и не связаны с «уровнем 3» (маршрутизация и адресация). В качестве примера у вас может быть агрегация ссылок, в которой интерфейс 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 <Interface_family>). По сути, 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 Interface
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и создаст вызванный интерфейс VLANvlan10 , который обработает тег номер 10 в кадре Ethernet.

Общие параметры в разделе интерфейса (уровень 2 и 3):

address - IP-адрес для статического 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для включения больших кадров во время upоперации (вместо использования самой mtuопции). Вы также можете вызвать любое другое программное обеспечение, например, up sleep 5; mii-tool -F 100baseTx-FD $IFACEустановить полный дуплексный режим 100 Мбит / с через 5 секунд после запуска интерфейса.

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

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

dns-search example.net- Добавьте example.net в качестве домена к запросам хоста, создав полное доменное имя. Вариант 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файлу конфигурации сети:


источник
Спасибо, это очень помогает. Имеет ли inetкакое-либо отношение к "интернету"? Я читал где-то, что это просто означает «IPv4» и inet6означает «IPv6», но термин «inet» действительно сбивает с толку, когда вы видите его, и путаете его с сокращением «интернет». И имена, которые вы используете, например eth0, они определены или я могу выбрать их сам? Если у меня более одного адаптера локальной сети, как узнать, ethк какому адаптеру принадлежит какой сетевой адаптер?
Foo Bar
2
Обе. Вместе они определяют метод получения IP-адреса (dhcp, static, ppp-сценарии, без адреса) и версию протокола ip ( inet= v4 и inet6= v6). Имена интерфейсов во многом зависят от используемого вами дистрибутива и способа udevего настройки. Debian использует eth*и wlan*для кабельных и беспроводных интерфейсов. В Fedora используется схема biosdevname, где указан em0первый встроенный интерфейс Ethernet на вашей материнской плате, а в p<slot>p<eth port>качестве имени PCI. Вы можете исправить сетевые имена в /etc/udev/rules.d/70-persistent-net.rulesили создать псевдоним interfaces.
2
Относительно "шлюз - шлюз по умолчанию сервера. Будьте осторожны, чтобы использовать только один из этого парня". Это один на раздел или один интерфейс шлюза среди всех разделов?
ctbrown
2
Должен быть один шлюз среди всех разделов, иначе у вас будут проблемы с маршрутом по умолчанию. Для работы с несколькими шлюзами / несколькими каналами потребуется некоторое продуманное решение с iptables + маркировка пакетов + правила ip.
Один небольшой запрос, если в этом файле у меня iface eth0 inet static, а затем, если я напишу какой-нибудь IP-адрес в поле адреса, означает ли это, что этот конкретный IP-адрес, который я только что написал, будет привязан к MAC-адресу моей системы?
k10
0

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

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

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

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

Я не уверен, как это относится к сервису сетей ...

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

service networking restart

по отношению к ifup / ifdown.

с уважением
источник