Etcnet: различия между версиями

Материал из ALT Linux Wiki
 
(не показаны 304 промежуточные версии 46 участников)
Строка 1: Строка 1:
[[Категория:Admin]]
{{DISPLAYTITLE:etcnet}}
{{викифицировать}}
{{span|font-size: 180%|Подсказки пользователю /etc/net}}
 
{|
|-valign="top"
|Дополнительные страницы:
* [[etcnet/qos|настройка QoS]]
* [[etcnet/firewall|настройка сетевого экрана (firewall)]]
Совсем быстрая настройка «с нуля»:
# сконфигурируйте интерфейсы вручную, как надо;
# запустите {{cmd|/etc/net/scripts/contrib/initconf write}};
# проверьте содержимое подкаталогов {{path|/etc/net/ifaces/}}.
|
{| style="border:1px solid #AAA; background:#F9F9F9; width:280px; margin: 0 0 1em 1em; padding:.2em; text-align:center;" class=noprint
|-
|[[Image:Information.svg|20x20px]]Начиная с [[Branches/p5|пятой ветки]],<br /> <div style="display: inline; color: red;">в ALT Linux может использоваться и<br />[[NetworkManager/feature|NetworkManager]]</div> (используйте <tt>NM_CONTROLLED=no</tt><br />в {{path|$iface/options}}, если хотите использовать etcnet).
|}
|
{| style="border:1px solid #AAA; background:#F9F9F9; width:155px; margin: 0 0 1em 1em; padding:.2em; float: right;" class=noprint
|-
|[[Image:Information.svg|20x20px]] external links:
* [http://packages.altlinux.org/ru/Sisyphus/srpms/etcnet package info]
* [http://git.altlinux.org/people/sbolshakov/packages/?p=etcnet.git;a=summary source git repo]
|}
|}
 
<!-- Не убирайте div-ы, на них есть внешние ссылки! -->
<div id="quickstart"></div>
 
== Быстрый старт ==
<div id="docs"></div>
 
=== Источники информации по /etc/net ===
Обратите внимание, что начиная с версии 0.8.0 документация по /etc/net была собрана из комментариев, расположенных во множестве файлов, в несколько страниц руководств (man). Список всех файлов документации пакета <tt>etcnet</tt> можно получить командой:
<pre>$ rpmquery -d etcnet</pre>
 
<div id="onecard"></div>


== Подсказки пользователю [http://etcnet.org/ /etc/net] ==
=== Быстрая настройка сетевого интерфейса стандарта Ethernet ===
Для настройки одного сетевого интерфейса следует выполнить следующие шаги:


__TOC__
Шаг 1: Создать каталог {{path|/etc/net/ifaces/eth0}}. Это каталог конфигурации данного интерфейса (<tt>eth0</tt>), в котором будут храниться файлы с настройками.


Шаг 2: Определить, какой модуль необходим для вашей сетевой карты. Для этого можно использовать команды: <tt>lspci, lspcidrake, pciscan</tt>.


* Раскроем тему (отдельные страницы)
Шаг 3: В каталоге конфигурации сетевого интерфейса создать файл <tt>options</tt> и записать в этот файл строку:
** [[etcnet/qos|настройка QoS]]
<pre>MODULE=<имя модуля></pre>
** [[etcnet/firewall|настройка сетевого экрана (firewall]])
На данном этапе работу с файлом <tt>options</tt> можно завершить.
<div style='padding:6px;border:1px solid red;'>Шаг 3 имеет смысл только в случае, если модули сетевых карт не грузятся автоматически другими средствами, например посредством udev. Если модуль уже загружен, параметр MODULE бесполезен.</div>


<div id="quickstart"></div>
Шаг 4: Выяснить, какой IP-адрес должен быть назначен вашему интерфейсу. Если ваш сетевой интерфейс  конфигурируется по DHCP, то в файл {{path|/etc/net/ifaces/eth0/options}}  следует записать строку:
<pre>BOOTPROTO=dhcp</pre>
и перейти к шагу 7.


=== Быстрый старт ===
'''Замечание:''' В ряде случаев в файле <tt>options</tt> может понадобиться запись:
<pre>DHCP_HOSTNAME=<имя машины без домена></pre>
Эта опция описана в странице руководства <tt>etcnet-options(5)</tt>.


<div id="docs"></div>
'''Замечание:''' В конце файла <tt>options</tt> необходимо наличие пустой строки.


==== Где брать информацию ====
У сетевого интерфейса существуют два взаимосвязанных атрибута:
Обращаю внимание, что начиная с версии 0.8.0 документация [http://etcnet.org/ /etc/net] переместилась из комментариев, рассеянных по множеству файлов, в несколько man-страниц. Список всех файлов документации пакета можно получить командой
* IP-адрес;
<pre>rpmquery -d etcnet</pre>
* сетевая маска (mask).
Шаг 5: Текущие значение адреса можно просмотреть командой:
{{cmd|# /sbin/ip address show}}
Вероятнее всего вы увидите, что интерфейс-петля lo (loopback) уже сконфигурирован с адресом 127.0.0.1/8 (что эквивалентно IP-адресу 127.0.0.1 и маске подсети 255.0.0.0). <tt>/8</tt> означает длину префикса CIDR (Classless InterDomain Routing).
Для задания IP-адреса и маски подсети интерфейса <tt>eth0</tt> необходимо создать файл {{path|/etc/net/ifaces/eth0/ipv4address}}, в который следует записать IP-адрес с длиной маски, например:
<pre>10.0.0.20/24</pre>  


<div id="onecard"></div>
Наиболее популярны маски /24 (т.е. длина префикса CIDR равная 24 эквивалентна маске сети 255.255.255.0 - это одна сеть класса C на 254 хоста) и /30. Для справки приводится таблица соответствия сетевых масок в различных нотациях.
<ref>
{|
|
{| class="standard"
|-
!маска<br />в битах!!маска<br />точечно-<br />десятичная
|-
|/32||255.255.255.255
|-
|/31||255.255.255.254
|-
|/30||255.255.255.252
|-
|/29||255.255.255.248
|-
|/28||255.255.255.240
|-
|/27||255.255.255.224
|-
|/26||255.255.255.192
|-
|/25||255.255.255.128
|-
|/24||255.255.255.0
|-
|/23||255.255.254.0
|-
|/22||255.255.252.0
|-
|/21||255.255.248.0
|-
|/20||255.255.240.0
|-
|/19||255.255.224.0
|-
|/18||255.255.192.0
|-
|/17||255.255.128.0
|}
|
| ||
{| class="standard"
|-
!маска<br />в битах!!маска<br />точечно-<br />десятичная
|-
|/16||255.255.0.0
|-
|/15||255.254.0.0
|-
|/14||255.252.0.0
|-
|/13||255.248.0.0
|-
|/12||255.240.0.0
|-
|/11||255.224.0.0
|-
|/10||255.192.0.0
|-
|/9||255.128.0.0
|-
|/8||255.0.0.0
|-
|/7||254.0.0.0
|-
|/6||252.0.0.0
|-
|/5||248.0.0.0
|-
|/4||240.0.0.0
|-
|/3||224.0.0.0
|-
|/2||192.0.0.0
|-
|/1||128.0.0.0
|}
|}
</ref>


==== Как быстро настроить одну карту Ethernet ====
Шаг 6: Выяснить адрес вашего шлюза (маршрут по умолчанию). Например, IP-адрес вашего шлюза — <tt>10.0.0.254</tt>. Тогда необходимо создать файл {{path|/etc/net/ifaces/eth0/ipv4route}}, в который записать строку:
# Создайте каталог <tt>/etc/net/ifaces/eth0</tt>. Это собственный каталог конфигурации данного интерфейса, в нём будут храниться файлы с настройками.
<pre>default via 10.0.0.254</pre>
# Определите, какой модуль необходим для вашей карты. Для этого можно использовать lspci, lspcidrake, pciscan. Затем
Шаг 7: Убедиться, что всё выполнено правильно, выполнив команду:
# В каталоге конфигурации создайте файл <tt>options</tt>, в который впишите строку <pre>MODULE=<имя модуля></pre>. Больше ничего пока не добавляйте.
{{cmd|# service network restart}}
# Выясните, какой IP-адрес должен быть назначен вашему интерфейсу. Если интерфейс конфигурируется по DHCP, то поместите в файл <tt>/etc/net/ifaces/eth0/options</tt> строку <tt>BOOTPROTO=dhcp</tt> и переходите к шагу 7. '''Замечание:''' в ряде случаев может также понадобиться <pre>DHCP_HOSTNAME=<имя машины без домена></pre>. Эта опция описана в man-странице <tt>etcnet-options</tt>. Также необходимо, чтобы была пустая строка в конце файла.
Ваш интерфейс <tt>eth0</tt> должен быть успешно сконфигурирован. Если вы конфигурировали <tt>eth0</tt>, используя DHCP-сервер, но адрес интерфейсу не был назначен, то следует искать сообщение от DHCP-сервера в файле {{path|/var/log/messages}}.
# У вашего интерфейса есть два взаимосвязанных атрибута: IP-адрес и сетевая маска. Текущие назначенные адреса можно просмотреть командой <tt>/sbin/ip address show</tt>. Скорее всего вы увидите, что интерфейс-петля lo уже сконфигурирован с адресом 127.0.0.1/8. Создайте файл <tt>/etc/net/ifaces/eth0/ipv4address</tt>, в который поместите IP-адрес с длиной маски, например <pre>10.0.0.20/24</pre>. Наиболее популярны маски /24 и /30. Для справки приводится##LINKTOFTN ftnd1## таблица соответствия сетевых масок в различных нотациях.
# Выясните адрес вашего шлюза (маршрут по умолчанию). Например, этот IP-адрес — 10.0.0.254. Создайте файл <tt>/etc/net/ifaces/eth0/ipv4route</tt>, в который поместите строку <pre>default via 10.0.0.254</pre>
# Убедитесь, что всё выполнено правильно, выполнив команду <tt>service network restart</tt>. Ваш интерфейс должен быть успешно сконфигурирован. Если вы конфигурировали использование DHCP, но адрес интерфейсу не назначается, просмотрите <tt>/var/log/messages</tt>.


<div id="ifplugd"></div>
<div id="ifplugd"></div>


==== Как настроить ifplugd ====
=== Настройка ifplugd ===
С версии 0.7.10 [http://etcnet.org/ /etc/net] управляет ifplugd самостоятельно. Это было сделано для лучшей интеграции пакетов и для возможности мониторить несколько интерфейсов одновременно. Для корректного использования ifplugd необходимо выполнить <tt>chkconfig ifplugd off</tt> и назначить переменную USE_IFPLUGD в файлах options соответствующих интерфейсов. Комментарий по данной переменной дан в файле <tt>/etc/net/ifaces/default/options-eth</tt>.
Начиная с версии 0.7.10, /etc/net управляет ifplugd самостоятельно. Это было сделано для лучшей интеграции пакетов и для возможности следить за несколькими сетевыми интерфейсами одновременно. Для корректного использования ifplugd необходимо выполнить команду:
# chkconfig ifplugd off
 
и назначить переменную <tt>USE_IFPLUGD</tt> (USE_IFPLUGD=yes или USE_IFPLUGD=auto) в файлах <tt>options</tt> соответствующих интерфейсов (<tt>/etc/net/ifaces/<имя интерфейса>/options</tt>). Комментарий по данной переменной дан в странице руководства <tt>etcnet-options(5)</tt>.


<div id="ppp"></div>
<div id="ppp"></div>


==== Как настроить интерфейс PPP ====
=== Настройка PPP-интерфейса ===
Для настройки обычного модемного PPP-соединения вам нужно:
Для настройки обычного модемного PPP-соединения необходимо:
# Создать каталог конфигурации, например, <tt>/etc/net/ifaces/ppp5</tt>. Сейчас вы не можете использовать что-либо кроме pppN или pppNN или pppNNN и т. п.
# Создать каталог конфигурации PPP-интерфейса, например, {{path|/etc/net/ifaces/ppp5}}. Вы можете задавать имена PPP-интерфейса вида pppN, pppNN, pppNNN и т. п., где N - любая цифра от 0 до 9;
# Прочесть <tt>/etc/net/ifaces/default/options-ppp</tt>
# Прочитать файл: {{path|/etc/net/ifaces/default/options-ppp}};
# Создать файлы конфигурации. Скорее всего вам понядобятся pppconnect и pppdisconnect, чтобы pppd знал, как дозваниваться и соединяться. Это скрипты для программы chat(8). Кроме этого в файле pppoptions можно (а зачастую нужно) перечислить опции pppd(8), определяющие способ авторизации, скорость и название порта и т. п.
# Создать файлы конфигурации. Вероятнее всего вам понадобятся <tt>pppconnect</tt> и <tt>pppdisconnect</tt>, чтобы <tt>pppd</tt> "знал", как дозваниваться и соединяться. Это скрипты для программы <tt>chat(8)</tt>. Кроме этого в файле <tt>pppoptions</tt> можно (часто нужно) перечислить опции <tt>pppd(8)</tt>, определяющие способ авторизации, скорость и название порта и т. п.;
# Заполнить <tt>/etc/ppp/chap-secrets</tt> или <tt>/etc/ppp/pap-secrets</tt>.
# Заполнить {{path|/etc/ppp/chap-secrets}} или {{path|/etc/ppp/pap-secrets}}.
 
{{Attention|Использование опций "persist" и "maxfail 0", которые требуются pppd для непрерывных попыток восстановить интерфейс в случае проблем, может привести к невозможности загрузки системы в случае проблем с соединением. Вариант решения есть в {{altbug|23556#c1}} }}
 
==== Настройка USB 3G-модема ====
{{main|Установка и настройка 3G USB модема Huawei E1550}}


<div id="ppp-pptp-pppoe"></div>
<div id="ppp-pptp-pppoe"></div>


==== Как настроить интерфейс PPtP или PPPoE ====
==== Настройка PPTP-интерфейса и PPPoE-интерфейса ====
Хотя PPtP-соединения могут быть настроены и как обычные PPP-соединения, в [http://etcnet.org/ /etc/net] версии 0.7.10 для удобства пользователей была введена опция PPPTYPE. Она может принимать следующие значения:
{{main|VPN (PPTP PPPoE)}}
* dialup: обычный PPP-интерфейс.
 
* pppoe: интерфейс PPPoE. Для такого интерфейса необходимо в опции HOST указывать имя Ethernet-интерфейса, через который будет производиться работа PPPoE. Побочным положительным эффектом будет то, что этот интерфейс будет при необходимости автоматически подниматься (см. ##FTN requires##).
Хотя PPtP-соединения могут быть настроены и как обычные PPP-соединения, в /etc/net версии 0.7.10 для удобства пользователей была введена опция <tt>PPPTYPE</tt>. Она может принимать следующие значения:
* pptp: интерфейс PPtP. Для такого интерфейса необходимо в опции PPTP_SERVER указывать имя хоста или IP-адрес PPtP-сервера, к которому будет производиться подключение. Обратите внимание, что хотя такие интерфейсы не имеют опции HOST, в большинстве случаев имеет смысл указать в опции REQUIRES интерфейс, через который будет достижим хост, указанный в PPTP_SERVER.
* <tt>dialup</tt> - обычный PPP-интерфейс.
* <tt>pppoe</tt> - интерфейс PPPoE. Для такого интерфейса необходимо в опции <tt>HOST</tt> указывать имя Ethernet-интерфейса, через который будет производиться работа PPPoE. Побочным положительным эффектом будет то, что этот интерфейс будет при необходимости автоматически подниматься (т.е настраиваться) (см. [[#Зависимости между интерфейсами|Зависимости между интерфейсами]]).
* <tt>pptp</tt> - интерфейс PPTP. Для такого интерфейса необходимо в опции <tt>PPTP_SERVER</tt> указывать имя хоста или IP-адрес PPtP-сервера, к которому будет производиться подключение. Обратите внимание, что хотя такие интерфейсы не имеют опции <tt>HOST</tt>, в большинстве случаев есть необходимость указать в опции <tt>REQUIRES</tt> интерфейс, через который будет достижим хост, указанный в <tt>PPTP_SERVER</tt>.
 
См. также [[#Замечания о настройке VPN-подключения и туннелей|Замечания о настройке VPN-подключения и туннелей]].


См также ##FTN vpn##)
<div id="DNSandPPP"></div>
<div id="DNSandPPP"></div>


==== DNS и PPP-соединения ====
==== DNS и PPP-соединения ====
<div style="display: inline; color: red;">Внимание: здесь описывается проблема, которая на самом деле была создана, а не решена — бишь ради специфики [https://bugzilla.altlinux.org/show_bug.cgi?id=13789 kppp] была создана чётная ошибка в [https://bugzilla.altlinux.org/show_bug.cgi?id=13773 ppp-common]; последняя уже исправлена.</div>
<div style="display: inline; color: red;">Внимание: здесь описывается проблема, которая на самом деле была создана, а не решена — т.е. ради специфики [https://bugzilla.altlinux.org/show_bug.cgi?id=13789 kppp] была создана чётная ошибка в [https://bugzilla.altlinux.org/show_bug.cgi?id=13773 ppp-common]; последняя уже исправлена.</div>


Довольно долгое время существовала проблема неправильной модификации /etc/resolv.conf при установке PPP-соединений: [https://bugzilla.altlinux.org/show_bug.cgi?id=4249 https://bugzilla.altlinux.org/show_bug.cgi?id=4249]. Сейчас она решена, но необходимо дать пояснения. Прежде всего убедитесь, что у вас в файле <tt>/etc/resolv.conf</tt> есть строка <pre># ppp temp entry</pre>
Довольно долгое время существовала проблема неправильной модификации {{path|/etc/resolv.conf}} при установке PPP-соединений: [https://bugzilla.altlinux.org/show_bug.cgi?id=4249 #4249]. Сейчас она решена, но необходимо дать пояснения. Прежде всего убедитесь, что в файле {{path|/etc/resolv.conf}} есть строка:
Если этой строки нет, то в файле не будут модифицироваться строки nameserver, если только какая-нибудь программа типа kppp это не сделает специально. Если такая строка есть, то <tt>/etc/resolv.conf</tt> будет модифицироваться в зависимости от значения булевской переменной RESOLV_MODS, которую необходимо задавать в файле <tt>/etc/sysconfig/network</tt>.//
<pre># ppp temp entry</pre>
Если этой строки нет, то в файле не будут модифицироваться строки nameserver, если только какая-нибудь программа типа kppp это не сделает специально. Если такая строка есть, то {{path|/etc/resolv.conf}} будет модифицироваться в зависимости от значения булевой (логической) переменной RESOLV_MODS, которую необходимо задать в файле {{path|/etc/sysconfig/network}}.


<div style="display: inline; color: red;">Внимание</div>: при ppp-common >= 0.4-alt1 строки <tt># ppp temp entry</tt> в <tt>/etc/resolv.conf</tt> при отсутствии PPP-соединения, поднятого какой-либо «звонилкой», запущенной от рута — быть '''не должно'''! Если есть — уберите, чтобы <tt>/etc/ppp/ip-up</tt> занимался обновлением записей про DNS в этом файле.
<div style="display: inline; color: red;">Внимание</div>: при ppp-common >= 0.4-alt1 строки <tt># ppp temp entry</tt> в файле {{path|/etc/resolv.conf}} при отсутствии PPP-соединения, поднятого какой-либо программой-«звонилкой», запущенной от администратора системы (пользователь root) — быть '''не должно'''! Если это есть, следует убрать, чтобы {{cmd|/etc/ppp/ip-up}} занимался обновлением записей про DNS в этом файле.


<div id="restartreload"></div>
<div id="restartreload"></div>


==== restart, reload и другие команды ====
=== restart, reload и другие команды ===
У сервиса network имеется ряд команд:
У сервиса <tt>network</tt> имеется ряд команд:
* start: запустить все стационарные интерфейсы. hotplug-интерфейсы будут сконфигурированы при поступлении соответствующего вызова от hotplug.
* <tt>start</tt> - запустить все стационарные интерфейсы. hotplug-интерфейсы будут сконфигурированы при поступлении соответствующего вызова от hotplug.
* startwith <имя профиля>: start с указанным именем профиля, а не определённым автоматически.
* <tt>startwith <имя профиля> </tt> - старт с указанным именем профиля, а не определённым автоматически.
* stop: остановить все стационарные интерфейсы. hotplug-интерфейсы будут расконфигурированы при поступлении соответствующего вызова от hotplug.
* <tt>stop</tt> - остановить все стационарные интерфейсы. hotplug-интерфейсы будут расконфигурированы при поступлении соответствующего вызова от hotplug.
* stopwith <имя профиля>: stop с указанным именем профиля, а не определённым автоматически.
* <tt>stopwith <имя профиля> </tt> - стоп с указанным именем профиля, а не определённым автоматически.
* restart: эквивалентно stop с последующим start, как и в большинстве других сервисов.
* <tt>restart</tt> - эквивалентно <tt>stop</tt> с последующим <tt>start</tt>, как и в большинстве других сервисов.
* restartwith <имя профиля>: рестарт в контексте указанного профиля, эквивалентно stopwith <имя профиля> и startwith <имя профиля>.
* <tt>restartwith <имя профиля> </tt> - рестарт в контексте указанного профиля, эквивалентно <tt>stopwith <имя профиля> и startwith <имя профиля></tt>.
* switchto <имя профиля>: переключение в указанный профиль, эквивалентно stop и startwith <имя профиля>.
* <tt>switchto <имя профиля> </tt> - переключение в указанный профиль, эквивалентно <tt>stop</tt> и <tt>startwith <имя профиля></tt>.
* reload: семантически обозначает «актуализировать текущую конфигурацию». Для всех сконфигурированных в настоящий момент интерфейсов будет выполнена реконфигурация при наличии конфигурации.
* <tt>reload</tt> - семантически обозначает «актуализировать текущую конфигурацию». Для всех сконфигурированных в настоящий момент интерфейсов будет выполнена реконфигурация при наличии конфигурации.
* check: автоматическая проверка конфигурационной базы.
* <tt>check</tt> - автоматическая проверка конфигурационной базы.


<div id="bootproto"></div>
<div id="bootproto"></div>


==== Протоколы конфигурации адресов ====
=== Протоколы конфигурации адресов ===
С помощью опции BOOTPROTO вы можете управлять тем, как у интерфейса будут появляься адреса и маршруты (это относится только к протоколу IPv4, так как IPv6 и IPX приобретают адреса только статически).
С помощью опции <tt>BOOTPROTO</tt> вы можете управлять тем, как у интерфейса будут появляться адреса и маршруты (это относится только к протоколу IPv4, так как протоколы IPv6 и IPX получают адреса только статически).
* static — адреса и маршруты будут взяты из <tt>ipv4address</tt> и <tt>ipv4route</tt>.
* <tt>static</tt> — адреса и маршруты будут взяты из <tt>ipv4address</tt> и <tt>ipv4route</tt>.
* dhcp — интерфейс будет сконфигурирован по DHCP.
* <tt>dhcp</tt> — интерфейс будет сконфигурирован по DHCP.
* ipv4ll — интерфейс будет сконфигурирован с помощью IPv4LL (link-local), ранее известному как ZCIP (zeroconf IP). Это значит, что из сети 169.254.0.0/16 будет подобран ещё не использованный адрес и назначен на интерфейс.
* <tt>ipv4ll</tt> — интерфейс будет сконфигурирован с помощью IPv4LL (link-local), ранее известному как ZCIP (zeroconf IP). Это значит, что из сети 169.254.0.0/16 будет подобран ещё не использованный адрес и назначен на интерфейс.
Существует несколько комбинированных способов:
Существует несколько комбинированных способов:
* dhcp-static — если конфигурация по DHCP не удалась, конфигурировать методом static.
* <tt>dhcp-static</tt> — если конфигурация по DHCP не удалась, конфигурировать методом static.
* dhcp-ipv4ll — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll.
* <tt>dhcp-ipv4ll</tt> — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll.
* dhcp-ipv4ll-static — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll. Если и это не удалось, конфигурировать методом static.
* <tt>dhcp-ipv4ll-static</tt> — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll. Если и это не удалось, конфигурировать методом static.


<div id="internals"></div>
<div id="internals"></div>


=== Почему всё так устроено ===
=== Интеграция с systemd, или что делать если не поднимается интерфейс при старте. ===
Начиная с версии 0.9.12 в etcnet добавлен Unit для включения интерфейсов по мере их появления в системе. Это позволяет избежать "гонок", когда сетевая подсистема поднимается раньше, чем ОС загружает драйвера для сетевых устройств.
Для этого нужно выставить <tt>ONBOOT=no</tt> в файле options интерфейса и включить его подъём через systemd при загрузке: <tt>systemctl enable network@<имя интерфейса></tt>.
 
== Устройство /etc/net ==
<div id="generalinfo"></div>
<div id="generalinfo"></div>


==== Общие сведения ====
=== Общие сведения ===
[http://etcnet.org/ /etc/net] — немного больше, чем кажется на первый взгляд. Несмотря на это, [http://etcnet.org/ /etc/net] остаётся системой конфигурации сети в Linux, то есть должна позволить вам сконфигурировать вашу сеть без трюков и особого напряжения. Если вы всё же читаете эту страницу, то у вас, вероятно, возникли трудности с её использованием.
/etc/net — это система конфигурации сети в Linux, т.е. эта система позволяет Администратору Linux достаточно просто произвести настройки сети. Если же вы читаете эту страницу, то, вероятно, у вас возникли трудности с её использованием. Для решения возможных проблем полезно знать:


Для начала я дам ряд утверждений, от которых можно оттолкнуться:
<!--# [http://etcnet.org/ http://etcnet.org/] - сайт проекта, на котором можно найти примеры конфигурации и статьи по настройке системы. ?Рекурсия? -->
# У проекта есть сайт, на котором можно найти примеры конфигурации и тексты, претендующие на звание документации: [http://etcnet.org/ http://etcnet.org/]
# /etc/net интегрирован в ALT Linux Sisyphus в виде пакетов:
# [http://etcnet.org/ /etc/net] интегрирован в ALTLinux Sisyphus в виде пакетов:
#* {{pkg|etcnet}} - базовые сценарии;
#* etcnet (базовые сценарии)
#* {{pkg|etcnet-full}} - виртуальный пакет с зависимостями на все пакеты, которые могут использоваться сценариями /etc/net, с указанием их точных версий;
#* etcnet-full (виртуальный пакет с зависимостями на все пакеты, которые могут использоваться сценариями [http://etcnet.org/ /etc/net], с указанием их точных версий)
#* {{pkg|etcnetconf}} - '''прототип''' конфигуратора;
#* etcnetconf ('''прототип''' конфигуратора)
#* {{pkg|etcnet-defaults-desktop}} - умолчания для рабочей станции;
#* etcnet-defaults-desktop (умолчания для рабочей станции)
#* {{pkg|etcnet-defaults-server}} - умолчания для сервера;
#* etcnet-defaults-server (умолчания для сервера)
# Пакеты {{pkg|etcnet}} и {{pkg|net-scripts}} — две конфликтующие реализации «подсистемы конфигурации сети» (network-config-subsystem).
# Пакеты etcnet и net-scripts — две конфликтующие реализации такой сущности, как «подсистема конфигурации сети» (network-config-subsystem).
# При установке etcnet вместо net-scripts (или наоборот) сервис <tt>network</tt> оказывается выключенным. Это означает, что при загрузке системы сеть не будет сконфигурирована, что можно проверить командой {{cmd|chkconfig --list network}}. Для быстрого исправления проблемы можно дать команду {{cmd|chkconfig network reset}}.
# При установке etcnet вместо net-scripts или наоборот сервис network оказывается выключенным. Это означает, что при загрузке системы сеть не будет сконфигурирована, проверить это можно командой <tt>chkconfig --list network</tt>. Для быстрого исправления проблемы можно дать команду <tt>chkconfig network reset</tt>.
# etcnet '''НЕ''' импортирует автоматически настройки net-scripts. Если вы только что установили etcnet, и ваши сетевые интерфейсы всё ещё остаются сконфигурированными (несмотря на уже отсутствующий пакет net-scripts), то вы можете запустить сценарий {{cmd|/etc/net/scripts/contrib/initconf}}. Он попытается проанализировать текущее состояние интерфейсов и выведет вам результат. Никаких файлов при этом записано не будет. Если вам подходит вывод initconf, то запустите его с параметром write и он проделает то же самое, но уже с сохранением конфигурации.
# etcnet '''НЕ''' импортирует автоматически настройки net-scripts. Если вы только что установили etcnet и ваши сетевые интерфейсы всё ещё остаются сконфигурированными (несмотря на уже отсутствующий пакет net-scripts), то вы можете запустить сценарий <tt>/etc/net/scripts/initconf</tt>. Он попытается проанализировать текущее состояние интерфейсов и выведет вам результат. Никаких файлов при этом записано не будет. Если вам понравится вывод initconf, запустите его с параметром write и он проделает то же самое, но уже с сохранением конфигурации.
# Для корректной работы системы в целом необходимо, чтобы содержимое файла {{path|/etc/sysconfig/network}} было корректным.
# Для корректной работы системы в целом необходимо, чтобы содержимое файла <tt>/etc/sysconfig/network</tt> было корректным.
# Переменные <tt>sysctl</tt> в ОС ALT Linux конфигурируются в следующих местах<ref>{{altbug|26498}}</ref>:
# Переменные sysctl в ALT Linux конфигурируются в следующих местах: <tt>/etc/sysctl.conf</tt> (глобальные системные), <tt>/etc/sysconfig/network-scripts/sysctl.conf</tt> (общие сетевые в net-scripts), <tt>/etc/net/sysctl.conf</tt> (общие сетевые в [http://etcnet.org/ /etc/net]), <tt>/etc/net/ifaces/*/sysctl.conf*</tt> (частные для конкретных интерфейсов или их типов в [http://etcnet.org/ /etc/net]).
#* {{path|/etc/sysctl.conf}} (глобальные системные);
#* {{path|/etc/sysconfig/network-scripts/sysctl.conf}} (общие сетевые в net-scripts, исходно файл не существует);
#* {{path|/etc/net/sysctl.conf}} (общие сетевые в /etc/net);
#* <tt>/etc/net/ifaces/*/sysctl.conf*</tt> (частные для конкретных интерфейсов или их типов в /etc/net, создаются вручную при необходимости).
Скрипты etcnet используют эти файлы в указанном порядке.


<div id="options.d"></div>
<div id="options.d"></div>


==== Как организованы опции по умолчанию ====
=== Организация опций /etc/net по умолчанию ===
Методология [http://etcnet.org/ /etc/net] предусматривает несколько шагов наследования опций, первый из которых — загрузка опций по умолчанию. Раньше это происходило из одного файла <tt>/etc/net/options</tt>, сейчас же в нашем распоряжении есть каталог <tt>/etc/net/options.d</tt>, из которого будут последовательно прочитаны все файлы.
Методология /etc/net предусматривает несколько шагов наследования опций, первый из которых — загрузка опций по умолчанию. В ранних версиях это происходило из одного файла <tt>/etc/net/options</tt>, сейчас же в вашем распоряжении есть каталог {{path|/etc/net/options.d}}, из которого будут последовательно прочитаны все файлы.


Смысл этого нагромождения следующий: оригинальный архив etcnet содержит только файл <tt>/etc/net/options.d/00-default</tt>.
Иными словами, оригинальный архив etcnet содержит только файл {{path|/etc/net/options.d/00-default}}. Упаковщик etcnet, вместо того, чтобы добавить патч в какой-либо дистрибутив, просто добавляет файл с бОльшим номером, который переопределяет нужные опции.


Упаковщик etcnet в какой-либо дистрибутив вместо того, чтобы прикладывать патч, просто добавляет файл с бОльшим номером, который переопределяет нужные опции.
Ввиду решения различных задач, администратору системы может не подойти содержание дистрибутивного набора. В этом случае администратор может создать файл с ещё более высоким номером и определить настройки умолчания для своей системы. В результате такого подхода:
 
# Уменьшается количество патчей (хотя их свойство "отваливаться" от пакета при его упаковке бывает полезным).
Администратору системы может не понравиться дистрибутивный набор, в этом случае он создаст файл с ещё более высоким номером и определит умолчания для своей системы. В результате такого подхода:
# Уменьшается количество патчей (хотя их свойство отваливаться бывает полезным).
# Не изменяются файлы с опциями, принадлежащие пакету. Это делает обновление пакета намного более корректным.
# Не изменяются файлы с опциями, принадлежащие пакету. Это делает обновление пакета намного более корректным.
# Сразу видно, на каком этапе какие опции переопределяются.
# Можно легко увидеть, какие опции переопределяются на каждом этапе.


<div id="iftab"></div>
<div id="iftab"></div>


==== Зачем нужен iftab ====
=== Назначение iftab ===
Имена сетевых интерфейсов по умолчанию, как правило, содержат их тип (eth, ppp, wifi, ipsec) и индекс: 0 для первого созданного интерфейса, 1 для второго и т. д. При этом соответствие автоматически назначенных имён физическим устройствам может не сохраняться.


Эта особенность неудобна, когда машина с Linux имеет более одного интерфейса каждого типа. Типичными примерами являются маршрутизаторы и ноутбуки. В маршрутизаторах, как правило, используются однотипные сетевые карты и при их замене или изменении порядка на PCI-шине соответствие оказывается нарушенным. В ноутбуках используются ethernet и wifi-устройства с горячим подключением, при этом слотов и карт может быть более чем 1. В этом случае пользователь скорее всего пожелает закрепить за каждой сменной картой её конфигурацию.
Начиная с дистрибутивов, основанных на ветках p5 и 5.1, переименование интерфейсов возложено на udev; см. тж. [http://lists.altlinux.org/pipermail/sisyphus/2009-June/340033.html это письмо] и <s>[https://bugzilla.altlinux.org/show_bug.cgi?id=19313 #19313]</s> и [http://packages.altlinux.org/ru/Sisyphus/srpms/wireless-tools/changelog %changelog ifrename]. В дистрибутивах на базе p8 и новее может быть полезным пакет udev-rule-generator-net, который заполняет /etc/udev/rules.d/70-persistent-net.rules. Возможно, следует отказаться от имён интерфейсов вида ethN и использовать, например, etherN ввиду того, что в новом systemd/udev официально сломан механизм переименования. Данное нововведение в ALT пока отменено; см. тж. [https://bugzilla.altlinux.org/32167 #32167].


[http://etcnet.org/ /etc/net] при конфигурации интерфейса использует то имя, под которым он сконфигурирован, а именно имя каталога, в котором хранятся файлы конфигурации интерфейса. За редким исключением интерфейсам можно назначать произвольные имена. Для того, чтобы автоматически назначенное имя было изменено на требуемое, необходимо поддерживать в актуальном состоянии файл <tt>/etc/net/iftab</tt>. man-страница по формату этого файла входит в пакет <tt>ifrename</tt> (man 5 iftab). Позволю себе заметить, что формат businfo зависит от версии ядра, у 2.6 он длиннее. Мне кажется, у <tt>ethtool -i</tt> businfo более корректна, чем у <tt>lspci</tt>.
Имена сетевых интерфейсов по умолчанию, как правило, содержат их тип (eth, ppp, wifi, ipsec) и индекс: 0 - для первого созданного интерфейса, 1 - для второго и т. д. При этом соответствие автоматически назначенных имён физическим устройствам может не сохраняться.


См. тж. это письмо про [http://lists.altlinux.org/pipermail/devel/2007-October/065097.html отличия etcnet и сервиса ifrename]:
Эта особенность неудобна, когда машина с Linux имеет более одного интерфейса каждого типа. Типичными примерами являются маршрутизаторы и ноутбуки. В маршрутизаторах, как правило, используются однотипные сетевые карты и при их замене или изменении порядка на PCI-шине соответствие оказывается нарушенным. В ноутбуках используются ethernet и wifi-устройства с горячим подключением, при этом слотов и карт может быть более чем 1. В этом случае пользователь/администратор скорее всего пожелает закрепить за каждой сменной картой её конфигурацию.
{{начало цитаты}}И сразу позволю себе прокомментировать другие письма этого треда:
 
/etc/net при конфигурации интерфейса использует то имя, под которым он сконфигурирован, а именно имя каталога, в котором хранятся файлы конфигурации интерфейса.
 
Для привязки сетевой карты к имени интерфейса в простых случаях можно воспользоваться файлом {{path|/etc/iftab}}, man-страница по формату которого входит в пакет <tt>ifrename</tt> (<tt>iftab(5)</tt>).
 
Использование {{path|/etc/iftab}} удобно, поскольку позволяет сохранять традиционные имена интерфейсов (например, eth0), но этот механизм не поддерживает расширенную функциональность /etc/net (в частности, ''профили'' /etc/net).
 
Средством, позволяющим использовать все возможности <tt>etcnet</tt>, является файл {{path|/etc/net/iftab}}, обрабатываемый не утилитой <tt>ifrename</tt>, а непосредственно <tt>etcnet</tt>. Синтаксис этого файла совпадает с синтаксисом {{path|/etc/iftab}}. Ограничением же является невозможность использовать стандартные имена интерфейсом (<tt>ethX</tt>, <tt>pppX</tt>), так как переименование интерфейсов происходит уже после конфигурации интерфейса ядром. В случае, если вам необходим {{path|/etc/net/iftab}}, имеет смысл переименовать интерфейсы, давая им либо двухзначные номера (<tt>eth00</tt>, <tt>eth01</tt>...), либо осмысленные названия (<tt>isplink</tt>, <tt>lan</tt>...)
 
См. письмо про [http://lists.altlinux.org/pipermail/sisyphus/2009-March/337924.html важность /etc/iftab]
и тж. это письмо про [http://lists.altlinux.org/pipermail/devel/2007-October/065097.html отличия etcnet и сервиса ifrename]:
{{начало цитаты}} Комментарии к письмам этого треда (с некоторыми пояснениями):


1. «etcnet уже научился менять местами eth0 и eth1?»
1. «etcnet уже научился менять местами eth0 и eth1?»


Освоение этого фокуса обладает сомнительной пользой. Я по-прежнему
Освоение этого приема обладает сомнительной пользой. Рекомендуется
рекомендую рассматривать eth0 как временное имя с малым сроком жизни,
рассматривать eth0 как временное имя с малым сроком жизни,
а для повышения комфорта пользователей Ethernet-интерфейсы предлагаю
а для повышения комфорта пользователей Ethernet-интерфейсы предлагается
называть eth00, eth01, eth02 etc.
называть eth00, eth01, eth02 etc.


Строка 149: Строка 300:
ряд сервисов, которые иначе могли бы быть упразднены»
ряд сервисов, которые иначе могли бы быть упразднены»


Эти сервисы можно обезвредить контролем CONFMETHOD
Эти сервисы можно "обезвредить" (отключить) контролем CONFMETHOD
из /etc/sysconfig/network. При этом зависимости на пакет etcnet
из /etc/sysconfig/network. При этом зависимости на пакет etcnet
не возникнет, только на network-config-subsystem. Примеры таких
не возникнет, только на network-config-subsystem. Примеры таких
Строка 160: Строка 311:
нахождение /etc/net/iftab в специальном пространстве имён. Для него
нахождение /etc/net/iftab в специальном пространстве имён. Для него
действуют механизмы определения профиля и хоста конфигурации. Это,
действуют механизмы определения профиля и хоста конфигурации. Это,
например, позволит _желающим_ составить конфигурацию так, что срочный
например, позволит, при необходимости, составить конфигурацию так, что срочный
ремонт маршрутизатора сведётся к переносу диска (или массива)
ремонт маршрутизатора сведётся к переносу диска (или массива)
из сгоревшего шасси в запасное. Возможны и другие примеры, которые
из сгоревшего шасси в запасное. Возможны и другие примеры, которые
станут невозможными при помещении iftab в /etc и его лобовой
станут невозможными при помещении iftab в /etc и его прямой
интерпретации.
интерпретации.


Конечно, пользователю единственного ноутбука с одним-двумя сетевыми
Конечно, пользователю единственного ноутбука с одним-двумя сетевыми
интерфейсами такая практика — полный overkill, но его никто и не
интерфейсами такая практика — полный overkill (т.е. такая практика ему не нужна), но его никто и не
заставляет видеть всю подводную часть. В этом и гибкость.{{конец цитаты}}
заставляет видеть всю подводную часть (т.е. все тонкости работы и настройки). В этом и гибкость.{{конец цитаты}}


<div id="specifaces"></div>
<div id="specifaces"></div>


==== Интерфейсы lo, default и unknown ====
=== Интерфейсы lo, default и unknown ===
Сразу после установки в каталоге <tt>/etc/net/ifaces</tt> (в котором хранятся конфигурации интерфейсов) можно обнаружить три каталога: lo, default и unknown.
Сразу после установки пакета <tt>etcnet</tt> в каталоге {{path|/etc/net/ifaces}} (в котором хранятся конфигурации интерфейсов) находятся три каталога:  
* lo
* default
* unknown


Интерфейс lo — стандартная петля, которая должна быть во всякой Linux-системе, поэтому конфигурация для него включена по умолчанию. В остальном он ничем не отличается от любого другого интерфейса и конфигурируется точно так же файлами options и ipv4address.
Интерфейс '''lo''' — стандартная "петля" (loopback), которая должна быть во всякой Linux-системе, поэтому конфигурация для него включена по умолчанию. В остальном он ничем не отличается от любого другого интерфейса и конфигурируется точно так же файлами <tt>options</tt> и <tt>ipv4address</tt>.


Интерфейс default — вовсе не интерфейс. Это специальный каталог, файлы в котором обрабатываются следующим образом:
Интерфейс '''default''' — это не интерфейс, а специальный каталог, файлы в котором обрабатываются следующим образом:
* resolv.conf — если присутствует, то копируется в <tt>/etc/resolv.conf</tt>.
* <tt>resolv.conf</tt> — если присутствует, то копируется в {{path|/etc/resolv.conf}}.
* options — файл опций, читается после опций по умолчанию. Этот файл содержит комментарии.
* <tt>options</tt> файл опций, читается после опций по умолчанию.
* options-<вид интерфейса> — этот файл содержит опции, специфичные для данного вида интерфейсов. Какие-то из них необязательны и позволяют использовать особенности данного вида интерфейсов, например, LINKDETECT в options-eth; другие обязательны, например, HOST в options-bri. Эти файлы содержат комментарии. Обратите внимание, что эти файлы лучше не редактировать. Если вам нужно задать опцию для интерфейса, то как правило это можно сделать в файле options в конфигурационном каталоге данного интерфейса. Это облегчит процесс обновления пакета etcnet.
* <tt>options-<вид интерфейса></tt> — этот файл содержит опции, специфичные для данного вида интерфейсов. Некоторые из них не обязательны и позволяют использовать особенности данного вида интерфейсов, например, <tt>LINKDETECT</tt> в <tt>options-eth</tt>; другие обязательны, например, <tt>HOST</tt> в <tt>options-bri</tt>. Обратите внимание, что эти файлы не рекомендуется редактировать. Если вам нужно задать опцию для интерфейса, то, как правило, это можно сделать в файле <tt>options</tt> в конфигурационном каталоге данного интерфейса. Это облегчит процесс обновления пакета etcnet.
* sysctl.conf-<вид интерфейса> — файл с переменными sysctl, которые необходимо изменить. Сейчас единственный такой файл — sysctl.conf-dvb, который отключает return path filter, что всегда нужно в случае асимметричной маршрутизации.
* <tt>sysctl.conf-<вид интерфейса></tt> — файл с переменными sysctl, которые необходимо изменить. Сейчас единственный такой файл — <tt>sysctl.conf-dvb</tt>, который отключает <tt>return path filter</tt>, что всегда нужно в случае асимметричной маршрутизации.
* iplink-<вид интерфейса> — файл с командами iplink, специфичными для данного вида.
* <tt>iplink-<вид интерфейса></tt> — файл с командами iplink, специфичными для данного вида.
* selectprofile — если этот файл исполняемый, то он будет вызван из сценариев ifup/ifdown, setup/shutdown для того, чтобы вернуть на стандартном выводе имя профиля, которое необходимо использовать. Это позволяет автоматически переключать профили в зависимости от каких-либо условий. В поставку включен комментированный пример сценария: <tt>/etc/net/ifaces/default/selectprofile</tt>.
* <tt>selectprofile</tt> — если этот файл исполняемый, то он будет вызван из сценариев <tt>ifup/ifdown</tt>, <tt>setup/shutdown</tt> для того, чтобы вернуть на стандартном выводе имя профиля, которое необходимо использовать. Это позволяет автоматически переключать профили в зависимости от каких-либо условий. В поставку включен пример сценария: {{path|/etc/net/scripts/contrib/selectprofile}}.
* fw — каталог с настройками сетевого экрана по умолчанию.
* <tt>fw</tt> каталог с настройками сетевого экрана по умолчанию.


Интерфейс unknown — специальная конфигурация, которая будет использована в том случае, когда [http://etcnet.org/ /etc/net] просят сконфигурировать hotplug-интерфейс, для которого не существует каталога конфигурации. Это будет работать только в том случае, если включена опция ALLOW_UNKNOWN.
Интерфейс '''unknown''' — специальная конфигурация, которая будет использована в том случае, когда /etc/net просят сконфигурировать hotplug-интерфейс, для которого не существует каталога конфигурации. Это будет работать только в том случае, если включена опция <tt>ALLOW_UNKNOWN</tt>.


<div id="broadcast"></div>
<div id="broadcast"></div>


==== О загадочном broadcast ====
=== broadcast address===
Периодически возникает вопрос: почему после старта [http://etcnet.org/ /etc/net] при запуске ifconfig можно видеть Bcast:0.0.0.0, хотя при использовании net-scripts это поле было правильным? Дело в том, что net-scripts оперируют адресом, маской, адресом сети и широковещательным адресом, пытаясь определить неизвестные компоненты из известных, а <tt>config-ipv4</tt> просто передаёт утилите ip содержимое файла ipv4address, не заботясь о его содержимом. Хорошо ли это или плохо? Я думаю, что скорее хорошо.
 
Периодически возникает вопрос: почему после старта /etc/net при запуске <tt>ifconfig</tt> можно видеть <tt>Bcast:0.0.0.0</tt>, хотя при использовании net-scripts это поле было правильным?  
 
Ответ: net-scripts оперируют адресом, маской, адресом сети и широковещательным адресом, пытаясь определить неизвестные компоненты из известных, а <tt>config-ipv4</tt> просто передаёт утилите <tt>ip</tt> содержимое файла <tt>ipv4address</tt>, не проверяя его содержание.
Важно заметить, что:
* Если <tt>iproute2</tt> изменит свой синтаксис, то с очень вероятно, что администратору будет необходимо редактировать только конфигурационные файлы.
* Не было найдено проблем с «отсутствующим» broadcast address. Он есть в таблице маршрутизации <tt>local</tt>.  
* Администратор всегда может назначить адрес broadcast в файле <tt>ipv4address</tt>. Это можно сделать с помощью выражения <tt>broadcast +</tt><ref>
Выдержка из файла ip-cref.ps, который входит в документацию пакета iproute2:


Во-первых, если iproute2 изменит свой синтаксис, то с большой вероятностью править придётся только конфигурационные файлы.
<pre>
Во-вторых, я пока не встречал проблем с «отсутствующим» broadcast address. Он есть в таблице маршрутизации local. В-третьих, вы всегда можете назначить адрес broadcast в файле ipv4address. Проще всего это сделать с помощью выражения <tt>broadcast +</tt>##LINKTOFTN ftnd2##.
* broadcast ADDRESS
Обновление: в версии 0.8.0 появилась опция <tt>AUTO_BROADCAST</tt> для автоматического дополнения каждой строки <tt>ipv4address</tt>.
 
the broadcast address on the interface.
It is possible to use the special symbols '+' and '-' instead of the broadcast address. In this case,  
the broadcast address is derived by setting/resetting the host bits of the interface prefix.
NB. Unlike ifconfig, the ip utility does not set any broadcast address unless explicitly requested.
</pre>
</ref>.
'''Замечание:''' В версии 0.8.0 появилась опция <tt>AUTO_BROADCAST</tt> для автоматического дополнения каждой строки <tt>ipv4address</tt>.


<div id="never_rmmod"></div>
<div id="never_rmmod"></div>


==== О ядре 2.6 и пропадающих интерфейсах ====
=== Ядро 2.6 и "пропадающие" интерфейсы ===
Иногда жалуются, что если два интерфейса используют один и тот же модуль ядра и у них определена опция MODULE (то есть скрипты [http://etcnet.org/ /etc/net] сами загружают и выгружают модули), то при опускании одного интерфейса пропадает и второй. Почти наверняка используется ядро 2.6, особенностью которого являются странные значения счётчика ссылок (третий столбец вывода lsmod). Когда он оказывается равен нулю (довольно часто), скрипты могут попытаться выгрузить модуль интерфейса, для которого запущен ifdown. И у них получится, несмотря на то, что другой интерфейс, использующий этот же модуль, находится в состоянии UP.
Иногда возможна ситуация: Если два интерфейса используют один и тот же модуль ядра, и у них определена опция <tt>MODULE</tt> (то есть скрипты /etc/net сами загружают и выгружают модули), то при опускании (отключении) одного интерфейса пропадает и второй интерфейс.  


Чтобы заблокировать выгрузку модулей, можно использовать булевскую переменную NEVER_RMMOD. Возможно, позже это будет происходить автоматически для таких странных ядер.
Такая ситуация почти наверняка возникает при использовании ядра 2.6, особенностью которого являются значения счётчика ссылок (третий столбец вывода {{cmd|lsmod}}). Когда счетчик оказывается равен нулю (довольно часто), скрипты могут попытаться выгрузить модуль интерфейса, для которого запущен ifdown. И такая выгрузка происходит, несмотря на то, что другой интерфейс, использующий этот же модуль, находится в состоянии UP (т.е. он активен).
 
Чтобы заблокировать выгрузку модулей, можно использовать булеву переменную <tt>NEVER_RMMOD</tt>. Возможно, позже это будет происходить автоматически для ядер следующих версий.


<div id="removables"></div>
<div id="removables"></div>


==== О hotplug-интерфейсах и не только ====
=== Cценарии конфигурации сети и hotplug-интерфейсы ===
Часто задают вопросы об опции USE_HOTPLUG, причём задают в контексте уже установленной кем-то USE_HOTPLUG=yes. Я попробую объяснить, зачем нужна эта опция и как её правильно использовать. Есть несколько сценариев конфигурации сети.
 
==== Cценарии конфигурации сети ====
Существует несколько сценариев конфигурации сети.
 
* Первый и самый простой — выполнение {{cmd|service network start}} при старте системы или вручную. При этом требуется только сформировать погруппные (потиповые) списки интерфейсов, подлежащих обработке, и последовательно выполнить требуемые действия. Модули ядра при этом загружаются сценариями /etc/net, при этом имена модулей берутся из опции <tt>MODULE</tt> (в этой опции можно в кавычках перечислить несколько имён и они будут последовательно загружены). Этот метод часто используется на практике и лучше всего подходит для маршрутизаторов. Преимущество метода в том, что вся необходимая информация сконцентрирована в одном месте — каталоге {{path|/etc/net}}. Если опция <tt>MODULE</tt> не определена, то будет предпринята попытка загрузки по имени интерфейса, подразумевая, что файл {{path|/etc/modules.conf}} правильно заполнен.
 
* Второй сценарий — реакция на событие <tt>ifplugd</tt>. В предыдущих версиях существовала сложность, так как требовалась синхронная настройка сервиса <tt>ifplugd</tt>. Сейчас логика работы определена, что выражено в том, что /etc/net взяла управление <tt>ifplugd</tt> на себя. В части загрузки модуля этот сценарий не отличается от первого.
 
* Третий сценарий — реакция на появление или исчезновение сменного устройства. Для обработки таких событий предназначены сценарии <tt>/etc/net/scripts/{ifup,ifdown}-removable</tt>, которые вызываются из сценариев пакетов hotplug и pcmcia-cs. Сложность заключается в том, что для сменных PCMCIA-карт вызовы могут дублироваться: для одного и того же события первый раз ifup-removable будет вызван из hotplug, второй — из pcmcia-cs. Кроме того, hotplug также реагирует на загрузку модулей ядра для обычных карт PCI и, более того, включает сценарии, которые пытаются загружать модули самостоятельно. В этом контексте /etc/net получает слишком много вызовов от hotplug и по умолчанию их игнорирует (<tt>USE_HOTPLUG=no</tt>).


Первый и самый простой — выполнение <tt>service network start</tt> при старте системы или вручную. При этом требуется только сформировать погруппные (потиповые) списки интерфейсов, подлежащих обработке, и последовательно выполнить требуемые действия. Модули ядра при этом загружаются сценариями [http://etcnet.org/ /etc/net], при этом имена модулей берутся из опции MODULE (кстати, в этой опции можно перечислить несколько имён и они будут последовательно загружены, только не забудьте взять список в кавычки). Это мой любимый метод конфигурации, он лучше всего подходит для маршрутизаторов. Преимущество его в том, что вся необходимая информация сконцентрирована в одном месте — каталоге <tt>/etc/net</tt>. Если опция MODULE не определена, то будет предпринята попытка загрузки по имени интерфейса в надежде на правильно заполненный <tt>/etc/modules.conf</tt>.
* Четвёртый сценарий - реакция на появление сетевого интерфейса через systemd. Такое событие обрабатывается через сервис network@.service, которому в качестве аргумента, следующего за @ нужно передать имя интерфейса. Например - systemctl enable network@eth0. В этом случае интерфейс будет подниматься после его появления в системе, что полезно в некоторых случаях, когда система загружается быстрее появления интерфейсов и на момент запуска сервиса network сетевых интерфейсов в системе ещё нет.


Второй сценарий — реакция на событие ifplugd. Раньше существовала путаница, так как требовалась синхронная настройка сервиса ifplugd, но сейчас логика работы более определена, так как [http://etcnet.org/ /etc/net] взяла управление ifplugd на себя. В части загрузки модуля этот сценарий не отличается от первого.
==== hotplug-интерфейсы ====
Рассмотрим использование hotplug-интерфейсов.  


Третий сценарий — реакция на появление или исчезновение сменного устройства. Для обработки таких событий предназначены сценарии <tt>/etc/net/scripts/{ifup,ifdown}-removable</tt>, которые вызываются из сценариев пакетов hotplug и pcmcia-cs. Сложность заключается в том, что для сменных PCMCIA-карт вызовы могут дублироваться: для одного и того же события первый раз ifup-removable будет вызван из hotplug, второй — из pcmcia-cs. Но это не всё. hotplug также реагирует на загрузку модулей ядра для обычных карт PCI и более того, включает сценарии, которые пытаются загружать модули самостоятельно. В этом контексте [http://etcnet.org/ /etc/net] получает слишком много вызовов от hotplug и по умолчанию их игнорирует (USE_HOTPLUG=no).
Пусть администратору необходимо настроить действительно сменную карту. После заполнения {{path|/etc/iftab}} или {{path|/etc/net/iftab}} в файле <tt>options</tt> необходимо будет задать <tt>USE_HOTPLUG=yes</tt>. После этого при получении события от hotplug /etc/net будет работать в том контексте, что модуль в загрузке и выгрузке не нуждается.  


Предположим, вам необходимо настроить действительно сменную карту. После заполнения <tt>/etc/net/iftab</tt> в файле options необходимо будет задать USE_HOTPLUG=yes. После этого при получении события от hotplug [http://etcnet.org/ /etc/net] будет работать в том контексте, что модуль в загрузке и выгрузке не нуждается. Кроме того, '''такой интерфейс будет пропущен при обычном старте сети'''. Почему? Потому, что если он сменный, то единственный достоверный способ узнать, что он присутствует — получить вызов от hotplug. Из факта выполнения <tt>service network start</tt> совсем не следует, что какой-то один или несколько из сконфигурированных hotplug-интерфейсов сейчас в наличии и требует конфигурации. Если вы хотите вручную расконфигурировать hotplug-интерфейс до его извлечения, дайте команду ifdown. Для повторной конфигурации вставьте его ещё раз.
Важно заметить, что '''такой интерфейс будет пропущен при обычном старте сети''', т.к. если он сменный, то единственный достоверный способ узнать, что он присутствует — получить вызов от hotplug. Из факта выполнения {{cmd|service network start}} совсем не следует, что какой-то один или несколько из сконфигурированных hotplug-интерфейсов сейчас в наличии и требуют конфигурации. Если вы хотите вручную расконфигурировать hotplug-интерфейс до его извлечения, используйте команду {{cmd|ifdown}}. Для повторной конфигурации вставьте его ещё раз.


Также существует опция USE_PCMCIA. Если события для вашей карты генерирует pcmcia-cs, то вам нужно её включить. Если события генерируются только hotplug, то используйте опцию USE_HOTPLUG.
Также существует опция <tt>USE_PCMCIA</tt>. Если события для вашей карты генерирует pcmcia-cs, то вам нужно её включить. Если события генерируются только hotplug, то используйте опцию <tt>USE_HOTPLUG</tt>.


<div id="eth0"></div>
<div id="eth0"></div>


==== Почему вредно использование eth0 ====
=== Проблема стандартных имен интерфейсов (eth0 и др.)===
[http://etcnet.org/ /etc/net] активно использует ifrename, который в свою очередь использует файл <tt>/etc/net/iftab</tt>. Часто встречается практика помещать в него правила, назначающие интерфейсам имена eth0 и eth1. Однако существует ряд обстоятельств, лишающих эти действия смысла:
 
* При загрузке модулей имена интерфейсов принимают вид eth0, eth1, eth2… Какие именно, в общем случае контролировать нельзя.
При использовании файла {{path|/etc/net/iftab}}, то есть в случае применения сложных конфигураций, возникает следующая проблема:
* При загрузке модулей имена интерфейсов принимают вид eth0, eth1, eth2… Какие именно — в общем случае контролировать нельзя.
* Имя eth0 обладает наибольшей вероятностью оказаться занятым.
* Имя eth0 обладает наибольшей вероятностью оказаться занятым.
* ifrename не может переименовать интерфейс, если целевое имя уже занято. Единственный способ это сделать — использовать <tt>ifrename -t</tt>, чего лучше избежать.
* ifrename не может переименовать интерфейс, если целевое имя уже занято (udev использует <tt>ifrename -t</tt>, но это не работает после начальной загрузки, см. руководство к  ifrename).
С учётом этого становится ясно, что если <tt>/etc/net/iftab</tt> содержит тот же набор имён интерфейсов, что уже имеется после загрузки модулей, то единственный случай, когда ifrename сможет без ошибок обработать такой файл — изначальное соответствие, не требующее переименования. Поэтому ifrename выдаёт предупреждение при попытке переименовать интерфейс в eth0.
 
Единственный способ разорвать порочный круг — в конце концов отказаться от имён ethX.
С учётом вышеизложенного, если {{path|/etc/net/iftab}} содержит тот же набор имён интерфейсов, что уже имеется после загрузки модулей (то есть <tt>eth0</tt>/<tt>eth1</tt> и другие «стандартные» названия), то единственный случай, когда etcnet сможет без ошибок обработать такой файл — изначальное соответствие, не требующее переименования.
 
Таким образом, при использовании {{path|/etc/net/iftab}} имеет смысл давать интерфейсам названия, отличные по виду от тех, что назначает ядро. В простых случаях лучше использовать {{path|/etc/udev/rules.d/70-persistent-net.rules}} ({{path|/etc/iftab}} до бранчей p5/5.1).


<div id="advanced"></div>
<div id="advanced"></div>


=== Расширенные возможности ===
== Расширенные возможности ==
<div id="multipleIPs"></div>
<div id="multipleIPs"></div>


==== Несколько IP-адресов или маршрутов на одном интерфейсе ====
=== Несколько IP-адресов или маршрутов на одном интерфейсе ===
Вы можете помещать произвольное количество IP-адресов в файл ipv4address по одному адресу на каждой строке. То же самое относится к статическим маршрутам и файлу ipv4route.


Обратите внимание, что [http://etcnet.org/ /etc/net] не анализирует содержимое этих файлов, а формирует на основе каждой строки командную строку для утилиты ip. Это означает, что вы можете помещать в этих файлах произвольные поддерживаемые ip опции и они будут обработаны. Например, в файле ipv4route можно поместить строку <pre>10.0.1.0/24 via 10.0.0.253 metric 50 weight 5 table 100</pre>
Вы можете помещать произвольное количество IP-адресов в файл <tt>ipv4address</tt> по одному адресу на каждой строке. То же самое относится к статическим маршрутам и файлу <tt>ipv4route</tt>.
 
Обратите внимание, что /etc/net не анализирует содержимое этих файлов, а формирует на основе каждой строки командную строку для утилиты {{cmd|ip}}. Это означает, что вы можете помещать в этих файлах произвольные поддерживаемые {{cmd|ip}} опции и они будут обработаны. Например, в файле <tt>ipv4route</tt> можно поместить строку:
<pre>10.0.1.0/24 via 10.0.0.253 metric 50 weight 5 table 100</pre>


<div id="requires"></div>
<div id="requires"></div>


==== Зависимости между интерфейсами ====
=== Зависимости между интерфейсами ===
У интерфейсов vlan, bond, bri и teql, входящих в группу зависимых физических, должна быть определена опция HOST со списком интерфейсов, необходимых для инициализации текущего интерфейса. Если хост-интерфейс не сконфигурирован при поднятии зависимого интерфейса, то это будет исправлено.
У интерфейсов:
* vlan
* bond  
* bri  
* teql  
входящих в группу зависимых физических, должна быть определена опция <tt>HOST</tt> со списком интерфейсов, необходимых для инициализации текущего интерфейса. Если хост-интерфейс не сконфигурирован при поднятии зависимого интерфейса, то это будет исправлено.


Кроме обязательной для определённых интерфейсов опции HOST может быть задана необязательная для всех остальных интерфейсов опция REQUIRES. Интерфейсы, перечисленные в этой опции, будут считаться зависимостями текущего интерфейса. По умолчанию попытка сконфигурировать интерфейс А, который зависит от Б и В, приведёт сначала к конфигурации Б и В. Аналогично, при расконфигурации Б или В сначала будет расконфигурирован А.
Кроме обязательной для определённых интерфейсов опции <tt>HOST</tt>, может быть задана и необязательная для всех остальных интерфейсов опция <tt>REQUIRES</tt>. Интерфейсы, перечисленные в этой опции, будут считаться зависимостями текущего интерфейса. Например, по умолчанию попытка сконфигурировать интерфейс А, который зависит от Б и В, приведёт сначала к конфигурации Б и В. Аналогично, при расконфигурации Б или В сначала будет расконфигурирован А.


Зависимость одного интерфейса от другого не всегда формальна. Например, в сценарии ifup-pre одного интерфейса может использоваться команда, которая потребует разрешения DNS-имени, которое может быть разрешено только с помощью resolv.conf, инсталлируемого другим интерфейсом. Или это может быть PPPoE/PPtP-интерфейс, требующий Ethernet-интерфейс для работы.
Зависимость одного интерфейса от другого не всегда формальна. Например, в сценарии <tt>ifup-pre</tt> одного интерфейса может использоваться команда, которая потребует разрешения DNS-имени, которое может быть разрешено только с помощью <tt>resolv.conf</tt>, инсталлируемого другим интерфейсом. Или это может быть PPPoE/PPtP-интерфейс, требующий Ethernet-интерфейс для работы.


Для того, чтобы избежать неожиданных сбоев в таких случаях, правильно задавайте опцию REQUIRES.
Для того, чтобы избежать неожиданных сбоев в таких случаях, правильно задавайте опцию <tt>REQUIRES</tt>.


<div id="postpre"></div>
<div id="postpre"></div>


==== Как использовать свои сценарии post и pre ====
=== Пользовательские сценарии post и pre ===
Вы можете поместить в каталог конфигурации интерфейса файлы, которые будут выполнены в определённые моменты. Для этого они должны быть исполняемыми и называться следующим образом:
Существует возможность поместить в каталог конфигурации интерфейса файлы, которые будут выполнены в определённые моменты. Для этого они должны быть исполняемыми и называться следующим образом:
* <tt>ifup-pre</tt> — для выполнения перед конфигурированием интерфейса.
* <tt>ifup-pre</tt> для выполнения перед конфигурированием интерфейса.
* <tt>ifup-post</tt> — для выполнения после конфигурирования интерфейса. Например, можно запустить почтовую систему.
* <tt>ifup-post</tt> для выполнения после конфигурирования интерфейса. Например, можно запустить почтовую систему.
* <tt>ifdown-pre</tt> — для выполнения перед расконфигурированием интерфейса. Например, можно остановить почтовую систему.
* <tt>ifdown-pre</tt> для выполнения перед расконфигурированием интерфейса. Например, можно остановить почтовую систему.
* <tt>ifdown-post</tt> — для выполнения после расконфигурирования интерфейса.
* <tt>ifdown-post</tt> для выполнения после расконфигурирования интерфейса.
Также в версии до 0.8.0 вы можете использовать следующие сценарии (они должны быть исполняемыми):
 
Также в версии до 0.8.0 возможно использовать следующие сценарии (они должны быть исполняемыми):
* <tt>/etc/net/scripts/ifup-pre-local</tt>
* <tt>/etc/net/scripts/ifup-pre-local</tt>
* <tt>/etc/net/scripts/ifup-post-local</tt>
* <tt>/etc/net/scripts/ifup-post-local</tt>
* <tt>/etc/net/scripts/ifdown-pre-local</tt>
* <tt>/etc/net/scripts/ifdown-pre-local</tt>
* <tt>/etc/net/scripts/ifdown-post-local</tt>
* <tt>/etc/net/scripts/ifdown-post-local</tt>
Они будут вызваны для *каждого* интерфейса. Начиная с версии 0.8.0 эти сценарии называются так:
 
Они будут вызваны для каждого интерфейса. Начиная с версии 0.8.0 эти сценарии называются так:
* <tt>/etc/net/ifup-pre</tt>
* <tt>/etc/net/ifup-pre</tt>
* <tt>/etc/net/ifup-post</tt>
* <tt>/etc/net/ifup-post</tt>
Строка 272: Строка 464:
<div id="iplink"></div>
<div id="iplink"></div>


==== Как управлять канальными параметрами интерфейсов ====
=== Управление канальными параметрами интерфейсов ===
Если вы поместите в конфигурационный каталог интерфейса файл iplink, в котором в каждой строке будут записаны команды режима link утилиты ip, то они будут выполнены при конфигурации интерфейса. Например, если вы желаете, чтобы интерфейс net1 имел MAC-адрес aa:bb:cc:dd:ee:ff и MTU 200 байт, то в файл <tt>/etc/net/ifaces/net1/iplink</tt> нужно поместить следующее:
 
Если поместить в конфигурационный каталог интерфейса файл <tt>iplink</tt>, в котором в каждой строке будут записаны команды режима link утилиты {{cmd|ip}}, то они будут выполнены при конфигурации интерфейса.  
 
Например, если необходимо, чтобы интерфейс net1 имел MAC-адрес aa:bb:cc:dd:ee:ff и MTU 200 байт, то в файл {{path|/etc/net/ifaces/net1/iplink}} нужно поместить следующее:
<pre>address aa:bb:cc:dd:ee:ff
<pre>address aa:bb:cc:dd:ee:ff
mtu 200</pre>
mtu 200</pre>
Обратите внимание, что в этом случае в <tt>/etc/net/iftab</tt> вам необходимо будет использовать селектор businfo или driver вместо mac.
 
Обратите внимание, что в этом случае в {{path|/etc/net/iftab}} вам необходимо будет использовать селектор <tt>businfo</tt> или <tt>driver</tt> вместо <tt>mac</tt>.


<div id="ethtool"></div>
<div id="ethtool"></div>


==== Как управлять физическими параметрами интерфейсов ====
==== Jumbo Frames ====
Если вы поместите в конфигурационный каталог интерфейса файл ethtool, в котором будет строка с параметрами программы ethtool, то она будет выполнена при конфигурации интерфейса. Например, если вы желаете, чтобы интерфейс net1 имел скорость 10Мбит и авто-согласование скорости было отключено, то в файл <tt>/etc/net/ifaces/net1/ethtool</tt> нужно поместить следующее:
'''MTU''' — максимальный размер полезного блока данных одного пакета, который передается без фрагментации. Стандартное значение MTU в Ethernet — 1500 байт.
<pre>speed 10 autoneg off
 
'''Jumbo Frame''' — кадр сети Ethernet, который превышает по размеру MTU и может передавать до 9000 байт данных.
 
{{Note|Jumbo Frame рекомендуется использовать только в Isolated-сетях, не имеющих доступа в интернет. Использование Jumbo Frame в Routed-сетях может привести к потере сетевого взаимодействия с внешней сетью. [https://cloud.ru/ru/docs/vdc/ug/topics/faq/network/network__mtu-and-jumbo-frame.html [i]]}}
 
Jumbo-кадры имеют размер, превышающий стандартный размер MTU: от 1518 до 16000 байт.
 
Как правило, они не превышают 9000 байт, поскольку в сетях Ethernet используется 32-битная CRC, которая теряет свою эффективность при объеме данных больше 12000 байт; к тому же 9000 байт вполне достаточно для передачи 8-килобайтной датаграммы (напр. NFS).
 
Есть 2 вида Jumbo:
*mini (baby) jumbo – это пакеты размером немного больше 1500. Активно используются для 802.1q, QinQ, MPLS.
*нормальные jumbo – размером около 9000 байт
 
Зачем же они нужны?
Jumbo Frames увеличивают эффективность передачи данных за счет снижения накладных расходов (эффективность равна полезной нагрузке кадра деленной на общий размер кадра). Их рекомендуют включать в сетях, где есть интенсивная пересылка больших объемов данных.
 
По умолчанию jumbo frames выключен. Как же их включить? Оказывается достаточно просто увеличить размер MTU до нужного значения.[https://skeletor.org.ua/?p=1580 [i]]
 
===== Как установить Jumbo Frame? =====
По аналогии с шагом [[#Управление канальными параметрами интерфейсов|Управление канальными параметрами интерфейсов]] правим файл {{path|/net/ifaces/eth0/iplink}} - где eth0 ваш сетевой интерфейс.
 
В данном файле указываем следующий параметр с необходимым значением:
<pre>mtu 1600</pre>
 
=== Управление физическими параметрами интерфейсов ===
Если поместить в конфигурационный каталог интерфейса файл <tt>ethtool</tt>, в котором будет строка с параметрами программы ethtool, то она будет выполнена при конфигурации интерфейса.  
 
Например, если есть необходимость, чтобы интерфейс net1 имел скорость 10Мбити авто-согласование скорости было отключено, то в файл {{path|/etc/net/ifaces/net1/ethtool}} нужно поместить следующую строку:
 
<pre>speed 10 autoneg off</pre>
 
<div id="bridge"></div>
 
=== Настройка Ethernet-моста ===
 
Для настройки Ethernet-моста (далее — моста) есть 2 пути:
# Linux bridge посредством iproute2
# Openvswitch
 
Linux bridge наиболее простая реализация. Если вам не нужно все, что умеет [http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=README;hb=HEAD openvswitch] , то можно использовать Linux bridge.
 
Обратите внимание: хостовые интерфейсы должны быть сконфигурированы на подъём без адреса:
 
TYPE=eth
ONBOOT=yes
DISABLED=no
BOOTPROTO=static
 
С пакетом etcnet поставляются примеры конфигурации. Один из них показывает, как из двух ethernet-интерфейсов port0 и port1 можно собрать мост bridge (каталог документации examples/Ethernet-bridge-GRE/).
 
Безотносительно к etcnet, следует иметь ввиду проблему, связанную с NAT: <s>[http://bugzilla.kernel.org/show_bug.cgi?id=13079 http://bugzilla.kernel.org/show_bug.cgi?id=13079]</s>
 
Имейте ввиду, что если вы подключаетесь по ssh к серверу через bridge-интерфейс (по его ip-адресу), то по умолчанию при опускании любого интерфейса-члена моста Etcnet так же опустит и сам мост (и ваше подключение пропадет). Чтобы избежать этого, установите в файле {{path|options}} того интерфейса, который нужно опускать, переменную <tt>IFDOWN_CHILDREN=no</tt>. Но учтите, что и включаться в бридж при старте тогда этот интерфейс по умолчанию не будет.
 
==== Linux bridge посредством iproute2 ====
 
Предположим, требуется настроить Ethernet-мост, пусть он будет называться <tt>br0</tt>.
Тогда для его настройки необходимо завести каталог {{path|/etc/net/ifaces/br0}} и создать там файлы со следующими данными:
 
* <tt>ipv4address</tt>:
<pre> 192.168.100.200/24 </pre>
 
* <tt>options</tt>:
<pre> TYPE=bri
HOST='eth0 tap0'
BOOTPROTO=static
BRIDGE_OPTIONS="stp_state 0" </pre>
 
Список доступных опций можно посмотреть командой <code>ip link help bridge</code>
 
IP-адрес для интерфейса, как обычно, будет взят из <tt>ipv4address</tt>.
 
В опции <tt>HOST</tt> файла <tt>options</tt> нужно указать те интерфейсы, которые будут входить в мост. Если в него будут входить интерфейсы, которые до этого имели IP-адрес (например, eth0), то этот адрес должен быть удалён (например, можно закомментировать содержимое файла {{path|ifaces/eth0/ipv4address}}).
 
При старте сети сначала поднимаются интерфейсы, входящие в мост, затем сам мост (автоматически). Для назначения адреса мосту можно также использовать DHCP (<tt>BOOTPROTO=dhcp</tt>).
Документацию по настройке моста с вопросами и ответами (перевод) можно найти на http://xgu.ru/wiki/Linux_Bridge, а его оригинал доступен на http://www.linuxfoundation.org/collaborate/workgroups/networking/bridge.
 
Для поддержки VLAN нужно сделать такие настойки в файле options:
<pre>
VLAN_AWARE=yes
VIDS="2 4-10 15"
</pre>
</pre>
В этом случае VIDS применятся для всех trunk интерфейсов, входящих в bridge.<br/>
Если же вам нужно настроить каждый из trunk интерфейсов индивидуально, то дополнительно введён конфигурационный файл bridge (в каталоге интерфейса bridge), в котором можно перечислить передаваемые утилите bridge команды.<br/>
Например, содержимое /etc/net/ifaces/br0/bridge для моста, в который входят интерфейсы eth0 и eth1:
<pre>
vlan add dev eth0 vid 100 master
vlan add dev eth0 vid 200 master
vlan add dev eth1 vid 200 master
vlan add dev eth1 vid 300 master
</pre>
Дискуссия на момент перехода: https://lists.altlinux.org/pipermail/devel/2018-October/205769.html
==== openvswitch ====
Как настраивать openvswitch, описано [[Etcnet/openvswitch|тут]].
<div id="vlan"></div>


<div id="bridge"></div>
=== Настройка VLAN ===
 
Для настройки 802.1q VLAN (например, id 4094 на eth1) следует, создав каталог {{path|ifaces/eth1.4094}}, поместить в него файлы со следующим содержимым:
 
* <tt>ipv4address</tt>:
<pre>192.168.100.200/24</pre>
 
* <tt>options</tt>:
<pre> TYPE=vlan
HOST=eth1
VID=4094
BOOTPROTO=static</pre>
 
Содержимое переменных <tt>HOST</tt> и <tt>VID</tt> будет передано утилите <tt>vconfig</tt>; использование файла <tt>vlantab</tt> необязательно (и не рекомендуется по причине невозможности использовать ifup для отдельного интерфейса). Пример конфигурации можно найти в каталоге examples/VLAN-without-vlantab/ документации etcnet.
 
Следует обратить внимание, что 4094 является верхней допустимой границей идентификатора валидного VLAN, а [http://www.candelatech.com/pipermail/vlan/2004-November/000128.html 4095 используется технически в процессе отбрасывания трафика по неверным VLAN]. (следует отметить, что это не ограничение Linux: [http://en.wikipedia.org/wiki/802.1Q в стандарте под VID отведено 12 бит])
 
Обратите внимание, что '''ISC DHCP сервер на интерфейсе VLAN''', скорее всего, у вас не будет работать, пока вы не добавите опцию VLAN_REORDER_HDR=on в настройки vlan интерфейса. Эта опция переведёт vlan интерфейс в режим работы, в котором пакеты на интерфейсе не будут содержать тэгов vlan и их сможет получить dhcpd.
 
 
'''Для настройки Q-in-Q интерфейса''', например, eth1.123.513 (дважды тегированный трафик: внешняя метка -- 123, внутренняя -- 513) следует файл <tt>options</tt> в каталоге {{path|ifaces/eth1.123.513}} заполнить следующим образом:
 
* <tt>options</tt>:
<pre> TYPE=vlan
HOST=eth1.123    # "родительский" интерфейс; может называться иначе
VID=513
VLAN_REORDER_HDR=0
BOOTPROTO=static</pre>
 
Родительский интерфейс должен быть сконфигурирован (можно с или без <tt>BOOTPROTO</tt>, с или без <tt>ipv4address</tt> и т.п.).
 
Таким образом, можно каскадировать интерфейсы "как угодно глубоко" (Q-in-Q-in-Q-in-Q....). Необходимо только учитывать, что длина имени интерфейса ограничена (16-ю символами).
 
<div id="bonding"></div>
 
=== Настройка bonding ===
Bonding - объединение нескольких физических сетевых интерфейсов в один логический, для достижения отказоустойчивости, увеличения скорости и балансировки нагрузки. Возможны несколько режимов работы со своими параметрами, подробнее см. [http://wiki.linuxfoundation.org/networking/bonding здесь].
 
Для создания агрегированного bond-интерфейса средствами etcnet создаем, как обычно, директорию для интерфейса (например, <tt>bond0</tt>) с <tt>options</tt>, <tt>ipv4address</tt> и прочими необходимыми файлами. В <tt>options</tt> указываем тип интерфейса (<tt>TYPE</tt>) <tt>bond</tt>, перечисляем в переменной <tt>HOST</tt> родительские интерфейсы, которые будут входить в наш агрегированный интерфейс, указываем в переменной <tt>BONDMODE</tt> режим (по умолчанию 0), а опции для модуля ядра <tt>bonding</tt> - в <tt>BONDOPTIONS</tt>.<br>
Так, для создания LACP-агрегированного канала (802.3ad) у нас получится такой <tt>options</tt>:
TYPE=bond
ONBOOT=yes
BOOTPROTO=static
HOST="eth0 eth1"
BONDMODE=4
BONDOPTIONS="miimon=100 lacp_rate=1"
Интерфейсы eth0 и eth1 должны тоже быть описаны в etcnet.
 
Как правило, для создания агрегированного интерфейса требуется, чтобы входящие в него физические интерфейсы имели одинаковые характеристики - скорость, дуплекс и т.п.
 
Не стоит указывать режим в переменной <tt>BONDOPTIONS</tt>: попытки изменить какие-то режимоспецифичные параметры до установки правильного режима могут быть отвергнуты. Поэтому первым делом нужно установить необходимый режим, указав его для этого в <tt>BONDMODE</tt>.
 
Информацию о получившемся агрегированном интерфейсе можно посмотреть в {{path|/proc/net/bonding/bond0}}
 
<div id="tun/tap"></div>
 
=== Настройка tun/tap интерфейса ===
 
Etcnet поддерживает простое создание интерфейсов типа tun/tap. Это виртуальный тип интерфейсов для передачи пакетов между ядром и программами, который не передает данных через физические устройства.
'''tun''' — это интерфейс типа point-to-point, работающий с кадрами IP.
'''tap''' — интерфейс типа ethernet, работающий с кадрами ethernet.
 
Потребуется использование утилиты tunctl, находящейся в одноименном пакете.
Пусть требуется создать и настроить tun/tap интерфейс, например, с именем tap0. Для этого необходимо:
* создать каталог интерфейса:
 
/etc/net/ifaces/tap0
 
* создать в каталоге интерфейса {{path|/etc/net/ifaces/tap0}} файл настройки <tt>options</tt> со следующим содержанием:
 
TYPE=tuntap
TUNTAP_USER=combr
 
 
<tt>TUNTAP_USER</tt> — это аккаунт или цифровой id пользователя, которому будут даны права на использование интерфейса tap0 (устройство /dev/net/tun).
Этот параметр будет передан утилите <tt>tunctl</tt> как аргумент опции <tt>-u</tt> (см. руководство на tunctl).
С версии ядра 2.6.18 произошли изменения в управлении этим типом интерфейсов, потребовавшие
обязательного применения <tt>tunctl</tt> для разрешения доступа обычных
пользователей к tap-интерфейсам. В предыдущих версиях любой
пользователь, имеющий доступ к <tt>/dev/net/tun</tt>, мог создать любое
количество сетевых интерфейсов с произвольными именами. Начиная с
2.6.18, для создания интерфейса через <tt>/dev/net/tun</tt> требуется
<tt>CAP_NET_ADMIN</tt> (обычно эту привилегию имеет только root), а обычный
пользователь, имеющий доступ к <tt>/dev/net/tun</tt>, может только использовать
уже созданные интерфейсы, к которым разрешён доступ для его uid.
 
=== Настройка интерфейса типа OpenVPN ===
 
Настройка OpenVPN может быть произведена большим количеством способов и вариантов с разными целями, и достойна отдельной статьи. Здесь, для начала, будет описан вариант openvpn-сервера в режиме bridging.
Для этого надо проделать подготовку:
* создать ключи [http://openvpn.net/index.php/open-source/documentation/howto.html#pki англ. HOWTO]
(до версии 2.3 утилиты easy-rsa шли в составе дистрибутива openvpn, потом отдельно).
* настроить [http://www.altlinux.org/Etcnet#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_Ethernet-.D0.BC.D0.BE.D1.81.D1.82.D0.B0 мост] (между внутренним физическим интерфейсом и интерфейсом tap, который будет использовать openvpn) "средствами системы".
 
Далее надо сделать так (скрипты etcnet по умолчанию ожидают это):
* создать каталог интерфейса:
 
/etc/net/ifaces/tap0
 
* создать в каталоге интерфейса {{path|/etc/net/ifaces/tap0}} файл настройки <tt>options</tt> со следующим содержанием:
 
TYPE=ovpn
(необязательно, но желательно указать '''REQUIRES'''=''<имя ethernet-интерфейса>'', с которым будет связан туннель)
 
* Конфигурационный файл для openvpn (из примера в пакете openvpn-docs - такой, как /usr/share/doc/openvpn-docs-2.2.2/sample-config-files/server.conf) надо переделать, удалив параметры, которые etcnet подставляет самостоятельно при запуске:
 
dev
ca
cert
key
persist-key
persist-tun
 
И обязательно добавив параметры, которых по умолчанию в конфиге-примере нет:
 
tls-server
script-security 2
 
Параметр script-security был введен начиная с версии  2.1_rc9. Поскольку etcnet запускает openvpn так, что в процессе тот запускает скрипт scripts/openvpn.action, который считается "пользовательским", то для этого значение должно быть 2.
 
* скопировать в каталог интерфейса ключи и измененный конфиг-файл openvpn.
Файлы надо переименовать (ключи - после easy-rsa) таким образом:
{| align="center" border="1"
|ключ easy-rsa
|ключ etcnet-ovpn
|-
|ca.crt
|ovpnca
|-
|server.crt
|ovpncrt
|-
|server.key
|ovpnkey
|-
|server.conf
|ovpnoptions
|}
 
 
 
После всего этого можно попробовать запустить интерфейс: ifup tun0 (или весь мост, например ifup br0). Но если, например, openvpn считает ошибочной какую-либо опцию, то он молча выйдет с кодом выхода 1, и скрипт ifup ничего не напишет (в логе так же не будет попытки запуска openvpn). Потребуется отладка (например, можно запустить openvpn вручную без параметра --daemon и со всеми параметрами, которые подставил etcnet).
 
<div id="wireguard"></div>
 
=== Настройка WireGuard VPN туннеля ===


==== Как настроить Ethernet-мост ====
WireGuard используется для быстрого создания VPN туннелей, является более легким и безопасным чем OpenVPN. Для использования wireguard необходимо '''ядро std-def версии 3.10+''', установленный модуль ядра '''kernel-modules-wireguard-std-def''' и пакет '''wireguard-tools'''. Для настройки интерфейса необходимо:
С пакетом etcnet поставляются примеры конфигурации. Один из них показывает, как из двух ethernet-интерфейсов port0 и port1 можно собрать мост bridge: [http://etcnet.org/examples/Ethernet-bridge-GRE/ http://etcnet.org/examples/Ethernet-bridge-GRE/]
* создать каталог интерфейса {{path|/etc/net/ifaces/wg0}}
* добавить файл с конфигурацией {{path|/etc/net/ifaces/wg0/options}}
<source lang='ini'>
TYPE=wg
LISTENPORT=51820
</source>
* добавить файл с поддерживающимися wireguard опциями пиров {{path|/etc/net/ifaces/wg0/peers}} (одна строка - один пир)
<source lang='bash'>
peer PUBLICPEERKEY allowed-ips IFACESSUBNET endpoint PUBLICIP:ALLOWPORT
</source>
* добавить файл содержащий локальные и удаленные ip адреса {{path|/etc/net/ifaces/wg0/ipv4address}}
первым делом указывается выделенная интерфейсу локальная подсеть, после чего указываются соответствия локального и удаленного ip адресов, каждое соответствие с новой строки
<source lang='bash'>
10.1.0.0/16
10.1.0.1 10.2.0.1
</source>
* добавить файл содержащий приватный ключ {{path|/etc/net/ifaces/wg0/privatekey}}
Ключи могут быть созданы стандартной утилитой wireguard:
<source lang='bash'>
$ umask 077
$ wg genkey > privatekey
$ wg pubkey < privatekey > publickey
</source>


<div id="iptun"></div>
<div id="iptun"></div>


==== Настройка и использование IP-туннелей ====
=== Настройка и использование IP-туннелей ===
IP-туннели — средство, позволяющее при умелом использовании улучшить IP-сети. Поддерживаются IP-туннели трёх видов: IPIP, GRE и SIT. Прежде всего необходимо определиться, какой вид туннеля вам необходим. Туннели IPIP — самые простые. Обратите внимание, что IPIP-туннели не могут передавать multicast-пакеты, соответственно, OSPF на таких интерфейсах работать не будет.


Туннели GRE (general incapsulation) обычно используются в маршрутизаторах Cisco. По туннелям этого типа могут передаваться broadcast и multicast пакеты, кроме того, эти туннели поддерживают контрольные суммы и контроль упорядоченности пакетов. Также GRE-туннели обладают опциональным атрибутом key в виде произвольного 4-байтового числа, который позволяет конфигурировать несколько GRE туннелей между одной парой IP-адресов несущей сети (в отличие от IPIP-туннелей, с которыми это невозможно).
IP-туннели — средство, позволяющее улучшить IP-сети. Поддерживаются IP-туннели трёх видов:
* IPIP
* GRE
* SIT
* VTI


Туннели SIT предназначены для транспортировки пакетов IPv6 через сети IPv4.
Прежде всего следует определить необходимый вид туннеля для решаемой задачи.  


Тип туннеля определяется опцией TUNTYPE (ipip, gre, sit). По умолчанию TUNTYPE=ipip. Кроме типа туннеля для конфигурации всегда требуется адрес удалённого хоста и почти всегда — локальный адрес. Эти адреса определяются опциями TUNREMOTE и TUNLOCAL соответственно. В некоторых случаях локальный адрес можно не указывать. В этом случае опция TUNLOCAL всё равно обязательна, но принимает значение any. Не забудьте назначить туннельному интерфейсу адреса и маршруты в соответствущих файлах.
* Туннели '''IPIP''' — самые простые.
 
* Туннели '''GRE''' (general incapsulation) обычно используются в маршрутизаторах Cisco. По туннелям этого типа могут передаваться broadcast и multicast пакеты. Кроме того, эти туннели поддерживают контрольные суммы и контроль упорядоченности пакетов. Также GRE-туннели обладают опциональным атрибутом key в виде произвольного 4-байтового числа, который позволяет конфигурировать несколько GRE туннелей между одной парой IP-адресов несущей сети (в отличие от IPIP-туннелей, с которыми это невозможно).
 
* Туннели '''SIT''' предназначены для транспортировки пакетов IPv6 через сети IPv4.
 
* Туннели '''VTI''' используются для построения IPsec туннелей. Работают используя один из демонов, strongswan или libreswan.
 
Тип туннеля определяется опцией <tt>TUNTYPE (ipip, gre, sit, vti)</tt>. По умолчанию <tt>TUNTYPE=ipip</tt>. Кроме типа туннеля для конфигурации всегда требуется адрес удалённого хоста и почти всегда — локальный адрес. Эти адреса определяются опциями <tt>TUNREMOTE</tt> и <tt>TUNLOCAL</tt> соответственно. В некоторых случаях локальный адрес можно не указывать. В этом случае опция <tt>TUNLOCAL</tt> всё равно обязательна, но принимает значение <tt>any</tt>. Не забудьте назначить туннельному интерфейсу адреса и маршруты в соответствующих файлах.
 
Пример: Конфигурация GRE-туннеля между 10.0.1.2 и 10.0.2.3 с двумя ключами для исходящих и входящих пакетов, проверкой очерёдности пакетов, TTL 8 и вычислением контрольных сумм. Туннель должен использовать только интерфейс gw1. Пусть имя создаваемого туннеля будет <tt>mytunnel</tt>.
 
Тогда необходимо сделать следующие операции:
* Создать каталог туннеля: {{path|/etc/net/ifaces/mytunnel}}
 
* Создать в каталоге туннеля файл настроек <tt>options</tt>: {{path|/etc/net/ifaces/mytunnel/options}}
 
* Отредактировать файл настроек <tt>options</tt>:


Пример: для конфигурации GRE-туннеля между 10.0.1.2 и 10.0.2.3 с двумя ключами для исходящих и входящих пакетов, проверкой очерёдности пакетов, TTL 8 и вычислением контрольных сумм. Туннель должен использовать только интерфейс gw1. Файл <tt>/etc/net/ifaces/mytunnel/options</tt> будет следующим:
<source lang="ini">
<source lang="ini">
TYPE=iptun
TYPE=iptun
Строка 309: Строка 787:
TUNTTL=8
TUNTTL=8
HOST=gw1
HOST=gw1
TUNOPTIONS='seq ikey 2020 okey 2030 csum'
TUNOPTIONS='ttl 64 seq ikey 2020 okey 2030 csum'
</source>
</source>


<div id="vpn"></div>
<div id="vpn"></div>


==== Что следует помнить при настройке VPN (и туннелей) ====
Про <tt>ttl 64</tt>. Если параметр ttl не задан, значение берётся из инкапсулируемого пакета (это надо проверить). В некоторых случаях ttl может получиться слишком мал (например, Quagga формирует OSPF-пакеты с TTL 1).
Довольно часто при настройке VPN-подключения (под которыми тут я буду подразумевать все туннельные подключения, то есть подключения поверх IP) забывают, что при использовании опции pppd '<tt>defaultroute</tt>' маршрут по-умолчанию после подключения будет изменен. При этом, если VPN-сервер находится в другой, нежели клиент, сети, то после подключения (и изменения маршрута по-умолчанию) VPN-сервер становится недоступным, следовательно, недоступными становятся все внешние адреса, и подключение, как правило, рвется по тайм-ауту.
 
Стоит помнить, что имена <tt>tunl0, gre0 и sit0</tt> являются зарезервированными в iproute2 ("base devices") и имеют особое поведение: http://www.liveinternet.ru/users/stasikos/post71435454/
 
Процедура создания vti интерфейса стандартна, однако, предварительно необходимо установить и настроить один из демонов (strongswan, libreswan), о том, как это сделать можно найти в соответствующей документации. После чего необходимо создать каталог интерфейса (к примеру он будет называться vti0) {{path|/etc/net/ifaces/vti0}}, и добавить в него файл настроек туннеля {{path|/etc/net/ifaces/vti0/options}}, куда нужно прописать необходимую конфигурацию:
<source lang='ini'>
TYPE=iptun
TUNTYPE=vti
TUNLOCAL=119.81.184.173
TUNREMOTE=119.81.177.236
TUNOPTIONS='key 42'
</source>
Параметр key должен соответствовать параметру mark, указанному при настройке strongswan/libreswan.
 
=== Настройка IPv6 ===
==== Включение IPv6 ====
 
* Во-первых, следует убедиться, что не применяется какой-либо вариант совета из пункта "Отключение IPv6" ниже.
* Во-вторых, следует проверить значение <tt>CONFIG_IPV6</tt> в etcnet. Переменная может быть описана в {{path|/etc/net/options.d/*}}, {{path|/etc/net/ifaces/default/*}}, {{path|/etc/net/ifaces/*/options}}. Наибольший приоритет — у описания в {{path|/etc/net/ifaces/*/options}}.
 
'''Замечание:''' В версии <tt>etcnet-0.9.26-alt1</tt>, в {{path|/etc/net/ifaces/default/options}} содержится <tt>CONFIG_IPV6=no</tt>.
 
==== Отключение IPv6 ====
 
* '''Вариант 1'''
Чтобы отключить IPv6 на всех сетевых интерфейсах в работающей системе с загруженным модулем ipv6, нужно изменить значение параметра ядра net.ipv6.conf.all.disable_ipv6, где 'all' подразумевает все интерфейсы, а net.ipv6.conf.eth0.disable_ipv6 -- отключение протокола IPv6 только на интерфейсе eth0 и т.д.
<pre>
sysctl net.ipv6.conf.all.disable_ipv6=1
</pre>
Также можно добавить данную директиву в {{path|/etc/sysctl.conf}}:
<source lang="bash">
echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
sysctl -f
</source>
 
* '''Вариант 2'''
Добавить параметр в командную строку загрузки ядра. Для GRUB2 нужно изменить параметры загрузки ядра в файле {{path|/etc/sysconfig/grub2}}, изменив переменную GRUB_CMDLINE_LINUX_DEFAULT или GRUB_CMDLINE_LINUX
<pre>
...
GRUB_CMDLINE_LINUX='failsafe vga=normal ipv6.disable=1'
...
</pre>
и обновив конфигурационный файл grub
<source lang="bash">
grub-mkconfig -o /boot/grub/grub.cfg
</source>
 
* '''Вариант 3'''
<source lang="bash">
echo 'options ipv6 disable=1' >> /etc/modprobe.d/options-local.conf
</source>
Вступит в силу только после перезагрузки.
 
==== Установка preferred lifetime 0 для статически назначенного адреса ====
В ряде случаев может быть полезно принудительно выставить для добавляемого IPv6-адреса (в соотв. ему префиксе) preferred lifetime в 0 секунд. Тогда адрес при наличии других preferred-адресов не будет использоваться протоколами высших уровней для исходящих соединений, но на него можно, например, явно забиндить слушающий сокет.
В файле <tt>ipv6address</tt> можно указать дополнительные аргументы для <tt>ip -6 a {add,delete,change}</tt> Например: <pre>
2001:db8:201:1::1/64 preferred_lft 0</pre>
 
==== Туннели 6-to-4 ====
 
Требуется:
* ядро с поддержкой IPv6 (CONFIG_IPV6 в /boot/config-*; наличие модуля ipv6);
* ядро с поддержкой tun (CONFIG_TUN в /boot/config-*; наличие модуля tun);
* доступность узла 192.88.99.1 - через него маршрутизируется трафик в сети IPv6.
 
Далее в {{path|/etc/net/ifaces}} создаётся каталог с названием, например,
tun6to4. В нём создаются файлы:
iplink : <pre>
mtu 1472 </pre>
 
ipv6address : <pre>
# first six octets: ipv6calc --ipv4_to_6to4addr $TUNLOCAL
2002:c000:201::1/16 </pre>
 
ipv6route : <pre>
2000::/3 via ::192.88.99.1 dev tun6to4 metric 1 </pre>
 
options : <pre>
TYPE=iptun
TUNTYPE=sit
TUNLOCAL=192.0.2.1
TUNREMOTE=any
TUNOPTIONS="ttl 64"
DONT_FLUSH=yes
CONFIG_IPV6=yes </pre>
 
Адрес TUNLOCAL в options - имеющийся внешний IPv4, в ipv6address
адрес IPv6 выбирается исходя из него же.
 
В настройках iptables должно быть разрешение на приём пакетов протокола
ipv6 на внешний адрес IPv4.
 
Далее поднимается интерфейс tun6to4, ну и проверяется доступность
чего-либо в IPv6.


Выходом, как обычно (и рекомендовано) служит указание ''отдельного'' маршрута на VPN-сервер (или его сеть). Для этого необходимо прописать (в примере для маршрута через eth0) в <tt>/etc/net/ifaces/eth0/ipv4route</tt> строку вида
Туннели 6to4 - это RFC 3964.
<pre>10.0.1.0/24 via 10.0.0.1</pre>
Miredo - это реализация протокола Teredo, RFC 4380.
Тут подразумевается, что VPN-сервер находится в сети 10.0.1.0/24 (например, имеет адрес 10.0.1.1), клиент — в сети 10.0.0.0/24 (например, 10.0.0.10), а маршрутизатор имеет адрес 10.0.0.1.
6to4 требует наличия внешнего адреса IPv4.
Teredo не требует наличия внешнего адреса, и может работать через NAT.
Через Teredo не получится получить симметричное соединение, т.е. доступ
в IPv6 будет односторонний, на компьютер в общем случае извне
подключиться не получится.
И Teredo позволяет получить только адрес /32, т.е. для подключения сетей
он мало пригоден.


Теперь, при использовании опции '<tt>defaulroute</tt>' для pppd (которая указывает, что нужно изменить на вновь созданное подключение маршрут по-умолчанию), даже после замены маршрута по-умолчанию новым сеть 10.0.1.0, в которой в нашем примере и находится VPN-сервер, остается доступной.
''этот раздел скопирован из письма рассылки community (c) Nikolay A. Fetisov 8 сентября 2011 12:03:30''


Как более точечный вариант (применяется в alterator-net-pptp 0.5.x) можно использовать скрипты <tt>ifup-pre</tt> и <tt>ifdown-post</tt> в каталоге конфигурируемого PPP-интерфейса; пример:
=== Замечания о настройке VPN-подключения и туннелей ===
 
Часто при настройке VPN-подключения (под которыми здесь будут подразумеваться все туннельные подключения, то есть подключения поверх IP) не учитывают, что использование опции pppd '<tt>defaultroute</tt>' маршрут по-умолчанию после подключения будет изменен. При этом, если VPN-сервер находится в другой, отличной от клиента, сети, то после подключения (и изменения маршрута по-умолчанию) VPN-сервер становится недоступным, следовательно, недоступными становятся все внешние адреса, и подключение, как правило, прекращается по тайм-ауту.
 
Решением, как обычно (и рекомендовано), служит указание ''отдельного'' маршрута на VPN-сервер (или его сеть). Для этого необходимо прописать (в примере - для маршрута через eth0) в {{path|/etc/net/ifaces/eth0/ipv4route}} строку вида:
 
10.0.1.0/24 via 10.0.0.1
 
В данном примере подразумевается, что VPN-сервер находится в сети 10.0.1.0/24 (например, имеет адрес 10.0.1.1), клиент — в сети 10.0.0.0/24 (и имеет адрес, например, 10.0.0.10), а маршрутизатор имеет адрес 10.0.0.1.
 
Теперь, при использовании опции '<tt>defaulroute</tt>' для pppd (которая указывает, что необходимо изменить на вновь созданное подключение маршрут по-умолчанию), даже после замены маршрута по-умолчанию новым, сеть 10.0.1.0, в которой в нашем примере и находится VPN-сервер, останется доступной.
 
Как более точечный вариант (применяется в alterator-net-pptp 0.5.x) можно использовать скрипты {{cmd|ifup-pre}} и {{cmd|ifdown-post}} в каталоге конфигурируемого PPP-интерфейса.
 
Наример:
<source lang="bash">
<source lang="bash">
#!/bin/sh
#!/bin/sh
# sample /etc/net/ifaces/ppp0/ifup-pre; replace variables yourself
# sample /etc/net/ifaces/ppp0/ifup-pre; replace variables yourself
ip route add $VPN_SERVER via $DEF_GW
ip route add VPN_SERVER via DEF_GW
</source>
</source>
<source lang="bash">
<source lang="bash">
#!/bin/sh
#!/bin/sh
# sample /etc/net/ifaces/ppp0/ifdown-post; replace variables yourself
# sample /etc/net/ifaces/ppp0/ifdown-post; replace variables yourself
ip route del $VPN_SERVER via $DEF_GW
ip route del VPN_SERVER via DEF_GW
</source>
</source>
Не забудьте подставить нужные IP-адреса (не сеть, где VPN-сервер, а его /32) и сделать <tt>chmod +x ifup-pre ifdown-post</tt>


<div id="ipsectun"></div>
Не забудьте подставить нужные IP-адреса вместо VPN_SERVER и DEF_GW (не сеть, где VPN-сервер, а ее /32 префикс CIDR) и выполнить команду: {{cmd|chmod +x ifup-pre ifdown-post}}


==== Настройка и использование IPSec-туннелей ====
<div id="iprule"></div>
В ALTLinux поддерживаются статические IPSec-туннели, которые реализутся модулем ядра ipsec_tunnel, который в свою очередь использует CryptoAPI ядер серии 2.4. Для этих интерфейсов кроме TUNLOCAL и TUNREMOTE обязательно требуется ещё такой параметр как TUNSPI. Это уникальный номер туннеля, он должен быть более 0x2000 и одинаковым на обоих хостах. Эти туннели требуют, чтобы для них были определены параметры либо шифрования, либо подписи, либо того и другого вместе. Опции CIPHER и DIGEST определяют соответственно алгоритмы и режимы шифрования и подписи, а опции CIPHERFILE и DIGESTFILE — имена файлов в конфигурационном каталоге интерфейса, которые содержат ключи шифрования и подписи. Для форсирования интерфейса, через который будут посылаться туннелированные пакеты, можно использовать опцию HOST.


<div id="iprule"></div>
=== Сложная маршрутизация (или несколько таблиц маршрутизации) ===
 
Под «сложной маршрутизацией» подразумевается наличие нескольких таблиц маршрутизации. Для их использования необходимо сконфигурировать правила ядра. В правилах по умолчанию можно увидеть следующее:


==== Сложная маршрутизация ====
<pre># ip rule show
Под сложной маршрутизацией понимается наличие нескольких таблиц маршрутизации. Для их использования нужно будет сконфигурировать правила ядра. Если мы посмотрим на правила по умолчанию, то мы увидим следующее:
<pre>$ /sbin/ip ru
0:      from all lookup local  
0:      from all lookup local  
32766:  from all lookup main  
32766:  from all lookup main  
32767:  from all lookup default</pre>
32767:  from all lookup default</pre>
Сами таблицы определены в файле <tt>/etc/iproute2/rt_tables</tt>. Для создания конфигурации «сложной маршрутизации» необходимо вначале «создать» нужные таблицы в этом файле (если вы хотите использовать имена таблиц, а не числа).


Следующий шаг — заполнение таблиц. В конфигурационном каталоге интерфейса в файле ipv4route добавьте маршрутные записи, не забыв указать <tt>table XX</tt>. Учтите, что если вы не начинаете строку с режима ip route (add, del, replace, append, change), то по умолчанию будет использован режим DEFAULT_IPV4ROUTE_CMD (append).
Для настройки «сложной маршрутизациии» необходимо выполнить следующие операции:


Второй шаг — определение правил в файле ipv4rule. Опять же, не обошлось без некоторой автоматики. Если строка не начинается с операции del или add, то нужный режим будет подставлен автоматически. Это подходит для тех случаев, когда вам при поднятии интерфейса необходимо добавить правила, а при опускании — удалить. Возможность указывать del или add реализована для обратных случаев: если при поднятии интерфейса вам необходимо удалить правила, а при опускании — добавить. В этом случае add и del будут в нужный момент автоматически заменены на del и add.
Шаг 1 : Сами таблицы определены в файле {{path|/etc/iproute2/rt_tables}}. Для создания конфигурации «сложной маршрутизации» необходимо вначале «создать» нужные таблицы в этом файле (если вы хотите использовать имена таблиц, а не числа).


Пример такой конфигурации входит в [http://etcnet.org/ /etc/net] 0.7.12: [http://etcnet.org/examples/routing-LARTC-1/ http://etcnet.org/examples/routing-LARTC-1/]
Шаг 2 : Необходимо заполнить таблицы. В конфигурационном каталоге интерфейса в файле <tt>ipv4route</tt> необходимо добавить маршрутные записи, не забывая указать <tt>table XX</tt>. Важно учитывать, что если строка начинается с режима ip route (add, del, replace, append, change), то по умолчанию будет использован режим <tt>DEFAULT_IPV4ROUTE_CMD</tt> (<tt>append</tt>).


<div id="wireless"></div>
Шаг 3 : Определить правила в файле <tt>ipv4rule</tt>. Здесь есть особенности, связанные автоматической заменой/добавлением параметров. Если строка не начинается с операции del или add, то нужный режим будет подставлен автоматически. Это подходит для тех случаев, когда вам при "поднятии" интерфейса необходимо добавить правила, а при "опускании" — удалить. Возможность указывать del или add реализована для обратных случаев: если при "поднятии" интерфейса вам необходимо удалить правила, а при "опускании" — добавить. В этом случае add и del будут в нужный момент автоматически заменены на del и add.
 
Пример такой конфигурации входит в /etc/net 0.7.12: (каталог документации examples/routing-LARTC-1/)
 
=== Простое переключение маршрутов ===


==== Простое переключение маршрутов ====
Пусть имеется eth-интерфейс, который используется постоянно, и настроен маршрут по умолчанию.
В ситуации, когда вы постоянно пользуетесь eth-интерфейсом и у вас настроен маршрут по умолчанию,
Часто бывает необходимость настроить второй маршрут по умолчанию через беспроводной интерфейс,
бывает удобно настроить второй маршрут по умолчанию через беспроводной интерфейс,
но с меньшей метрикой, чем у проводного интерфейса.
но с метрикой, меньшей чем у проводного интерфейса.
В этом случае при поднятии WI-FI маршрут по умолчанию «развернется» в нужную сторону.
В этом случае, при поднятии WI-FI маршрут по умолчанию «развернется» в нужную сторону.


Например:
Например:


<tt>/etc/net/ifaces/eth0/ipv4route</tt>
Для eth-интерфейса файл настроек {{path|/etc/net/ifaces/eth0/ipv4route}} будет таким:
<pre>default via 192.168.3.254 metric 10</pre>
<pre>default via 192.168.3.254 metric 10</pre>
и
а для WI-FI-интерфейса файл настроек {{path|/etc/net/ifaces/ath0/ipv4route}} таким:
<tt>/etc/net/ifaces/ath0/ipv4route</tt>
<pre>default via 192.168.123.1 metric 5</pre>
<pre>default via 192.168.123.1 metric 5</pre>


==== О беспроводном Ethernet ====
<div id="wireless"></div>
Большинство беспроводных интерфейсов сейчас представлено системе как интерфейсы Ethernet. Соответственно ваш беспроводный интерфейс будет иметь [https://bugzilla.altlinux.org/show_bug.cgi?id=6283 TYPE=eth]. Чтобы он нормально работал, нужно кроме загрузки модуля с параметрами воспользоваться утилитами iwconfig из пакета wireless-tools или wpa_supplicant из такого же пакета. Вместо того, чтобы запускать их вручную, можно просто поместить в конфигурационный каталог интерфейса файл iwconfig с командами iwconfig или файл wpa_supplicant.conf с конфигурацией wpa_supplicant. Они будут использованы автоматически.
=== Беспроводный Ethernet (или настройка WI-FI) ===
Большинство беспроводных интерфейсов сейчас представлено системе как интерфейсы Ethernet. Соответственно беспроводный интерфейс будет иметь <b>TYPE=eth</b> (<s>[https://bugzilla.altlinux.org/show_bug.cgi?id=6283 #6283]</s>). Чтобы интерфейс нормально функционировал, необходимо кроме загрузки модуля с параметрами, воспользоваться утилитами {{cmd|iwconfig}} из пакета wireless-tools или {{cmd|wpa_supplicant}} из такого же пакета. Вместо того, чтобы запускать их вручную, можно поместить в конфигурационный каталог интерфейса файл <tt>iwconfig</tt> с командами iwconfig или файл <tt>wpa_supplicant.conf</tt> с конфигурацией wpa_supplicant. Они будут использованы автоматически.


Пример [http://hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wireless.html конфигурации] (совместно с <tt>[http://ndiswrapper.sourceforge.net/ ndiswrapper]</tt>):
Пример [http://hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wireless.html конфигурации] (совместно с <tt>[http://ndiswrapper.sourceforge.net/ ndiswrapper]</tt>):
<tt>/etc/net/ifaces/wlan0/options</tt>
 
Файл: {{path|/etc/net/ifaces/wlan0/options}}
<pre>TYPE=eth
<pre>TYPE=eth
MODULE=ndiswrapper
MODULE=ndiswrapper
Строка 384: Строка 975:
USE_HOTPLUG=no
USE_HOTPLUG=no
ONBOOT=no</pre>
ONBOOT=no</pre>
<tt>/etc/net/ifaces/wlan0/iwconfig</tt>
 
Файл: {{path|/etc/net/ifaces/wlan0/iwconfig}}
<pre>essid default
<pre>essid default
#key bababababa</pre>
#key bababababa</pre>




Еще один пример (от thresh@) использования etcnet для настройки беспроводной сети (в данный момент это не WPA2, но работало и на нем):
Еще один пример использования etcnet для настройки беспроводной сети:
<tt>/etc/net/ifaces/eth0/options</tt>
 
Файл: {{path|/etc/net/ifaces/wlan0/options}}
<pre>TYPE=eth
<pre>TYPE=eth
USE_HOTPLUG=NO
USE_HOTPLUG=NO
Строка 397: Строка 990:
WPA_DRIVER=wext</pre>
WPA_DRIVER=wext</pre>


<tt>/etc/net/ifaces/eth0/iwconfig</tt>
Файл: {{path|/etc/net/ifaces/wlan0/iwconfig}}
<pre>essid homenet
<pre>essid homenet
mode 1
mode 1
Строка 404: Строка 997:
rate 11M</pre>
rate 11M</pre>


<tt>/etc/net/ifaces/eth0/wpa_supplicant.conf</tt>
Файл: {{path|/etc/net/ifaces/wlan0/wpa_supplicant.conf}}
<pre>ctrl_interface=/var/run/wpa_supplicant
<pre>ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ctrl_interface_group=0
Строка 413: Строка 1006:
network={
network={
         ssid="homenet"
         ssid="homenet"
         bssid=00:11:D8:22:AD:0D
        scan_ssid=1
         proto=WPA
        key_mgmt=WPA-PSK
        psk="this is my mega secret password string to wpa supplicant"
}</pre>
 
Если вы хотите воспользоваться WPS:
# создайте {{path|/etc/net/ifaces/wlan0/wpa_supplicant.conf}} следующего вида:
<pre>
ctrl_interface=/var/run/wpa_supplicant
update_config=1
</pre>
# поднимите беспроводной интерфейс (ifup wlan0)
# запустите wpa_cli и дайте команды wps_pbc (после этого нужно соответственно нажать кнопку WPS на точке доступа и подождать окончания обмена данными) и save_config (для записи конфигурации в <tt>wpa_supplicant.conf</tt>). Или же можно воспользоваться утилитой wpa_gui, отображающей процесс более наглядно.
 
Пример файла {{path|/etc/net/ifaces/wlan0/wpa_supplicant.conf}} при подключении к сети, использующей  протокол WPA2-PSK(AES)
<pre>
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1
 
network={
        ssid="home-lg"
         bssid=00:1B:11:87:C7:EA
         proto=RSN
         key_mgmt=WPA-PSK
         key_mgmt=WPA-PSK
         pairwise=CCMP TKIP
         pairwise=CCMP TKIP
         group=TKIP
         group=CCMP TKIP
         psk="this is my mega secret password string to wpa supplicant"
         psk="this is my mega secret password string to wpa supplicant"
         priority=2
         priority=2
}</pre>
}
</pre>
 
<div id="infiniband"></div>
 
=== Настройка Infiniband ===
На сейчас ничем не отличается от настройки Ethernet, специфическая поддержка отсутствует (и для [[Infiniband#IP_over_IB|IP-over-IB]] не требуется).  Пример конфигурации для Mellanox:


Файл: <tt>/etc/modules</tt>
<pre>mlx4_ib
ib_umad
ib_ipoib</pre>
Файл: <tt>/etc/net/ifaces/ib0/options</tt>
<pre>TYPE=eth
BOOTPROTO=dhcp
ONBOOT=yes</pre>


<div id="sysctl"></div>
<div id="sysctl"></div>


==== Как использовать автодополнение в sysctl.conf ====
=== Использование автодополнения в sysctl.conf ===
В конфигурационном каталоге интерфейса может находиться файл sysctl.conf, в котором можно перечислить переменные sysctl (8). Но переменные могут быть как общесистемными, так и относящимися к интерфейсу — описание переменных можно почитать в [http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html]. Естественно, писать в sysctl.conf что-то вроде <tt>net.ipv4.conf.eth0.log_martians = 1</tt> неудобно. К тому же при переименовании интерфейса вы можете забыть отредактировать файл sysctl.conf.


Решается это следующим способом: просто запишите в файл имя переменной и значение, а [http://etcnet.org/ /etc/net] сама решит, как к этой переменной добраться, и вызовет sysctl с полным именем. Например:
В конфигурационном каталоге интерфейса может находиться файл <tt>sysctl.conf</tt>, в котором можно перечислить переменные <tt>sysctl(8)</tt>. Но переменные могут быть как общесистемными, так и относящимися к интерфейсу. Естественно, запись в sysctl.conf настроек вида <tt>net.ipv4.conf.eth0.log_martians = 1</tt> достаточно неудобна, а при переименовании интерфейса велик риск не отредактировать файл <tt>sysctl.conf</tt> соответствующим образом.
 
Эта проблема решается следующим способом : производится запись в файл только имени переменной и значение, а система /etc/net сама найдет путь к этой переменной и вызовет <tt>sysctl</tt> с полным именем.  
 
Пример содержания файла <tt>sysctl.conf</tt>:
<pre>log_martians=1
<pre>log_martians=1
rp_filter=1</pre>
rp_filter=1</pre>
Строка 434: Строка 1069:
<div id="profiles"></div>
<div id="profiles"></div>


==== Профили конфигурации ====
=== Подключение к Wi-Fi с сертификатом на аппаратном токене ===
Для беспроводного подключения в корпоративных сетях могут использоваться сертификаты, записанные на аппаратном токене, например, Aladdin eToken. Для настройки такого подключения необходимо использовать {{path|/etc/net/ifaces/wlan0/wpa_supplicant.conf}}.
<pre>
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
#eapol_version=1
#ap_scan=2
#fast_reauth=1
pkcs11_engine_path=/usr/lib/openssl/engines/engine_pkcs11.so
pkcs11_module_path=/usr/lib/libeTPkcs11.so
update_config=0


===== Определение профилей =====
network={
Профиль — именованный вариант конфигурации, в той или иной степени изменяющий базовую конфигурацию системы. Профили могут быть применены, например, для конфигурации ноутбука в разных сетевых окружениях, или при подготовке новой или тестовой конфигурации с возможностью быстрого возврата к старой. Практически профили реализуются следующим образом: для какого-либо из файлов, составляющих общесистемную конфигурацию или конфигурацию интерфейса, создаётся альтернативный вариант, который отличается добавлением в конце названия файла знака # и имени профиля.
        ssid="test"
        key_mgmt=WPA-EAP
        pairwise=CCMP TKIP
        group=CCMP TKIP
        eap=TLS
        identity="email@address.ru"
        engine_id="pkcs11"
        key_id="xxxxxxxxx"
        cert_id="xxxxxxxxx"
        engine=1
}
</pre>
где key_id и cerd_id взяты из вывода команды
<pre>
# pkcs11-tool --module /usr/lib/libeTPkcs11.so -O -l
</pre>


Например, единственное отличие между профилями заключается в том, какой модуль ядра будет загружен для интерфейса eth0. В этом случае файл <tt>/etc/net/ifaces/eth0/options</tt> необходимо скопировать в <tt>/etc/net/ifaces/eth0/options#profile1</tt> и изменить значение переменной MODULE в одном из них. Далее при использовании конфигурации по умолчанию будет использован файл options, а при использовании профиля profile1 — файл options#profile1. Если при этом для назначения интерфейсу имени используется файл <tt>/etc/net/iftab</tt>, то скорее всего необходимо будет создать соответствующий файл <tt>/etc/net/iftab#profile1</tt>, так как другой модуль ядра указывает на другой физический интерфейс и исходный файл iftab работать не будет.
Используются оригинальные ("родные") драйвера Aladdin - pkiclient-5.00.28-0, и пакет openssl-engine_pkcs11-0.1.5-alt1.


Профили могут использоваться также и для отключения каких-то параметров конфигурации. Например, если используется файл ipv4route для установки маршрутов для интерфейса, то можно создать файл нулевого размера ipv4route#profile2, чтобы при использовании профиля profile2 никаких маршрутов не конфигурировалось.
=== Профили конфигурации ===


===== Выбор профиля при загрузке =====
==== Определение профилей ====
Профиль — именованный вариант конфигурации, в той или иной степени изменяющий базовую конфигурацию системы. Профили могут быть применены, например, для конфигурации ноутбука в разных сетевых окружениях, или при подготовке новой или тестовой конфигурации с возможностью быстрого возврата к старой. Практически профили реализуются следующим образом: для какого-либо из файлов, составляющих общесистемную конфигурацию или конфигурацию интерфейса, создаётся альтернативный вариант, который отличается добавлением в конце названия файла знака # и имени профиля.
 
Например, пусть единственное отличие между профилями заключается в том, какой модуль ядра будет загружен для интерфейса eth0. В этом случае файл {{path|/etc/net/ifaces/eth0/options}} необходимо скопировать в {{path|/etc/net/ifaces/eth0/options#profile1}} и изменить значение переменной <tt>MODULE</tt> в одном из них. Далее при использовании конфигурации по умолчанию будет использован файл <tt>options</tt>, а при использовании профиля profile1 — файл <tt>options#profile1</tt>. Если при этом для назначения интерфейсу имени используется файл {{path|/etc/net/iftab}}, то скорее всего необходимо будет создать соответствующий файл {{path|/etc/net/iftab#profile1}}, так как другой модуль ядра указывает на другой физический интерфейс и исходный файл <tt>iftab</tt> работать не будет.
 
Профили могут использоваться также и для отключения каких-то параметров конфигурации. Например, если используется файл <tt>ipv4route</tt> для установки маршрутов для интерфейса, то можно создать файл нулевого размера <tt>ipv4route#profile2</tt>, чтобы при использовании профиля profile2 никаких маршрутов не конфигурировалось.
 
==== Выбор профиля при загрузке ====
Если при загрузке системы ядру был передан параметр netprofile, то его значение будет использовано как имя профиля по умолчанию. Это может быть использовано для создания собственных пунктов меню загрузчиков LILO и GRUB с заранее определённым профилем сетевой конфигурации. Заданный таким образом профиль может быть далее переопределён другими методами. Следует понимать разницу между различными конфигурациями и различными результатами применения одной конфигурации. Например, если в двух разных сетях используется DHCP, то смысла в разных профилях конфигурации нет.
Если при загрузке системы ядру был передан параметр netprofile, то его значение будет использовано как имя профиля по умолчанию. Это может быть использовано для создания собственных пунктов меню загрузчиков LILO и GRUB с заранее определённым профилем сетевой конфигурации. Заданный таким образом профиль может быть далее переопределён другими методами. Следует понимать разницу между различными конфигурациями и различными результатами применения одной конфигурации. Например, если в двух разных сетях используется DHCP, то смысла в разных профилях конфигурации нет.


Строка 457: Строка 1124:
Для приведённого примера необходимо будет создать варианты для файлов, отличающихся в профилях home и office, и можно будет выбирать при загрузке, какой из профилей необходимо использовать. Использование этого метода удобно, если смена сетевого окружения происходит синхронно с загрузкой системы.
Для приведённого примера необходимо будет создать варианты для файлов, отличающихся в профилях home и office, и можно будет выбирать при загрузке, какой из профилей необходимо использовать. Использование этого метода удобно, если смена сетевого окружения происходит синхронно с загрузкой системы.


===== Выбор профиля по умолчанию =====
==== Выбор профиля по умолчанию ====
Если вы хотите, чтобы какой-то профиль конфигурации использовался по умолчанию, запишите его название в файл <tt>/etc/net/profile</tt>. Этот метод имеет приоритет над параметром ядра netprofile. Использование такого способа выбора профиля целесообразно, когда переключение между конфигурациями происходит реже, чем перезагрузка системы.
Если требуется, чтобы определенный профиль конфигурации использовался по умолчанию, то необходимо записать его название в файл <tt>/etc/net/profile</tt>. Этот метод имеет приоритет над параметром ядра netprofile. Использование такого способа выбора профиля целесообразно, когда переключение между конфигурациями происходит реже, чем перезагрузка системы.


===== Смена профиля во время работы =====
==== Смена профиля во время работы ====
Если вы хотите переконфигурировать сеть без перезагрузки или редактирования файла <tt>/etc/net/profile</tt>, то используйте параметры сервиса network, описанные в разделе ##FTN restartreload##. Этот метод имеет приоритет над профилем по умолчанию и профилем, выбранным при загрузке. Целесообразно его использовать, если смена сетевого окружения происходит чаще, чем перезагрузка системы.
Если требуется переконфигурировать сеть без перезагрузки или редактирования файла {{path|/etc/net/profile}}, то следует использовать параметры сервиса network, описанные в разделе [[#restart, reload и другие команды|restart, reload и другие команды]]. Этот метод имеет приоритет над профилем по умолчанию и профилем, выбранным при загрузке. Целесообразно его использовать, если смена сетевого окружения происходит чаще, чем перезагрузка системы.


===== Определение профиля во время конфигурации интерфейса =====
==== Определение профиля во время конфигурации интерфейса ====
Если в каталоге конфигурации интерфейса существует исполняемый файл ненулевого размера с именем selectprofile, то этот файл будет выполнен и первое слово первой строки его стандартного вывода использовано как имя профиля, которое должно быть использовано для конфигурации данного интерфейса. Этот метод имеет приоритет над всеми остальными методами. Исходной задачей, требующей такого решения, являлось конфигурирование беспроводного интерфейса в зависимости от доступных точек доступа.
Если в каталоге конфигурации интерфейса существует исполняемый файл ненулевого размера с именем <tt>selectprofile</tt>, то этот файл будет выполнен и первое слово первой строки его стандартного вывода использовано как имя профиля, которое должно быть использовано для конфигурации данного интерфейса. Этот метод имеет приоритет над всеми остальными методами. Исходной задачей, требующей такого решения, являлось конфигурирование беспроводного интерфейса в зависимости от доступных точек доступа.


Следует учитывать, что число вызовов файла selectprofile может меняться в зависимости от контекста и время его выполнения может быть различным, поэтому при написании такого файла следует учитывать, что первым параметром будет являться имя текущего сценария. В настоящее время это могут быть ifup*, ifdown*, setup* и shutdown*. Для приведённого выше примера имеет смысл реагировать только на вызовы из ifup или ifup-common.
Следует учитывать, что число вызовов файла <tt>selectprofile</tt> может меняться в зависимости от контекста и время его выполнения может быть различным, поэтому при написании такого файла следует учитывать, что первым параметром будет являться имя текущего сценария. В настоящее время это могут быть ifup*, ifdown*, setup* и shutdown*. Для приведённого выше примера имеет смысл реагировать только на вызовы из ifup или ifup-common.


## FTN ftnd1##
== См. также ==
{| border="1"
* [[Ресолвер]]
|-
|
маска в битах
|
маска точечно-десятичная
|-
|
/32
|
255.255.255.255
|-
|
/31
|
255.255.255.254
|-
|
/30
|
255.255.255.252
|-
|
/29
|
255.255.255.248
|-
|
/28
|
255.255.255.240
|-
|
/27
|
255.255.255.224
|-
|
/26
|
255.255.255.192
|-
|
/25
|
255.255.255.128
|-
|
/24
|
255.255.255.0
|-
|
/23
|
255.255.254.0
|-
|
/22
|
255.255.252.0
|-
|
/21
|
255.255.248.0
|-
|
/20
|
255.255.240.0
|-
|
/19
|
255.255.224.0
|-
|
/18
|
255.255.192.0
|-
|
/17
|
255.255.128.0
|-
|
/16
|
255.255.0.0
|-
|
/15
|
255.254.0.0
|-
|
/14
|
255.252.0.0
|-
|
/13
|
255.248.0.0
|-
|
/12
|
255.240.0.0
|-
|
/11
|
255.224.0.0
|-
|
/10
|
255.192.0.0
|-
|
/9
|
255.128.0.0
|-
|
/8
|
255.0.0.0
|-
|
/7
|
254.0.0.0
|-
|
/6
|
252.0.0.0
|-
|
/5
|
248.0.0.0
|-
|
/4
|
240.0.0.0
|-
|
/3
|
224.0.0.0
|-
|
/2
|
192.0.0.0
|-
|
/1
|
128.0.0.0
|}


== Примечания ==
<references/>


## FTN ftnd2##
{{Category navigation|title=etcnet|category=etcnet|sortkey=*}}
Выдержка из файла ip-cref.ps, который входит в документацию пакета iproute2:
[[Категория:WiFi]]
* broadcast ADDRESS
{{Category navigation|title=Wi-Fi|category=WiFi|sortkey={{SUBPAGENAME}}}}
<br />the broadcast address on the interface.
[[Категория:Admin]]
It is possible to use the special symbols '+' and '-' instead of the broadcast address. In this case, the broadcast address is derived by setting/resetting the host bits of the interface prefix.
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
NB. Unlike ifconfig, the ip utility does not set any broadcast address unless explicitly requested.
[[en:etcnet]]

Текущая версия от 11:32, 3 ноября 2023

Подсказки пользователю /etc/net

Дополнительные страницы:

Совсем быстрая настройка «с нуля»:

  1. сконфигурируйте интерфейсы вручную, как надо;
  2. запустите /etc/net/scripts/contrib/initconf write;
  3. проверьте содержимое подкаталогов /etc/net/ifaces/.
Information.svgНачиная с пятой ветки,
в ALT Linux может использоваться и
NetworkManager
(используйте NM_CONTROLLED=no
в $iface/options, если хотите использовать etcnet).
Information.svg external links:

Быстрый старт

Источники информации по /etc/net

Обратите внимание, что начиная с версии 0.8.0 документация по /etc/net была собрана из комментариев, расположенных во множестве файлов, в несколько страниц руководств (man). Список всех файлов документации пакета etcnet можно получить командой:

$ rpmquery -d etcnet

Быстрая настройка сетевого интерфейса стандарта Ethernet

Для настройки одного сетевого интерфейса следует выполнить следующие шаги:

Шаг 1: Создать каталог /etc/net/ifaces/eth0. Это каталог конфигурации данного интерфейса (eth0), в котором будут храниться файлы с настройками.

Шаг 2: Определить, какой модуль необходим для вашей сетевой карты. Для этого можно использовать команды: lspci, lspcidrake, pciscan.

Шаг 3: В каталоге конфигурации сетевого интерфейса создать файл options и записать в этот файл строку:

MODULE=<имя модуля>

На данном этапе работу с файлом options можно завершить.

Шаг 3 имеет смысл только в случае, если модули сетевых карт не грузятся автоматически другими средствами, например посредством udev. Если модуль уже загружен, параметр MODULE бесполезен.

Шаг 4: Выяснить, какой IP-адрес должен быть назначен вашему интерфейсу. Если ваш сетевой интерфейс конфигурируется по DHCP, то в файл /etc/net/ifaces/eth0/options следует записать строку:

BOOTPROTO=dhcp

и перейти к шагу 7.

Замечание: В ряде случаев в файле options может понадобиться запись:

DHCP_HOSTNAME=<имя машины без домена>

Эта опция описана в странице руководства etcnet-options(5).

Замечание: В конце файла options необходимо наличие пустой строки.

У сетевого интерфейса существуют два взаимосвязанных атрибута:

  • IP-адрес;
  • сетевая маска (mask).

Шаг 5: Текущие значение адреса можно просмотреть командой: # /sbin/ip address show Вероятнее всего вы увидите, что интерфейс-петля lo (loopback) уже сконфигурирован с адресом 127.0.0.1/8 (что эквивалентно IP-адресу 127.0.0.1 и маске подсети 255.0.0.0). /8 означает длину префикса CIDR (Classless InterDomain Routing). Для задания IP-адреса и маски подсети интерфейса eth0 необходимо создать файл /etc/net/ifaces/eth0/ipv4address, в который следует записать IP-адрес с длиной маски, например:

10.0.0.20/24

Наиболее популярны маски /24 (т.е. длина префикса CIDR равная 24 эквивалентна маске сети 255.255.255.0 - это одна сеть класса C на 254 хоста) и /30. Для справки приводится таблица соответствия сетевых масок в различных нотациях. [1]

Шаг 6: Выяснить адрес вашего шлюза (маршрут по умолчанию). Например, IP-адрес вашего шлюза — 10.0.0.254. Тогда необходимо создать файл /etc/net/ifaces/eth0/ipv4route, в который записать строку:

default via 10.0.0.254

Шаг 7: Убедиться, что всё выполнено правильно, выполнив команду: # service network restart Ваш интерфейс eth0 должен быть успешно сконфигурирован. Если вы конфигурировали eth0, используя DHCP-сервер, но адрес интерфейсу не был назначен, то следует искать сообщение от DHCP-сервера в файле /var/log/messages.

Настройка ifplugd

Начиная с версии 0.7.10, /etc/net управляет ifplugd самостоятельно. Это было сделано для лучшей интеграции пакетов и для возможности следить за несколькими сетевыми интерфейсами одновременно. Для корректного использования ifplugd необходимо выполнить команду:

# chkconfig ifplugd off

и назначить переменную USE_IFPLUGD (USE_IFPLUGD=yes или USE_IFPLUGD=auto) в файлах options соответствующих интерфейсов (/etc/net/ifaces/<имя интерфейса>/options). Комментарий по данной переменной дан в странице руководства etcnet-options(5).

Настройка PPP-интерфейса

Для настройки обычного модемного PPP-соединения необходимо:

  1. Создать каталог конфигурации PPP-интерфейса, например, /etc/net/ifaces/ppp5. Вы можете задавать имена PPP-интерфейса вида pppN, pppNN, pppNNN и т. п., где N - любая цифра от 0 до 9;
  2. Прочитать файл: /etc/net/ifaces/default/options-ppp;
  3. Создать файлы конфигурации. Вероятнее всего вам понадобятся pppconnect и pppdisconnect, чтобы pppd "знал", как дозваниваться и соединяться. Это скрипты для программы chat(8). Кроме этого в файле pppoptions можно (часто нужно) перечислить опции pppd(8), определяющие способ авторизации, скорость и название порта и т. п.;
  4. Заполнить /etc/ppp/chap-secrets или /etc/ppp/pap-secrets.
Внимание! Использование опций "persist" и "maxfail 0", которые требуются pppd для непрерывных попыток восстановить интерфейс в случае проблем, может привести к невозможности загрузки системы в случае проблем с соединением. Вариант решения есть в altbug #23556#c1


Настройка USB 3G-модема


Настройка PPTP-интерфейса и PPPoE-интерфейса

Основная статья: VPN (PPTP PPPoE)


Хотя PPtP-соединения могут быть настроены и как обычные PPP-соединения, в /etc/net версии 0.7.10 для удобства пользователей была введена опция PPPTYPE. Она может принимать следующие значения:

  • dialup - обычный PPP-интерфейс.
  • pppoe - интерфейс PPPoE. Для такого интерфейса необходимо в опции HOST указывать имя Ethernet-интерфейса, через который будет производиться работа PPPoE. Побочным положительным эффектом будет то, что этот интерфейс будет при необходимости автоматически подниматься (т.е настраиваться) (см. Зависимости между интерфейсами).
  • pptp - интерфейс PPTP. Для такого интерфейса необходимо в опции PPTP_SERVER указывать имя хоста или IP-адрес PPtP-сервера, к которому будет производиться подключение. Обратите внимание, что хотя такие интерфейсы не имеют опции HOST, в большинстве случаев есть необходимость указать в опции REQUIRES интерфейс, через который будет достижим хост, указанный в PPTP_SERVER.

См. также Замечания о настройке VPN-подключения и туннелей.

DNS и PPP-соединения

Внимание: здесь описывается проблема, которая на самом деле была создана, а не решена — т.е. ради специфики kppp была создана чётная ошибка в ppp-common; последняя уже исправлена.

Довольно долгое время существовала проблема неправильной модификации /etc/resolv.conf при установке PPP-соединений: #4249. Сейчас она решена, но необходимо дать пояснения. Прежде всего убедитесь, что в файле /etc/resolv.conf есть строка:

# ppp temp entry

Если этой строки нет, то в файле не будут модифицироваться строки nameserver, если только какая-нибудь программа типа kppp это не сделает специально. Если такая строка есть, то /etc/resolv.conf будет модифицироваться в зависимости от значения булевой (логической) переменной RESOLV_MODS, которую необходимо задать в файле /etc/sysconfig/network.

Внимание

: при ppp-common >= 0.4-alt1 строки # ppp temp entry в файле /etc/resolv.conf при отсутствии PPP-соединения, поднятого какой-либо программой-«звонилкой», запущенной от администратора системы (пользователь root) — быть не должно! Если это есть, следует убрать, чтобы /etc/ppp/ip-up занимался обновлением записей про DNS в этом файле.

restart, reload и другие команды

У сервиса network имеется ряд команд:

  • start - запустить все стационарные интерфейсы. hotplug-интерфейсы будут сконфигурированы при поступлении соответствующего вызова от hotplug.
  • startwith <имя профиля> - старт с указанным именем профиля, а не определённым автоматически.
  • stop - остановить все стационарные интерфейсы. hotplug-интерфейсы будут расконфигурированы при поступлении соответствующего вызова от hotplug.
  • stopwith <имя профиля> - стоп с указанным именем профиля, а не определённым автоматически.
  • restart - эквивалентно stop с последующим start, как и в большинстве других сервисов.
  • restartwith <имя профиля> - рестарт в контексте указанного профиля, эквивалентно stopwith <имя профиля> и startwith <имя профиля>.
  • switchto <имя профиля> - переключение в указанный профиль, эквивалентно stop и startwith <имя профиля>.
  • reload - семантически обозначает «актуализировать текущую конфигурацию». Для всех сконфигурированных в настоящий момент интерфейсов будет выполнена реконфигурация при наличии конфигурации.
  • check - автоматическая проверка конфигурационной базы.

Протоколы конфигурации адресов

С помощью опции BOOTPROTO вы можете управлять тем, как у интерфейса будут появляться адреса и маршруты (это относится только к протоколу IPv4, так как протоколы IPv6 и IPX получают адреса только статически).

  • static — адреса и маршруты будут взяты из ipv4address и ipv4route.
  • dhcp — интерфейс будет сконфигурирован по DHCP.
  • ipv4ll — интерфейс будет сконфигурирован с помощью IPv4LL (link-local), ранее известному как ZCIP (zeroconf IP). Это значит, что из сети 169.254.0.0/16 будет подобран ещё не использованный адрес и назначен на интерфейс.

Существует несколько комбинированных способов:

  • dhcp-static — если конфигурация по DHCP не удалась, конфигурировать методом static.
  • dhcp-ipv4ll — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll.
  • dhcp-ipv4ll-static — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll. Если и это не удалось, конфигурировать методом static.

Интеграция с systemd, или что делать если не поднимается интерфейс при старте.

Начиная с версии 0.9.12 в etcnet добавлен Unit для включения интерфейсов по мере их появления в системе. Это позволяет избежать "гонок", когда сетевая подсистема поднимается раньше, чем ОС загружает драйвера для сетевых устройств. Для этого нужно выставить ONBOOT=no в файле options интерфейса и включить его подъём через systemd при загрузке: systemctl enable network@<имя интерфейса>.

Устройство /etc/net

Общие сведения

/etc/net — это система конфигурации сети в Linux, т.е. эта система позволяет Администратору Linux достаточно просто произвести настройки сети. Если же вы читаете эту страницу, то, вероятно, у вас возникли трудности с её использованием. Для решения возможных проблем полезно знать:

  1. /etc/net интегрирован в ALT Linux Sisyphus в виде пакетов:
    • etcnet - базовые сценарии;
    • etcnet-full - виртуальный пакет с зависимостями на все пакеты, которые могут использоваться сценариями /etc/net, с указанием их точных версий;
    • etcnetconf - прототип конфигуратора;
    • etcnet-defaults-desktop - умолчания для рабочей станции;
    • etcnet-defaults-server - умолчания для сервера;
  2. Пакеты etcnet и net-scripts — две конфликтующие реализации «подсистемы конфигурации сети» (network-config-subsystem).
  3. При установке etcnet вместо net-scripts (или наоборот) сервис network оказывается выключенным. Это означает, что при загрузке системы сеть не будет сконфигурирована, что можно проверить командой chkconfig --list network. Для быстрого исправления проблемы можно дать команду chkconfig network reset.
  4. etcnet НЕ импортирует автоматически настройки net-scripts. Если вы только что установили etcnet, и ваши сетевые интерфейсы всё ещё остаются сконфигурированными (несмотря на уже отсутствующий пакет net-scripts), то вы можете запустить сценарий /etc/net/scripts/contrib/initconf. Он попытается проанализировать текущее состояние интерфейсов и выведет вам результат. Никаких файлов при этом записано не будет. Если вам подходит вывод initconf, то запустите его с параметром write и он проделает то же самое, но уже с сохранением конфигурации.
  5. Для корректной работы системы в целом необходимо, чтобы содержимое файла /etc/sysconfig/network было корректным.
  6. Переменные sysctl в ОС ALT Linux конфигурируются в следующих местах[2]:
    • /etc/sysctl.conf (глобальные системные);
    • /etc/sysconfig/network-scripts/sysctl.conf (общие сетевые в net-scripts, исходно файл не существует);
    • /etc/net/sysctl.conf (общие сетевые в /etc/net);
    • /etc/net/ifaces/*/sysctl.conf* (частные для конкретных интерфейсов или их типов в /etc/net, создаются вручную при необходимости).

Скрипты etcnet используют эти файлы в указанном порядке.

Организация опций /etc/net по умолчанию

Методология /etc/net предусматривает несколько шагов наследования опций, первый из которых — загрузка опций по умолчанию. В ранних версиях это происходило из одного файла /etc/net/options, сейчас же в вашем распоряжении есть каталог /etc/net/options.d, из которого будут последовательно прочитаны все файлы.

Иными словами, оригинальный архив etcnet содержит только файл /etc/net/options.d/00-default. Упаковщик etcnet, вместо того, чтобы добавить патч в какой-либо дистрибутив, просто добавляет файл с бОльшим номером, который переопределяет нужные опции.

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

  1. Уменьшается количество патчей (хотя их свойство "отваливаться" от пакета при его упаковке бывает полезным).
  2. Не изменяются файлы с опциями, принадлежащие пакету. Это делает обновление пакета намного более корректным.
  3. Можно легко увидеть, какие опции переопределяются на каждом этапе.

Назначение iftab

Начиная с дистрибутивов, основанных на ветках p5 и 5.1, переименование интерфейсов возложено на udev; см. тж. это письмо и #19313 и %changelog ifrename. В дистрибутивах на базе p8 и новее может быть полезным пакет udev-rule-generator-net, который заполняет /etc/udev/rules.d/70-persistent-net.rules. Возможно, следует отказаться от имён интерфейсов вида ethN и использовать, например, etherN ввиду того, что в новом systemd/udev официально сломан механизм переименования. Данное нововведение в ALT пока отменено; см. тж. #32167.

Имена сетевых интерфейсов по умолчанию, как правило, содержат их тип (eth, ppp, wifi, ipsec) и индекс: 0 - для первого созданного интерфейса, 1 - для второго и т. д. При этом соответствие автоматически назначенных имён физическим устройствам может не сохраняться.

Эта особенность неудобна, когда машина с Linux имеет более одного интерфейса каждого типа. Типичными примерами являются маршрутизаторы и ноутбуки. В маршрутизаторах, как правило, используются однотипные сетевые карты и при их замене или изменении порядка на PCI-шине соответствие оказывается нарушенным. В ноутбуках используются ethernet и wifi-устройства с горячим подключением, при этом слотов и карт может быть более чем 1. В этом случае пользователь/администратор скорее всего пожелает закрепить за каждой сменной картой её конфигурацию.

/etc/net при конфигурации интерфейса использует то имя, под которым он сконфигурирован, а именно имя каталога, в котором хранятся файлы конфигурации интерфейса.

Для привязки сетевой карты к имени интерфейса в простых случаях можно воспользоваться файлом /etc/iftab, man-страница по формату которого входит в пакет ifrename (iftab(5)).

Использование /etc/iftab удобно, поскольку позволяет сохранять традиционные имена интерфейсов (например, eth0), но этот механизм не поддерживает расширенную функциональность /etc/net (в частности, профили /etc/net).

Средством, позволяющим использовать все возможности etcnet, является файл /etc/net/iftab, обрабатываемый не утилитой ifrename, а непосредственно etcnet. Синтаксис этого файла совпадает с синтаксисом /etc/iftab. Ограничением же является невозможность использовать стандартные имена интерфейсом (ethX, pppX), так как переименование интерфейсов происходит уже после конфигурации интерфейса ядром. В случае, если вам необходим /etc/net/iftab, имеет смысл переименовать интерфейсы, давая им либо двухзначные номера (eth00, eth01...), либо осмысленные названия (isplink, lan...)

См. письмо про важность /etc/iftab и тж. это письмо про отличия etcnet и сервиса ifrename:

Комментарии к письмам этого треда (с некоторыми пояснениями):

1. «etcnet уже научился менять местами eth0 и eth1?»

Освоение этого приема обладает сомнительной пользой. Рекомендуется рассматривать eth0 как временное имя с малым сроком жизни, а для повышения комфорта пользователей Ethernet-интерфейсы предлагается называть eth00, eth01, eth02 etc.

2. «Существование (номинальное) net-scripts вынуждает поддерживать ряд сервисов, которые иначе могли бы быть упразднены»

Эти сервисы можно "обезвредить" (отключить) контролем CONFMETHOD из /etc/sysconfig/network. При этом зависимости на пакет etcnet не возникнет, только на network-config-subsystem. Примеры таких пакетов должны быть в Sisyphus.

3. «после приведения в порядок /etc/udev/rules.d/19-udev-ifrename.rules нужности в /etc/net/iftab я не заметил»

Важнейшее принципиальное отличие /etc/net/iftab от /etc/iftab — нахождение /etc/net/iftab в специальном пространстве имён. Для него действуют механизмы определения профиля и хоста конфигурации. Это, например, позволит, при необходимости, составить конфигурацию так, что срочный ремонт маршрутизатора сведётся к переносу диска (или массива) из сгоревшего шасси в запасное. Возможны и другие примеры, которые станут невозможными при помещении iftab в /etc и его прямой интерпретации.

Конечно, пользователю единственного ноутбука с одним-двумя сетевыми интерфейсами такая практика — полный overkill (т.е. такая практика ему не нужна), но его никто и не

заставляет видеть всю подводную часть (т.е. все тонкости работы и настройки). В этом и гибкость.

Интерфейсы lo, default и unknown

Сразу после установки пакета etcnet в каталоге /etc/net/ifaces (в котором хранятся конфигурации интерфейсов) находятся три каталога:

  • lo
  • default
  • unknown

Интерфейс lo — стандартная "петля" (loopback), которая должна быть во всякой Linux-системе, поэтому конфигурация для него включена по умолчанию. В остальном он ничем не отличается от любого другого интерфейса и конфигурируется точно так же файлами options и ipv4address.

Интерфейс default — это не интерфейс, а специальный каталог, файлы в котором обрабатываются следующим образом:

  • resolv.conf — если присутствует, то копируется в /etc/resolv.conf.
  • options — файл опций, читается после опций по умолчанию.
  • options-<вид интерфейса> — этот файл содержит опции, специфичные для данного вида интерфейсов. Некоторые из них не обязательны и позволяют использовать особенности данного вида интерфейсов, например, LINKDETECT в options-eth; другие обязательны, например, HOST в options-bri. Обратите внимание, что эти файлы не рекомендуется редактировать. Если вам нужно задать опцию для интерфейса, то, как правило, это можно сделать в файле options в конфигурационном каталоге данного интерфейса. Это облегчит процесс обновления пакета etcnet.
  • sysctl.conf-<вид интерфейса> — файл с переменными sysctl, которые необходимо изменить. Сейчас единственный такой файл — sysctl.conf-dvb, который отключает return path filter, что всегда нужно в случае асимметричной маршрутизации.
  • iplink-<вид интерфейса> — файл с командами iplink, специфичными для данного вида.
  • selectprofile — если этот файл исполняемый, то он будет вызван из сценариев ifup/ifdown, setup/shutdown для того, чтобы вернуть на стандартном выводе имя профиля, которое необходимо использовать. Это позволяет автоматически переключать профили в зависимости от каких-либо условий. В поставку включен пример сценария: /etc/net/scripts/contrib/selectprofile.
  • fw — каталог с настройками сетевого экрана по умолчанию.

Интерфейс unknown — специальная конфигурация, которая будет использована в том случае, когда /etc/net просят сконфигурировать hotplug-интерфейс, для которого не существует каталога конфигурации. Это будет работать только в том случае, если включена опция ALLOW_UNKNOWN.

broadcast address

Периодически возникает вопрос: почему после старта /etc/net при запуске ifconfig можно видеть Bcast:0.0.0.0, хотя при использовании net-scripts это поле было правильным?

Ответ: net-scripts оперируют адресом, маской, адресом сети и широковещательным адресом, пытаясь определить неизвестные компоненты из известных, а config-ipv4 просто передаёт утилите ip содержимое файла ipv4address, не проверяя его содержание. Важно заметить, что:

  • Если iproute2 изменит свой синтаксис, то с очень вероятно, что администратору будет необходимо редактировать только конфигурационные файлы.
  • Не было найдено проблем с «отсутствующим» broadcast address. Он есть в таблице маршрутизации local.
  • Администратор всегда может назначить адрес broadcast в файле ipv4address. Это можно сделать с помощью выражения broadcast +[3].

Замечание: В версии 0.8.0 появилась опция AUTO_BROADCAST для автоматического дополнения каждой строки ipv4address.

Ядро 2.6 и "пропадающие" интерфейсы

Иногда возможна ситуация: Если два интерфейса используют один и тот же модуль ядра, и у них определена опция MODULE (то есть скрипты /etc/net сами загружают и выгружают модули), то при опускании (отключении) одного интерфейса пропадает и второй интерфейс.

Такая ситуация почти наверняка возникает при использовании ядра 2.6, особенностью которого являются значения счётчика ссылок (третий столбец вывода lsmod). Когда счетчик оказывается равен нулю (довольно часто), скрипты могут попытаться выгрузить модуль интерфейса, для которого запущен ifdown. И такая выгрузка происходит, несмотря на то, что другой интерфейс, использующий этот же модуль, находится в состоянии UP (т.е. он активен).

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

Cценарии конфигурации сети и hotplug-интерфейсы

Cценарии конфигурации сети

Существует несколько сценариев конфигурации сети.

  • Первый и самый простой — выполнение service network start при старте системы или вручную. При этом требуется только сформировать погруппные (потиповые) списки интерфейсов, подлежащих обработке, и последовательно выполнить требуемые действия. Модули ядра при этом загружаются сценариями /etc/net, при этом имена модулей берутся из опции MODULE (в этой опции можно в кавычках перечислить несколько имён и они будут последовательно загружены). Этот метод часто используется на практике и лучше всего подходит для маршрутизаторов. Преимущество метода в том, что вся необходимая информация сконцентрирована в одном месте — каталоге /etc/net. Если опция MODULE не определена, то будет предпринята попытка загрузки по имени интерфейса, подразумевая, что файл /etc/modules.conf правильно заполнен.
  • Второй сценарий — реакция на событие ifplugd. В предыдущих версиях существовала сложность, так как требовалась синхронная настройка сервиса ifplugd. Сейчас логика работы определена, что выражено в том, что /etc/net взяла управление ifplugd на себя. В части загрузки модуля этот сценарий не отличается от первого.
  • Третий сценарий — реакция на появление или исчезновение сменного устройства. Для обработки таких событий предназначены сценарии /etc/net/scripts/{ifup,ifdown}-removable, которые вызываются из сценариев пакетов hotplug и pcmcia-cs. Сложность заключается в том, что для сменных PCMCIA-карт вызовы могут дублироваться: для одного и того же события первый раз ifup-removable будет вызван из hotplug, второй — из pcmcia-cs. Кроме того, hotplug также реагирует на загрузку модулей ядра для обычных карт PCI и, более того, включает сценарии, которые пытаются загружать модули самостоятельно. В этом контексте /etc/net получает слишком много вызовов от hotplug и по умолчанию их игнорирует (USE_HOTPLUG=no).
  • Четвёртый сценарий - реакция на появление сетевого интерфейса через systemd. Такое событие обрабатывается через сервис network@.service, которому в качестве аргумента, следующего за @ нужно передать имя интерфейса. Например - systemctl enable network@eth0. В этом случае интерфейс будет подниматься после его появления в системе, что полезно в некоторых случаях, когда система загружается быстрее появления интерфейсов и на момент запуска сервиса network сетевых интерфейсов в системе ещё нет.

hotplug-интерфейсы

Рассмотрим использование hotplug-интерфейсов.

Пусть администратору необходимо настроить действительно сменную карту. После заполнения /etc/iftab или /etc/net/iftab в файле options необходимо будет задать USE_HOTPLUG=yes. После этого при получении события от hotplug /etc/net будет работать в том контексте, что модуль в загрузке и выгрузке не нуждается.

Важно заметить, что такой интерфейс будет пропущен при обычном старте сети, т.к. если он сменный, то единственный достоверный способ узнать, что он присутствует — получить вызов от hotplug. Из факта выполнения service network start совсем не следует, что какой-то один или несколько из сконфигурированных hotplug-интерфейсов сейчас в наличии и требуют конфигурации. Если вы хотите вручную расконфигурировать hotplug-интерфейс до его извлечения, используйте команду ifdown. Для повторной конфигурации вставьте его ещё раз.

Также существует опция USE_PCMCIA. Если события для вашей карты генерирует pcmcia-cs, то вам нужно её включить. Если события генерируются только hotplug, то используйте опцию USE_HOTPLUG.

Проблема стандартных имен интерфейсов (eth0 и др.)

При использовании файла /etc/net/iftab, то есть в случае применения сложных конфигураций, возникает следующая проблема:

  • При загрузке модулей имена интерфейсов принимают вид eth0, eth1, eth2… Какие именно — в общем случае контролировать нельзя.
  • Имя eth0 обладает наибольшей вероятностью оказаться занятым.
  • ifrename не может переименовать интерфейс, если целевое имя уже занято (udev использует ifrename -t, но это не работает после начальной загрузки, см. руководство к ifrename).

С учётом вышеизложенного, если /etc/net/iftab содержит тот же набор имён интерфейсов, что уже имеется после загрузки модулей (то есть eth0/eth1 и другие «стандартные» названия), то единственный случай, когда etcnet сможет без ошибок обработать такой файл — изначальное соответствие, не требующее переименования.

Таким образом, при использовании /etc/net/iftab имеет смысл давать интерфейсам названия, отличные по виду от тех, что назначает ядро. В простых случаях лучше использовать /etc/udev/rules.d/70-persistent-net.rules (/etc/iftab до бранчей p5/5.1).

Расширенные возможности

Несколько IP-адресов или маршрутов на одном интерфейсе

Вы можете помещать произвольное количество IP-адресов в файл ipv4address по одному адресу на каждой строке. То же самое относится к статическим маршрутам и файлу ipv4route.

Обратите внимание, что /etc/net не анализирует содержимое этих файлов, а формирует на основе каждой строки командную строку для утилиты ip. Это означает, что вы можете помещать в этих файлах произвольные поддерживаемые ip опции и они будут обработаны. Например, в файле ipv4route можно поместить строку:

10.0.1.0/24 via 10.0.0.253 metric 50 weight 5 table 100

Зависимости между интерфейсами

У интерфейсов:

  • vlan
  • bond
  • bri
  • teql

входящих в группу зависимых физических, должна быть определена опция HOST со списком интерфейсов, необходимых для инициализации текущего интерфейса. Если хост-интерфейс не сконфигурирован при поднятии зависимого интерфейса, то это будет исправлено.

Кроме обязательной для определённых интерфейсов опции HOST, может быть задана и необязательная для всех остальных интерфейсов опция REQUIRES. Интерфейсы, перечисленные в этой опции, будут считаться зависимостями текущего интерфейса. Например, по умолчанию попытка сконфигурировать интерфейс А, который зависит от Б и В, приведёт сначала к конфигурации Б и В. Аналогично, при расконфигурации Б или В сначала будет расконфигурирован А.

Зависимость одного интерфейса от другого не всегда формальна. Например, в сценарии ifup-pre одного интерфейса может использоваться команда, которая потребует разрешения DNS-имени, которое может быть разрешено только с помощью resolv.conf, инсталлируемого другим интерфейсом. Или это может быть PPPoE/PPtP-интерфейс, требующий Ethernet-интерфейс для работы.

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

Пользовательские сценарии post и pre

Существует возможность поместить в каталог конфигурации интерфейса файлы, которые будут выполнены в определённые моменты. Для этого они должны быть исполняемыми и называться следующим образом:

  • ifup-pre — для выполнения перед конфигурированием интерфейса.
  • ifup-post — для выполнения после конфигурирования интерфейса. Например, можно запустить почтовую систему.
  • ifdown-pre — для выполнения перед расконфигурированием интерфейса. Например, можно остановить почтовую систему.
  • ifdown-post — для выполнения после расконфигурирования интерфейса.

Также в версии до 0.8.0 возможно использовать следующие сценарии (они должны быть исполняемыми):

  • /etc/net/scripts/ifup-pre-local
  • /etc/net/scripts/ifup-post-local
  • /etc/net/scripts/ifdown-pre-local
  • /etc/net/scripts/ifdown-post-local

Они будут вызваны для каждого интерфейса. Начиная с версии 0.8.0 эти сценарии называются так:

  • /etc/net/ifup-pre
  • /etc/net/ifup-post
  • /etc/net/ifdown-pre
  • /etc/net/ifdown-post

Семантика сохранена.

Управление канальными параметрами интерфейсов

Если поместить в конфигурационный каталог интерфейса файл iplink, в котором в каждой строке будут записаны команды режима link утилиты ip, то они будут выполнены при конфигурации интерфейса.

Например, если необходимо, чтобы интерфейс net1 имел MAC-адрес aa:bb:cc:dd:ee:ff и MTU 200 байт, то в файл /etc/net/ifaces/net1/iplink нужно поместить следующее:

address aa:bb:cc:dd:ee:ff
mtu 200

Обратите внимание, что в этом случае в /etc/net/iftab вам необходимо будет использовать селектор businfo или driver вместо mac.

Jumbo Frames

MTU — максимальный размер полезного блока данных одного пакета, который передается без фрагментации. Стандартное значение MTU в Ethernet — 1500 байт.

Jumbo Frame — кадр сети Ethernet, который превышает по размеру MTU и может передавать до 9000 байт данных.

Примечание: Jumbo Frame рекомендуется использовать только в Isolated-сетях, не имеющих доступа в интернет. Использование Jumbo Frame в Routed-сетях может привести к потере сетевого взаимодействия с внешней сетью. [i]


Jumbo-кадры имеют размер, превышающий стандартный размер MTU: от 1518 до 16000 байт.

Как правило, они не превышают 9000 байт, поскольку в сетях Ethernet используется 32-битная CRC, которая теряет свою эффективность при объеме данных больше 12000 байт; к тому же 9000 байт вполне достаточно для передачи 8-килобайтной датаграммы (напр. NFS).

Есть 2 вида Jumbo:

  • mini (baby) jumbo – это пакеты размером немного больше 1500. Активно используются для 802.1q, QinQ, MPLS.
  • нормальные jumbo – размером около 9000 байт

Зачем же они нужны? Jumbo Frames увеличивают эффективность передачи данных за счет снижения накладных расходов (эффективность равна полезной нагрузке кадра деленной на общий размер кадра). Их рекомендуют включать в сетях, где есть интенсивная пересылка больших объемов данных.

По умолчанию jumbo frames выключен. Как же их включить? Оказывается достаточно просто увеличить размер MTU до нужного значения.[i]

Как установить Jumbo Frame?

По аналогии с шагом Управление канальными параметрами интерфейсов правим файл /net/ifaces/eth0/iplink - где eth0 ваш сетевой интерфейс.

В данном файле указываем следующий параметр с необходимым значением:

mtu 1600

Управление физическими параметрами интерфейсов

Если поместить в конфигурационный каталог интерфейса файл ethtool, в котором будет строка с параметрами программы ethtool, то она будет выполнена при конфигурации интерфейса.

Например, если есть необходимость, чтобы интерфейс net1 имел скорость 10Мбит/с и авто-согласование скорости было отключено, то в файл /etc/net/ifaces/net1/ethtool нужно поместить следующую строку:

speed 10 autoneg off

Настройка Ethernet-моста

Для настройки Ethernet-моста (далее — моста) есть 2 пути:

  1. Linux bridge посредством iproute2
  2. Openvswitch

Linux bridge наиболее простая реализация. Если вам не нужно все, что умеет openvswitch , то можно использовать Linux bridge.

Обратите внимание: хостовые интерфейсы должны быть сконфигурированы на подъём без адреса:

TYPE=eth
ONBOOT=yes
DISABLED=no
BOOTPROTO=static

С пакетом etcnet поставляются примеры конфигурации. Один из них показывает, как из двух ethernet-интерфейсов port0 и port1 можно собрать мост bridge (каталог документации examples/Ethernet-bridge-GRE/).

Безотносительно к etcnet, следует иметь ввиду проблему, связанную с NAT: http://bugzilla.kernel.org/show_bug.cgi?id=13079

Имейте ввиду, что если вы подключаетесь по ssh к серверу через bridge-интерфейс (по его ip-адресу), то по умолчанию при опускании любого интерфейса-члена моста Etcnet так же опустит и сам мост (и ваше подключение пропадет). Чтобы избежать этого, установите в файле options того интерфейса, который нужно опускать, переменную IFDOWN_CHILDREN=no. Но учтите, что и включаться в бридж при старте тогда этот интерфейс по умолчанию не будет.

Linux bridge посредством iproute2

Предположим, требуется настроить Ethernet-мост, пусть он будет называться br0. Тогда для его настройки необходимо завести каталог /etc/net/ifaces/br0 и создать там файлы со следующими данными:

  • ipv4address:
 192.168.100.200/24 
  • options:
 TYPE=bri
 HOST='eth0 tap0'
 BOOTPROTO=static 
 BRIDGE_OPTIONS="stp_state 0" 

Список доступных опций можно посмотреть командой ip link help bridge

IP-адрес для интерфейса, как обычно, будет взят из ipv4address.

В опции HOST файла options нужно указать те интерфейсы, которые будут входить в мост. Если в него будут входить интерфейсы, которые до этого имели IP-адрес (например, eth0), то этот адрес должен быть удалён (например, можно закомментировать содержимое файла ifaces/eth0/ipv4address).

При старте сети сначала поднимаются интерфейсы, входящие в мост, затем сам мост (автоматически). Для назначения адреса мосту можно также использовать DHCP (BOOTPROTO=dhcp). Документацию по настройке моста с вопросами и ответами (перевод) можно найти на http://xgu.ru/wiki/Linux_Bridge, а его оригинал доступен на http://www.linuxfoundation.org/collaborate/workgroups/networking/bridge.

Для поддержки VLAN нужно сделать такие настойки в файле options:

VLAN_AWARE=yes
VIDS="2 4-10 15"

В этом случае VIDS применятся для всех trunk интерфейсов, входящих в bridge.
Если же вам нужно настроить каждый из trunk интерфейсов индивидуально, то дополнительно введён конфигурационный файл bridge (в каталоге интерфейса bridge), в котором можно перечислить передаваемые утилите bridge команды.
Например, содержимое /etc/net/ifaces/br0/bridge для моста, в который входят интерфейсы eth0 и eth1:

vlan add dev eth0 vid 100 master
vlan add dev eth0 vid 200 master
vlan add dev eth1 vid 200 master
vlan add dev eth1 vid 300 master

Дискуссия на момент перехода: https://lists.altlinux.org/pipermail/devel/2018-October/205769.html

openvswitch

Как настраивать openvswitch, описано тут.

Настройка VLAN

Для настройки 802.1q VLAN (например, id 4094 на eth1) следует, создав каталог ifaces/eth1.4094, поместить в него файлы со следующим содержимым:

  • ipv4address:
192.168.100.200/24
  • options:
 TYPE=vlan
 HOST=eth1
 VID=4094
 BOOTPROTO=static

Содержимое переменных HOST и VID будет передано утилите vconfig; использование файла vlantab необязательно (и не рекомендуется по причине невозможности использовать ifup для отдельного интерфейса). Пример конфигурации можно найти в каталоге examples/VLAN-without-vlantab/ документации etcnet.

Следует обратить внимание, что 4094 является верхней допустимой границей идентификатора валидного VLAN, а 4095 используется технически в процессе отбрасывания трафика по неверным VLAN. (следует отметить, что это не ограничение Linux: в стандарте под VID отведено 12 бит)

Обратите внимание, что ISC DHCP сервер на интерфейсе VLAN, скорее всего, у вас не будет работать, пока вы не добавите опцию VLAN_REORDER_HDR=on в настройки vlan интерфейса. Эта опция переведёт vlan интерфейс в режим работы, в котором пакеты на интерфейсе не будут содержать тэгов vlan и их сможет получить dhcpd.


Для настройки Q-in-Q интерфейса, например, eth1.123.513 (дважды тегированный трафик: внешняя метка -- 123, внутренняя -- 513) следует файл options в каталоге ifaces/eth1.123.513 заполнить следующим образом:

  • options:
 TYPE=vlan
 HOST=eth1.123    # "родительский" интерфейс; может называться иначе
 VID=513
 VLAN_REORDER_HDR=0
 BOOTPROTO=static

Родительский интерфейс должен быть сконфигурирован (можно с или без BOOTPROTO, с или без ipv4address и т.п.).

Таким образом, можно каскадировать интерфейсы "как угодно глубоко" (Q-in-Q-in-Q-in-Q....). Необходимо только учитывать, что длина имени интерфейса ограничена (16-ю символами).

Настройка bonding

Bonding - объединение нескольких физических сетевых интерфейсов в один логический, для достижения отказоустойчивости, увеличения скорости и балансировки нагрузки. Возможны несколько режимов работы со своими параметрами, подробнее см. здесь.

Для создания агрегированного bond-интерфейса средствами etcnet создаем, как обычно, директорию для интерфейса (например, bond0) с options, ipv4address и прочими необходимыми файлами. В options указываем тип интерфейса (TYPE) bond, перечисляем в переменной HOST родительские интерфейсы, которые будут входить в наш агрегированный интерфейс, указываем в переменной BONDMODE режим (по умолчанию 0), а опции для модуля ядра bonding - в BONDOPTIONS.
Так, для создания LACP-агрегированного канала (802.3ad) у нас получится такой options:

TYPE=bond
ONBOOT=yes
BOOTPROTO=static
HOST="eth0 eth1"
BONDMODE=4
BONDOPTIONS="miimon=100 lacp_rate=1"

Интерфейсы eth0 и eth1 должны тоже быть описаны в etcnet.

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

Не стоит указывать режим в переменной BONDOPTIONS: попытки изменить какие-то режимоспецифичные параметры до установки правильного режима могут быть отвергнуты. Поэтому первым делом нужно установить необходимый режим, указав его для этого в BONDMODE.

Информацию о получившемся агрегированном интерфейсе можно посмотреть в /proc/net/bonding/bond0

Настройка tun/tap интерфейса

Etcnet поддерживает простое создание интерфейсов типа tun/tap. Это виртуальный тип интерфейсов для передачи пакетов между ядром и программами, который не передает данных через физические устройства. tun — это интерфейс типа point-to-point, работающий с кадрами IP. tap — интерфейс типа ethernet, работающий с кадрами ethernet.

Потребуется использование утилиты tunctl, находящейся в одноименном пакете. Пусть требуется создать и настроить tun/tap интерфейс, например, с именем tap0. Для этого необходимо:

  • создать каталог интерфейса:
/etc/net/ifaces/tap0
  • создать в каталоге интерфейса /etc/net/ifaces/tap0 файл настройки options со следующим содержанием:
TYPE=tuntap
TUNTAP_USER=combr


TUNTAP_USER — это аккаунт или цифровой id пользователя, которому будут даны права на использование интерфейса tap0 (устройство /dev/net/tun). Этот параметр будет передан утилите tunctl как аргумент опции -u (см. руководство на tunctl). С версии ядра 2.6.18 произошли изменения в управлении этим типом интерфейсов, потребовавшие обязательного применения tunctl для разрешения доступа обычных пользователей к tap-интерфейсам. В предыдущих версиях любой пользователь, имеющий доступ к /dev/net/tun, мог создать любое количество сетевых интерфейсов с произвольными именами. Начиная с 2.6.18, для создания интерфейса через /dev/net/tun требуется CAP_NET_ADMIN (обычно эту привилегию имеет только root), а обычный пользователь, имеющий доступ к /dev/net/tun, может только использовать уже созданные интерфейсы, к которым разрешён доступ для его uid.

Настройка интерфейса типа OpenVPN

Настройка OpenVPN может быть произведена большим количеством способов и вариантов с разными целями, и достойна отдельной статьи. Здесь, для начала, будет описан вариант openvpn-сервера в режиме bridging. Для этого надо проделать подготовку:

(до версии 2.3 утилиты easy-rsa шли в составе дистрибутива openvpn, потом отдельно).

  • настроить мост (между внутренним физическим интерфейсом и интерфейсом tap, который будет использовать openvpn) "средствами системы".

Далее надо сделать так (скрипты etcnet по умолчанию ожидают это):

  • создать каталог интерфейса:
/etc/net/ifaces/tap0
  • создать в каталоге интерфейса /etc/net/ifaces/tap0 файл настройки options со следующим содержанием:
TYPE=ovpn

(необязательно, но желательно указать REQUIRES=<имя ethernet-интерфейса>, с которым будет связан туннель)

  • Конфигурационный файл для openvpn (из примера в пакете openvpn-docs - такой, как /usr/share/doc/openvpn-docs-2.2.2/sample-config-files/server.conf) надо переделать, удалив параметры, которые etcnet подставляет самостоятельно при запуске:
dev
ca
cert
key
persist-key
persist-tun

И обязательно добавив параметры, которых по умолчанию в конфиге-примере нет:

tls-server
script-security 2

Параметр script-security был введен начиная с версии 2.1_rc9. Поскольку etcnet запускает openvpn так, что в процессе тот запускает скрипт scripts/openvpn.action, который считается "пользовательским", то для этого значение должно быть 2.

  • скопировать в каталог интерфейса ключи и измененный конфиг-файл openvpn.

Файлы надо переименовать (ключи - после easy-rsa) таким образом:

ключ easy-rsa ключ etcnet-ovpn
ca.crt ovpnca
server.crt ovpncrt
server.key ovpnkey
server.conf ovpnoptions


После всего этого можно попробовать запустить интерфейс: ifup tun0 (или весь мост, например ifup br0). Но если, например, openvpn считает ошибочной какую-либо опцию, то он молча выйдет с кодом выхода 1, и скрипт ifup ничего не напишет (в логе так же не будет попытки запуска openvpn). Потребуется отладка (например, можно запустить openvpn вручную без параметра --daemon и со всеми параметрами, которые подставил etcnet).

Настройка WireGuard VPN туннеля

WireGuard используется для быстрого создания VPN туннелей, является более легким и безопасным чем OpenVPN. Для использования wireguard необходимо ядро std-def версии 3.10+, установленный модуль ядра kernel-modules-wireguard-std-def и пакет wireguard-tools. Для настройки интерфейса необходимо:

  • создать каталог интерфейса /etc/net/ifaces/wg0
  • добавить файл с конфигурацией /etc/net/ifaces/wg0/options
TYPE=wg
LISTENPORT=51820
  • добавить файл с поддерживающимися wireguard опциями пиров /etc/net/ifaces/wg0/peers (одна строка - один пир)
peer PUBLICPEERKEY allowed-ips IFACESSUBNET endpoint PUBLICIP:ALLOWPORT
  • добавить файл содержащий локальные и удаленные ip адреса /etc/net/ifaces/wg0/ipv4address

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

10.1.0.0/16
10.1.0.1 10.2.0.1
  • добавить файл содержащий приватный ключ /etc/net/ifaces/wg0/privatekey

Ключи могут быть созданы стандартной утилитой wireguard:

$ umask 077
$ wg genkey > privatekey
$ wg pubkey < privatekey > publickey

Настройка и использование IP-туннелей

IP-туннели — средство, позволяющее улучшить IP-сети. Поддерживаются IP-туннели трёх видов:

  • IPIP
  • GRE
  • SIT
  • VTI

Прежде всего следует определить необходимый вид туннеля для решаемой задачи.

  • Туннели IPIP — самые простые.
  • Туннели GRE (general incapsulation) обычно используются в маршрутизаторах Cisco. По туннелям этого типа могут передаваться broadcast и multicast пакеты. Кроме того, эти туннели поддерживают контрольные суммы и контроль упорядоченности пакетов. Также GRE-туннели обладают опциональным атрибутом key в виде произвольного 4-байтового числа, который позволяет конфигурировать несколько GRE туннелей между одной парой IP-адресов несущей сети (в отличие от IPIP-туннелей, с которыми это невозможно).
  • Туннели SIT предназначены для транспортировки пакетов IPv6 через сети IPv4.
  • Туннели VTI используются для построения IPsec туннелей. Работают используя один из демонов, strongswan или libreswan.

Тип туннеля определяется опцией TUNTYPE (ipip, gre, sit, vti). По умолчанию TUNTYPE=ipip. Кроме типа туннеля для конфигурации всегда требуется адрес удалённого хоста и почти всегда — локальный адрес. Эти адреса определяются опциями TUNREMOTE и TUNLOCAL соответственно. В некоторых случаях локальный адрес можно не указывать. В этом случае опция TUNLOCAL всё равно обязательна, но принимает значение any. Не забудьте назначить туннельному интерфейсу адреса и маршруты в соответствующих файлах.

Пример: Конфигурация GRE-туннеля между 10.0.1.2 и 10.0.2.3 с двумя ключами для исходящих и входящих пакетов, проверкой очерёдности пакетов, TTL 8 и вычислением контрольных сумм. Туннель должен использовать только интерфейс gw1. Пусть имя создаваемого туннеля будет mytunnel.

Тогда необходимо сделать следующие операции:

  • Создать каталог туннеля: /etc/net/ifaces/mytunnel
  • Создать в каталоге туннеля файл настроек options: /etc/net/ifaces/mytunnel/options
  • Отредактировать файл настроек options:
TYPE=iptun
TUNTYPE=gre
TUNLOCAL=10.0.1.2
TUNREMOTE=10.0.2.3
TUNTTL=8
HOST=gw1
TUNOPTIONS='ttl 64 seq ikey 2020 okey 2030 csum'

Про ttl 64. Если параметр ttl не задан, значение берётся из инкапсулируемого пакета (это надо проверить). В некоторых случаях ttl может получиться слишком мал (например, Quagga формирует OSPF-пакеты с TTL 1).

Стоит помнить, что имена tunl0, gre0 и sit0 являются зарезервированными в iproute2 ("base devices") и имеют особое поведение: http://www.liveinternet.ru/users/stasikos/post71435454/

Процедура создания vti интерфейса стандартна, однако, предварительно необходимо установить и настроить один из демонов (strongswan, libreswan), о том, как это сделать можно найти в соответствующей документации. После чего необходимо создать каталог интерфейса (к примеру он будет называться vti0) /etc/net/ifaces/vti0, и добавить в него файл настроек туннеля /etc/net/ifaces/vti0/options, куда нужно прописать необходимую конфигурацию:

TYPE=iptun
TUNTYPE=vti
TUNLOCAL=119.81.184.173
TUNREMOTE=119.81.177.236
TUNOPTIONS='key 42'

Параметр key должен соответствовать параметру mark, указанному при настройке strongswan/libreswan.

Настройка IPv6

Включение IPv6

  • Во-первых, следует убедиться, что не применяется какой-либо вариант совета из пункта "Отключение IPv6" ниже.
  • Во-вторых, следует проверить значение CONFIG_IPV6 в etcnet. Переменная может быть описана в /etc/net/options.d/*, /etc/net/ifaces/default/*, /etc/net/ifaces/*/options. Наибольший приоритет — у описания в /etc/net/ifaces/*/options.

Замечание: В версии etcnet-0.9.26-alt1, в /etc/net/ifaces/default/options содержится CONFIG_IPV6=no.

Отключение IPv6

  • Вариант 1

Чтобы отключить IPv6 на всех сетевых интерфейсах в работающей системе с загруженным модулем ipv6, нужно изменить значение параметра ядра net.ipv6.conf.all.disable_ipv6, где 'all' подразумевает все интерфейсы, а net.ipv6.conf.eth0.disable_ipv6 -- отключение протокола IPv6 только на интерфейсе eth0 и т.д.

sysctl net.ipv6.conf.all.disable_ipv6=1

Также можно добавить данную директиву в /etc/sysctl.conf:

echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
sysctl -f
  • Вариант 2

Добавить параметр в командную строку загрузки ядра. Для GRUB2 нужно изменить параметры загрузки ядра в файле /etc/sysconfig/grub2, изменив переменную GRUB_CMDLINE_LINUX_DEFAULT или GRUB_CMDLINE_LINUX

...
GRUB_CMDLINE_LINUX='failsafe vga=normal ipv6.disable=1'
...

и обновив конфигурационный файл grub

grub-mkconfig -o /boot/grub/grub.cfg
  • Вариант 3
echo 'options ipv6 disable=1' >> /etc/modprobe.d/options-local.conf

Вступит в силу только после перезагрузки.

Установка preferred lifetime 0 для статически назначенного адреса

В ряде случаев может быть полезно принудительно выставить для добавляемого IPv6-адреса (в соотв. ему префиксе) preferred lifetime в 0 секунд. Тогда адрес при наличии других preferred-адресов не будет использоваться протоколами высших уровней для исходящих соединений, но на него можно, например, явно забиндить слушающий сокет.

В файле ipv6address можно указать дополнительные аргументы для ip -6 a {add,delete,change} Например:

2001:db8:201:1::1/64 preferred_lft 0

Туннели 6-to-4

Требуется:

  • ядро с поддержкой IPv6 (CONFIG_IPV6 в /boot/config-*; наличие модуля ipv6);
  • ядро с поддержкой tun (CONFIG_TUN в /boot/config-*; наличие модуля tun);
  • доступность узла 192.88.99.1 - через него маршрутизируется трафик в сети IPv6.

Далее в /etc/net/ifaces создаётся каталог с названием, например, tun6to4. В нём создаются файлы:

iplink :

mtu 1472 

ipv6address :

# first six octets: ipv6calc --ipv4_to_6to4addr $TUNLOCAL
2002:c000:201::1/16 

ipv6route :

2000::/3 via ::192.88.99.1 dev tun6to4 metric 1 

options :

TYPE=iptun
TUNTYPE=sit
TUNLOCAL=192.0.2.1
TUNREMOTE=any
TUNOPTIONS="ttl 64"
DONT_FLUSH=yes
CONFIG_IPV6=yes 

Адрес TUNLOCAL в options - имеющийся внешний IPv4, в ipv6address адрес IPv6 выбирается исходя из него же.

В настройках iptables должно быть разрешение на приём пакетов протокола ipv6 на внешний адрес IPv4.

Далее поднимается интерфейс tun6to4, ну и проверяется доступность чего-либо в IPv6.

Туннели 6to4 - это RFC 3964. Miredo - это реализация протокола Teredo, RFC 4380. 6to4 требует наличия внешнего адреса IPv4. Teredo не требует наличия внешнего адреса, и может работать через NAT. Через Teredo не получится получить симметричное соединение, т.е. доступ в IPv6 будет односторонний, на компьютер в общем случае извне подключиться не получится. И Teredo позволяет получить только адрес /32, т.е. для подключения сетей он мало пригоден.

этот раздел скопирован из письма рассылки community (c) Nikolay A. Fetisov 8 сентября 2011 12:03:30

Замечания о настройке VPN-подключения и туннелей

Часто при настройке VPN-подключения (под которыми здесь будут подразумеваться все туннельные подключения, то есть подключения поверх IP) не учитывают, что использование опции pppd 'defaultroute' маршрут по-умолчанию после подключения будет изменен. При этом, если VPN-сервер находится в другой, отличной от клиента, сети, то после подключения (и изменения маршрута по-умолчанию) VPN-сервер становится недоступным, следовательно, недоступными становятся все внешние адреса, и подключение, как правило, прекращается по тайм-ауту.

Решением, как обычно (и рекомендовано), служит указание отдельного маршрута на VPN-сервер (или его сеть). Для этого необходимо прописать (в примере - для маршрута через eth0) в /etc/net/ifaces/eth0/ipv4route строку вида:

10.0.1.0/24 via 10.0.0.1

В данном примере подразумевается, что VPN-сервер находится в сети 10.0.1.0/24 (например, имеет адрес 10.0.1.1), клиент — в сети 10.0.0.0/24 (и имеет адрес, например, 10.0.0.10), а маршрутизатор имеет адрес 10.0.0.1.

Теперь, при использовании опции 'defaulroute' для pppd (которая указывает, что необходимо изменить на вновь созданное подключение маршрут по-умолчанию), даже после замены маршрута по-умолчанию новым, сеть 10.0.1.0, в которой в нашем примере и находится VPN-сервер, останется доступной.

Как более точечный вариант (применяется в alterator-net-pptp 0.5.x) можно использовать скрипты ifup-pre и ifdown-post в каталоге конфигурируемого PPP-интерфейса.

Наример:

#!/bin/sh
# sample /etc/net/ifaces/ppp0/ifup-pre; replace variables yourself
ip route add VPN_SERVER via DEF_GW
#!/bin/sh
# sample /etc/net/ifaces/ppp0/ifdown-post; replace variables yourself
ip route del VPN_SERVER via DEF_GW

Не забудьте подставить нужные IP-адреса вместо VPN_SERVER и DEF_GW (не сеть, где VPN-сервер, а ее /32 префикс CIDR) и выполнить команду: chmod +x ifup-pre ifdown-post

Сложная маршрутизация (или несколько таблиц маршрутизации)

Под «сложной маршрутизацией» подразумевается наличие нескольких таблиц маршрутизации. Для их использования необходимо сконфигурировать правила ядра. В правилах по умолчанию можно увидеть следующее:

# ip rule show
0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default

Для настройки «сложной маршрутизациии» необходимо выполнить следующие операции:

Шаг 1 : Сами таблицы определены в файле /etc/iproute2/rt_tables. Для создания конфигурации «сложной маршрутизации» необходимо вначале «создать» нужные таблицы в этом файле (если вы хотите использовать имена таблиц, а не числа).

Шаг 2 : Необходимо заполнить таблицы. В конфигурационном каталоге интерфейса в файле ipv4route необходимо добавить маршрутные записи, не забывая указать table XX. Важно учитывать, что если строка начинается с режима ip route (add, del, replace, append, change), то по умолчанию будет использован режим DEFAULT_IPV4ROUTE_CMD (append).

Шаг 3 : Определить правила в файле ipv4rule. Здесь есть особенности, связанные автоматической заменой/добавлением параметров. Если строка не начинается с операции del или add, то нужный режим будет подставлен автоматически. Это подходит для тех случаев, когда вам при "поднятии" интерфейса необходимо добавить правила, а при "опускании" — удалить. Возможность указывать del или add реализована для обратных случаев: если при "поднятии" интерфейса вам необходимо удалить правила, а при "опускании" — добавить. В этом случае add и del будут в нужный момент автоматически заменены на del и add.

Пример такой конфигурации входит в /etc/net 0.7.12: (каталог документации examples/routing-LARTC-1/)

Простое переключение маршрутов

Пусть имеется eth-интерфейс, который используется постоянно, и настроен маршрут по умолчанию. Часто бывает необходимость настроить второй маршрут по умолчанию через беспроводной интерфейс, но с меньшей метрикой, чем у проводного интерфейса. В этом случае при поднятии WI-FI маршрут по умолчанию «развернется» в нужную сторону.

Например:

Для eth-интерфейса файл настроек /etc/net/ifaces/eth0/ipv4route будет таким:

default via 192.168.3.254 metric 10

а для WI-FI-интерфейса файл настроек /etc/net/ifaces/ath0/ipv4route таким:

default via 192.168.123.1 metric 5

Беспроводный Ethernet (или настройка WI-FI)

Большинство беспроводных интерфейсов сейчас представлено системе как интерфейсы Ethernet. Соответственно беспроводный интерфейс будет иметь TYPE=eth (#6283). Чтобы интерфейс нормально функционировал, необходимо кроме загрузки модуля с параметрами, воспользоваться утилитами iwconfig из пакета wireless-tools или wpa_supplicant из такого же пакета. Вместо того, чтобы запускать их вручную, можно поместить в конфигурационный каталог интерфейса файл iwconfig с командами iwconfig или файл wpa_supplicant.conf с конфигурацией wpa_supplicant. Они будут использованы автоматически.

Пример конфигурации (совместно с ndiswrapper):

Файл: /etc/net/ifaces/wlan0/options

TYPE=eth
MODULE=ndiswrapper
NEVER_RMMOD=yes
BOOTPROTO=dhcp
USE_HOTPLUG=no
ONBOOT=no

Файл: /etc/net/ifaces/wlan0/iwconfig

essid default
#key bababababa


Еще один пример использования etcnet для настройки беспроводной сети:

Файл: /etc/net/ifaces/wlan0/options

TYPE=eth
USE_HOTPLUG=NO
BOOTPROTO=static
module=ipw2200
WPA_DRIVER=wext

Файл: /etc/net/ifaces/wlan0/iwconfig

essid homenet
mode 1
ap 00:11:D8:22:AD:0D
channel 3
rate 11M

Файл: /etc/net/ifaces/wlan0/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1

network={
        ssid="homenet"
        scan_ssid=1
        key_mgmt=WPA-PSK
        psk="this is my mega secret password string to wpa supplicant"
}

Если вы хотите воспользоваться WPS:

  1. создайте /etc/net/ifaces/wlan0/wpa_supplicant.conf следующего вида:
ctrl_interface=/var/run/wpa_supplicant
update_config=1
  1. поднимите беспроводной интерфейс (ifup wlan0)
  2. запустите wpa_cli и дайте команды wps_pbc (после этого нужно соответственно нажать кнопку WPS на точке доступа и подождать окончания обмена данными) и save_config (для записи конфигурации в wpa_supplicant.conf). Или же можно воспользоваться утилитой wpa_gui, отображающей процесс более наглядно.

Пример файла /etc/net/ifaces/wlan0/wpa_supplicant.conf при подключении к сети, использующей протокол WPA2-PSK(AES)

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1

network={
        ssid="home-lg"
        bssid=00:1B:11:87:C7:EA
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP TKIP
        group=CCMP TKIP
        psk="this is my mega secret password string to wpa supplicant"
        priority=2
}

Настройка Infiniband

На сейчас ничем не отличается от настройки Ethernet, специфическая поддержка отсутствует (и для IP-over-IB не требуется). Пример конфигурации для Mellanox:

Файл: /etc/modules

mlx4_ib
ib_umad
ib_ipoib

Файл: /etc/net/ifaces/ib0/options

TYPE=eth
BOOTPROTO=dhcp
ONBOOT=yes

Использование автодополнения в sysctl.conf

В конфигурационном каталоге интерфейса может находиться файл sysctl.conf, в котором можно перечислить переменные sysctl(8). Но переменные могут быть как общесистемными, так и относящимися к интерфейсу. Естественно, запись в sysctl.conf настроек вида net.ipv4.conf.eth0.log_martians = 1 достаточно неудобна, а при переименовании интерфейса велик риск не отредактировать файл sysctl.conf соответствующим образом.

Эта проблема решается следующим способом : производится запись в файл только имени переменной и значение, а система /etc/net сама найдет путь к этой переменной и вызовет sysctl с полным именем.

Пример содержания файла sysctl.conf:

log_martians=1
rp_filter=1

Подключение к Wi-Fi с сертификатом на аппаратном токене

Для беспроводного подключения в корпоративных сетях могут использоваться сертификаты, записанные на аппаратном токене, например, Aladdin eToken. Для настройки такого подключения необходимо использовать /etc/net/ifaces/wlan0/wpa_supplicant.conf.

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
#eapol_version=1
#ap_scan=2
#fast_reauth=1
pkcs11_engine_path=/usr/lib/openssl/engines/engine_pkcs11.so
pkcs11_module_path=/usr/lib/libeTPkcs11.so
update_config=0

network={
        ssid="test"
        key_mgmt=WPA-EAP
        pairwise=CCMP TKIP
        group=CCMP TKIP
        eap=TLS
        identity="email@address.ru"
        engine_id="pkcs11"
        key_id="xxxxxxxxx"
        cert_id="xxxxxxxxx"
        engine=1
}

где key_id и cerd_id взяты из вывода команды

# pkcs11-tool --module /usr/lib/libeTPkcs11.so -O -l

Используются оригинальные ("родные") драйвера Aladdin - pkiclient-5.00.28-0, и пакет openssl-engine_pkcs11-0.1.5-alt1.

Профили конфигурации

Определение профилей

Профиль — именованный вариант конфигурации, в той или иной степени изменяющий базовую конфигурацию системы. Профили могут быть применены, например, для конфигурации ноутбука в разных сетевых окружениях, или при подготовке новой или тестовой конфигурации с возможностью быстрого возврата к старой. Практически профили реализуются следующим образом: для какого-либо из файлов, составляющих общесистемную конфигурацию или конфигурацию интерфейса, создаётся альтернативный вариант, который отличается добавлением в конце названия файла знака # и имени профиля.

Например, пусть единственное отличие между профилями заключается в том, какой модуль ядра будет загружен для интерфейса eth0. В этом случае файл /etc/net/ifaces/eth0/options необходимо скопировать в /etc/net/ifaces/eth0/options#profile1 и изменить значение переменной MODULE в одном из них. Далее при использовании конфигурации по умолчанию будет использован файл options, а при использовании профиля profile1 — файл options#profile1. Если при этом для назначения интерфейсу имени используется файл /etc/net/iftab, то скорее всего необходимо будет создать соответствующий файл /etc/net/iftab#profile1, так как другой модуль ядра указывает на другой физический интерфейс и исходный файл iftab работать не будет.

Профили могут использоваться также и для отключения каких-то параметров конфигурации. Например, если используется файл ipv4route для установки маршрутов для интерфейса, то можно создать файл нулевого размера ipv4route#profile2, чтобы при использовании профиля profile2 никаких маршрутов не конфигурировалось.

Выбор профиля при загрузке

Если при загрузке системы ядру был передан параметр netprofile, то его значение будет использовано как имя профиля по умолчанию. Это может быть использовано для создания собственных пунктов меню загрузчиков LILO и GRUB с заранее определённым профилем сетевой конфигурации. Заданный таким образом профиль может быть далее переопределён другими методами. Следует понимать разницу между различными конфигурациями и различными результатами применения одной конфигурации. Например, если в двух разных сетях используется DHCP, то смысла в разных профилях конфигурации нет.

Для загрузчика LILO секции /etc/lilo.conf могут выглядеть следующим образом:

image=/boot/vmlinuz-up
  label=linux-up home
  append=" netprofile=home"
  [...]
image=/boot/vmlinuz-up
  label=linux-up office
  append=" netprofile=office"
  [...]

Для приведённого примера необходимо будет создать варианты для файлов, отличающихся в профилях home и office, и можно будет выбирать при загрузке, какой из профилей необходимо использовать. Использование этого метода удобно, если смена сетевого окружения происходит синхронно с загрузкой системы.

Выбор профиля по умолчанию

Если требуется, чтобы определенный профиль конфигурации использовался по умолчанию, то необходимо записать его название в файл /etc/net/profile. Этот метод имеет приоритет над параметром ядра netprofile. Использование такого способа выбора профиля целесообразно, когда переключение между конфигурациями происходит реже, чем перезагрузка системы.

Смена профиля во время работы

Если требуется переконфигурировать сеть без перезагрузки или редактирования файла /etc/net/profile, то следует использовать параметры сервиса network, описанные в разделе restart, reload и другие команды. Этот метод имеет приоритет над профилем по умолчанию и профилем, выбранным при загрузке. Целесообразно его использовать, если смена сетевого окружения происходит чаще, чем перезагрузка системы.

Определение профиля во время конфигурации интерфейса

Если в каталоге конфигурации интерфейса существует исполняемый файл ненулевого размера с именем selectprofile, то этот файл будет выполнен и первое слово первой строки его стандартного вывода использовано как имя профиля, которое должно быть использовано для конфигурации данного интерфейса. Этот метод имеет приоритет над всеми остальными методами. Исходной задачей, требующей такого решения, являлось конфигурирование беспроводного интерфейса в зависимости от доступных точек доступа.

Следует учитывать, что число вызовов файла selectprofile может меняться в зависимости от контекста и время его выполнения может быть различным, поэтому при написании такого файла следует учитывать, что первым параметром будет являться имя текущего сценария. В настоящее время это могут быть ifup*, ifdown*, setup* и shutdown*. Для приведённого выше примера имеет смысл реагировать только на вызовы из ifup или ifup-common.

См. также

Примечания

  1. маска
    в битах
    маска
    точечно-
    десятичная
    /32 255.255.255.255
    /31 255.255.255.254
    /30 255.255.255.252
    /29 255.255.255.248
    /28 255.255.255.240
    /27 255.255.255.224
    /26 255.255.255.192
    /25 255.255.255.128
    /24 255.255.255.0
    /23 255.255.254.0
    /22 255.255.252.0
    /21 255.255.248.0
    /20 255.255.240.0
    /19 255.255.224.0
    /18 255.255.192.0
    /17 255.255.128.0
    маска
    в битах
    маска
    точечно-
    десятичная
    /16 255.255.0.0
    /15 255.254.0.0
    /14 255.252.0.0
    /13 255.248.0.0
    /12 255.240.0.0
    /11 255.224.0.0
    /10 255.192.0.0
    /9 255.128.0.0
    /8 255.0.0.0
    /7 254.0.0.0
    /6 252.0.0.0
    /5 248.0.0.0
    /4 240.0.0.0
    /3 224.0.0.0
    /2 192.0.0.0
    /1 128.0.0.0
  2. altbug #26498
  3. Выдержка из файла ip-cref.ps, который входит в документацию пакета iproute2:
    * broadcast ADDRESS
    
    the broadcast address on the interface.
    It is possible to use the special symbols '+' and '-' instead of the broadcast address. In this case, 
    the broadcast address is derived by setting/resetting the host bits of the interface prefix.
    NB. Unlike ifconfig, the ip utility does not set any broadcast address unless explicitly requested.