https://www.altlinux.org/api.php?action=feedcontributions&user=AndrewKornilov&feedformat=atomALT Linux Wiki - Вклад [ru]2024-03-29T05:05:17ZВкладMediaWiki 1.38.2https://www.altlinux.org/index.php?title=Etcnet&diff=11160Etcnet2009-05-12T22:23:53Z<p>AndrewKornilov: </p>
<hr />
<div>{{DISPLAYTITLE:etcnet}}<br />
{{span|font-size: 180%|Подсказки пользователю /etc/net}}<br />
<br />
Дополнительные страницы:<br />
* [[etcnet/qos|настройка QoS]]<br />
* [[etcnet/firewall|настройка сетевого экрана (firewall]])<br />
<!-- Не убирайте div-ы, на них есть внешние ссылки! --><br />
<div id="quickstart"></div><br />
<br />
== Быстрый старт ==<br />
<div id="docs"></div><br />
<br />
=== Где брать информацию ===<br />
Обращаю внимание, что начиная с версии 0.8.0 документация [http://etcnet.org/ /etc/net] переместилась из комментариев, рассеянных по множеству файлов, в несколько man-страниц. Список всех файлов документации пакета можно получить командой<br />
<pre>rpmquery -d etcnet</pre><br />
<br />
<div id="onecard"></div><br />
<br />
=== Как быстро настроить одну карту Ethernet ===<br />
# Создайте каталог <tt>/etc/net/ifaces/eth0</tt>. Это собственный каталог конфигурации данного интерфейса, в нём будут храниться файлы с настройками.<br />
# Определите, какой модуль необходим для вашей карты. Для этого можно использовать lspci, lspcidrake, pciscan. Затем<br />
# В каталоге конфигурации создайте файл <tt>options</tt>, в который впишите строку <pre>MODULE=<имя модуля></pre>. Больше ничего пока не добавляйте.<br />
# Выясните, какой IP-адрес должен быть назначен вашему интерфейсу. Если интерфейс конфигурируется по DHCP, то поместите в файл <tt>/etc/net/ifaces/eth0/options</tt> строку <tt>BOOTPROTO=dhcp</tt> и переходите к шагу 7. '''Замечание:''' в ряде случаев может также понадобиться <pre>DHCP_HOSTNAME=<имя машины без домена></pre>. Эта опция описана в man-странице <tt>etcnet-options</tt>. Также необходимо, чтобы была пустая строка в конце файла.<br />
# У вашего интерфейса есть два взаимосвязанных атрибута: 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## таблица соответствия сетевых масок в различных нотациях.<br />
# Выясните адрес вашего шлюза (маршрут по умолчанию). Например, этот IP-адрес — 10.0.0.254. Создайте файл <tt>/etc/net/ifaces/eth0/ipv4route</tt>, в который поместите строку <pre>default via 10.0.0.254</pre><br />
# Убедитесь, что всё выполнено правильно, выполнив команду <tt>service network restart</tt>. Ваш интерфейс должен быть успешно сконфигурирован. Если вы конфигурировали использование DHCP, но адрес интерфейсу не назначается, просмотрите <tt>/var/log/messages</tt>.<br />
<br />
<div id="ifplugd"></div><br />
<br />
=== Как настроить ifplugd ===<br />
С версии 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>.<br />
<br />
<div id="ppp"></div><br />
<br />
=== Как настроить интерфейс PPP ===<br />
Для настройки обычного модемного PPP-соединения вам нужно:<br />
# Создать каталог конфигурации, например, <tt>/etc/net/ifaces/ppp5</tt>. Сейчас вы не можете использовать что-либо кроме pppN или pppNN или pppNNN и т. п.<br />
# Прочесть <tt>/etc/net/ifaces/default/options-ppp</tt><br />
# Создать файлы конфигурации. Скорее всего вам понядобятся pppconnect и pppdisconnect, чтобы pppd знал, как дозваниваться и соединяться. Это скрипты для программы chat(8). Кроме этого в файле pppoptions можно (а зачастую нужно) перечислить опции pppd(8), определяющие способ авторизации, скорость и название порта и т. п.<br />
# Заполнить <tt>/etc/ppp/chap-secrets</tt> или <tt>/etc/ppp/pap-secrets</tt>.<br />
<br />
<div id="ppp-pptp-pppoe"></div><br />
<br />
=== Как настроить интерфейс PPtP или PPPoE ===<br />
Хотя PPtP-соединения могут быть настроены и как обычные PPP-соединения, в [http://etcnet.org/ /etc/net] версии 0.7.10 для удобства пользователей была введена опция PPPTYPE. Она может принимать следующие значения:<br />
* dialup: обычный PPP-интерфейс.<br />
* pppoe: интерфейс PPPoE. Для такого интерфейса необходимо в опции HOST указывать имя Ethernet-интерфейса, через который будет производиться работа PPPoE. Побочным положительным эффектом будет то, что этот интерфейс будет при необходимости автоматически подниматься (см. ##FTN requires##).<br />
* pptp: интерфейс PPtP. Для такого интерфейса необходимо в опции PPTP_SERVER указывать имя хоста или IP-адрес PPtP-сервера, к которому будет производиться подключение. Обратите внимание, что хотя такие интерфейсы не имеют опции HOST, в большинстве случаев имеет смысл указать в опции REQUIRES интерфейс, через который будет достижим хост, указанный в PPTP_SERVER.<br />
<br />
См также [[#vpn|VPN]]<br />
<div id="DNSandPPP"></div><br />
<br />
=== DNS и PPP-соединения ===<br />
<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><br />
<br />
Довольно долгое время существовала проблема неправильной модификации /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><br />
Если этой строки нет, то в файле не будут модифицироваться строки nameserver, если только какая-нибудь программа типа kppp это не сделает специально. Если такая строка есть, то <tt>/etc/resolv.conf</tt> будет модифицироваться в зависимости от значения булевской переменной RESOLV_MODS, которую необходимо задавать в файле <tt>/etc/sysconfig/network</tt>.//<br />
<br />
<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 в этом файле.<br />
<br />
<div id="restartreload"></div><br />
<br />
=== restart, reload и другие команды ===<br />
У сервиса network имеется ряд команд:<br />
* start: запустить все стационарные интерфейсы. hotplug-интерфейсы будут сконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* startwith <имя профиля>: start с указанным именем профиля, а не определённым автоматически.<br />
* stop: остановить все стационарные интерфейсы. hotplug-интерфейсы будут расконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* stopwith <имя профиля>: stop с указанным именем профиля, а не определённым автоматически.<br />
* restart: эквивалентно stop с последующим start, как и в большинстве других сервисов.<br />
* restartwith <имя профиля>: рестарт в контексте указанного профиля, эквивалентно stopwith <имя профиля> и startwith <имя профиля>.<br />
* switchto <имя профиля>: переключение в указанный профиль, эквивалентно stop и startwith <имя профиля>.<br />
* reload: семантически обозначает «актуализировать текущую конфигурацию». Для всех сконфигурированных в настоящий момент интерфейсов будет выполнена реконфигурация при наличии конфигурации.<br />
* check: автоматическая проверка конфигурационной базы.<br />
<br />
<div id="bootproto"></div><br />
<br />
=== Протоколы конфигурации адресов ===<br />
С помощью опции BOOTPROTO вы можете управлять тем, как у интерфейса будут появляться адреса и маршруты (это относится только к протоколу IPv4, так как IPv6 и IPX приобретают адреса только статически).<br />
* static — адреса и маршруты будут взяты из <tt>ipv4address</tt> и <tt>ipv4route</tt>.<br />
* dhcp — интерфейс будет сконфигурирован по DHCP.<br />
* ipv4ll — интерфейс будет сконфигурирован с помощью IPv4LL (link-local), ранее известному как ZCIP (zeroconf IP). Это значит, что из сети 169.254.0.0/16 будет подобран ещё не использованный адрес и назначен на интерфейс.<br />
Существует несколько комбинированных способов:<br />
* dhcp-static — если конфигурация по DHCP не удалась, конфигурировать методом static.<br />
* dhcp-ipv4ll — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll.<br />
* dhcp-ipv4ll-static — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll. Если и это не удалось, конфигурировать методом static.<br />
<br />
<div id="internals"></div><br />
<br />
== Почему всё так устроено ==<br />
<div id="generalinfo"></div><br />
<br />
=== Общие сведения ===<br />
[http://etcnet.org/ /etc/net] — немного больше, чем кажется на первый взгляд. Несмотря на это, [http://etcnet.org/ /etc/net] остаётся системой конфигурации сети в Linux, то есть должна позволить вам сконфигурировать вашу сеть без трюков и особого напряжения. Если вы всё же читаете эту страницу, то у вас, вероятно, возникли трудности с её использованием.<br />
<br />
Для начала я дам ряд утверждений, от которых можно оттолкнуться:<br />
# У проекта есть сайт, на котором можно найти примеры конфигурации и тексты, претендующие на звание документации: [http://etcnet.org/ http://etcnet.org/]<br />
# [http://etcnet.org/ /etc/net] интегрирован в ALTLinux Sisyphus в виде пакетов:<br />
#* etcnet (базовые сценарии)<br />
#* etcnet-full (виртуальный пакет с зависимостями на все пакеты, которые могут использоваться сценариями [http://etcnet.org/ /etc/net], с указанием их точных версий)<br />
#* etcnetconf ('''прототип''' конфигуратора)<br />
#* etcnet-defaults-desktop (умолчания для рабочей станции)<br />
#* etcnet-defaults-server (умолчания для сервера)<br />
# Пакеты etcnet и net-scripts — две конфликтующие реализации такой сущности, как «подсистема конфигурации сети» (network-config-subsystem).<br />
# При установке etcnet вместо net-scripts или наоборот сервис network оказывается выключенным. Это означает, что при загрузке системы сеть не будет сконфигурирована, проверить это можно командой <tt>chkconfig --list network</tt>. Для быстрого исправления проблемы можно дать команду <tt>chkconfig network reset</tt>.<br />
# etcnet '''НЕ''' импортирует автоматически настройки net-scripts. Если вы только что установили etcnet и ваши сетевые интерфейсы всё ещё остаются сконфигурированными (несмотря на уже отсутствующий пакет net-scripts), то вы можете запустить сценарий <tt>/etc/net/scripts/initconf</tt>. Он попытается проанализировать текущее состояние интерфейсов и выведет вам результат. Никаких файлов при этом записано не будет. Если вам понравится вывод initconf, запустите его с параметром write и он проделает то же самое, но уже с сохранением конфигурации.<br />
# Для корректной работы системы в целом необходимо, чтобы содержимое файла <tt>/etc/sysconfig/network</tt> было корректным.<br />
# Переменные 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]).<br />
<br />
<div id="options.d"></div><br />
<br />
=== Как организованы опции по умолчанию ===<br />
Методология [http://etcnet.org/ /etc/net] предусматривает несколько шагов наследования опций, первый из которых — загрузка опций по умолчанию. Раньше это происходило из одного файла <tt>/etc/net/options</tt>, сейчас же в нашем распоряжении есть каталог <tt>/etc/net/options.d</tt>, из которого будут последовательно прочитаны все файлы.<br />
<br />
Смысл этого нагромождения следующий: оригинальный архив etcnet содержит только файл <tt>/etc/net/options.d/00-default</tt>.<br />
<br />
Упаковщик etcnet в какой-либо дистрибутив вместо того, чтобы прикладывать патч, просто добавляет файл с бОльшим номером, который переопределяет нужные опции.<br />
<br />
Администратору системы может не понравиться дистрибутивный набор, в этом случае он создаст файл с ещё более высоким номером и определит умолчания для своей системы. В результате такого подхода:<br />
# Уменьшается количество патчей (хотя их свойство отваливаться бывает полезным).<br />
# Не изменяются файлы с опциями, принадлежащие пакету. Это делает обновление пакета намного более корректным.<br />
# Сразу видно, на каком этапе какие опции переопределяются.<br />
<br />
<div id="iftab"></div><br />
<br />
=== Зачем нужен iftab ===<br />
Имена сетевых интерфейсов по умолчанию, как правило, содержат их тип (eth, ppp, wifi, ipsec) и индекс: 0 для первого созданного интерфейса, 1 для второго и т. д. При этом соответствие автоматически назначенных имён физическим устройствам может не сохраняться.<br />
<br />
Эта особенность неудобна, когда машина с Linux имеет более одного интерфейса каждого типа. Типичными примерами являются маршрутизаторы и ноутбуки. В маршрутизаторах, как правило, используются однотипные сетевые карты и при их замене или изменении порядка на PCI-шине соответствие оказывается нарушенным. В ноутбуках используются ethernet и wifi-устройства с горячим подключением, при этом слотов и карт может быть более чем 1. В этом случае пользователь скорее всего пожелает закрепить за каждой сменной картой её конфигурацию.<br />
<br />
[http://etcnet.org/ /etc/net] при конфигурации интерфейса использует то имя, под которым он сконфигурирован, а именно имя каталога, в котором хранятся файлы конфигурации интерфейса.<br />
<br />
Для привязки сетевой карты к имени интерфейса в простых случаях можно воспользоваться файлом <tt>/etc/iftab</tt>, man-страница по формату которого входит в пакет <tt>ifrename</tt> (man 5 iftab).<br />
<br />
Использование <tt>/etc/iftab</tt> удобно, поскольку позволяет сохранять традиционные имена интерфейсов (например, eth0), но этот механизм не поддерживает расширенную функциональность <tt>/etc/net</tt> (в частности, ''профили'' /etc/net).<br />
<br />
Средством, позволяющим использовать все возможности <tt>etcnet</tt>, является файл <tt>/etc/net/iftab</tt>, обрабатываемый не утилитой <tt>ifrename</tt>, а непосредственно <tt>etcnet</tt>. Синтаксис этого файла совпадает с синтаксисом <tt>/etc/iftab</tt>. Ограничением же является невозможность использовать стандартные имена интерфейсом (<tt>ethX</tt>, <tt>pppX</tt>), так как переименование интерфейсов происходит уже после конфигурации интерфейса ядром. В случае, если вам необходим <tt>/etc/net/iftab</tt>, имеет смысл переименовать интерфейсы, давая им либо двухзначные номера (<tt>eth00</tt>, <tt>eth01</tt>...), либо осмысленные названия (<tt>isplink</tt>, <tt>lan</tt>...)<br />
<br />
См. письмо про [http://lists.altlinux.org/pipermail/sisyphus/2009-March/337924.html важность /etc/iftab]<br />
и тж. это письмо про [http://lists.altlinux.org/pipermail/devel/2007-October/065097.html отличия etcnet и сервиса ifrename]:<br />
{{начало цитаты}}И сразу позволю себе прокомментировать другие письма этого треда:<br />
<br />
1. «etcnet уже научился менять местами eth0 и eth1?»<br />
<br />
Освоение этого фокуса обладает сомнительной пользой. Я по-прежнему<br />
рекомендую рассматривать eth0 как временное имя с малым сроком жизни,<br />
а для повышения комфорта пользователей Ethernet-интерфейсы предлагаю<br />
называть eth00, eth01, eth02 etc.<br />
<br />
2. «Существование (номинальное) net-scripts вынуждает поддерживать<br />
ряд сервисов, которые иначе могли бы быть упразднены»<br />
<br />
Эти сервисы можно обезвредить контролем CONFMETHOD<br />
из /etc/sysconfig/network. При этом зависимости на пакет etcnet<br />
не возникнет, только на network-config-subsystem. Примеры таких<br />
пакетов должны быть в Sisyphus.<br />
<br />
3. «после приведения в порядок /etc/udev/rules.d/19-udev-ifrename.rules<br />
нужности в /etc/net/iftab я не заметил»<br />
<br />
Важнейшее принципиальное отличие /etc/net/iftab от /etc/iftab —<br />
нахождение /etc/net/iftab в специальном пространстве имён. Для него<br />
действуют механизмы определения профиля и хоста конфигурации. Это,<br />
например, позволит _желающим_ составить конфигурацию так, что срочный<br />
ремонт маршрутизатора сведётся к переносу диска (или массива)<br />
из сгоревшего шасси в запасное. Возможны и другие примеры, которые<br />
станут невозможными при помещении iftab в /etc и его лобовой<br />
интерпретации.<br />
<br />
Конечно, пользователю единственного ноутбука с одним-двумя сетевыми<br />
интерфейсами такая практика — полный overkill, но его никто и не<br />
заставляет видеть всю подводную часть. В этом и гибкость.{{конец цитаты}}<br />
<br />
<div id="specifaces"></div><br />
<br />
=== Интерфейсы lo, default и unknown ===<br />
Сразу после установки в каталоге <tt>/etc/net/ifaces</tt> (в котором хранятся конфигурации интерфейсов) можно обнаружить три каталога: lo, default и unknown.<br />
<br />
Интерфейс lo — стандартная петля, которая должна быть во всякой Linux-системе, поэтому конфигурация для него включена по умолчанию. В остальном он ничем не отличается от любого другого интерфейса и конфигурируется точно так же файлами options и ipv4address.<br />
<br />
Интерфейс default — вовсе не интерфейс. Это специальный каталог, файлы в котором обрабатываются следующим образом:<br />
* resolv.conf — если присутствует, то копируется в <tt>/etc/resolv.conf</tt>.<br />
* options — файл опций, читается после опций по умолчанию. Этот файл содержит комментарии.<br />
* options-<вид интерфейса> — этот файл содержит опции, специфичные для данного вида интерфейсов. Какие-то из них необязательны и позволяют использовать особенности данного вида интерфейсов, например, LINKDETECT в options-eth; другие обязательны, например, HOST в options-bri. Эти файлы содержат комментарии. Обратите внимание, что эти файлы лучше не редактировать. Если вам нужно задать опцию для интерфейса, то как правило это можно сделать в файле options в конфигурационном каталоге данного интерфейса. Это облегчит процесс обновления пакета etcnet.<br />
* sysctl.conf-<вид интерфейса> — файл с переменными sysctl, которые необходимо изменить. Сейчас единственный такой файл — sysctl.conf-dvb, который отключает return path filter, что всегда нужно в случае асимметричной маршрутизации.<br />
* iplink-<вид интерфейса> — файл с командами iplink, специфичными для данного вида.<br />
* selectprofile — если этот файл исполняемый, то он будет вызван из сценариев ifup/ifdown, setup/shutdown для того, чтобы вернуть на стандартном выводе имя профиля, которое необходимо использовать. Это позволяет автоматически переключать профили в зависимости от каких-либо условий. В поставку включен комментированный пример сценария: <tt>/etc/net/ifaces/default/selectprofile</tt>.<br />
* fw — каталог с настройками сетевого экрана по умолчанию.<br />
<br />
Интерфейс unknown — специальная конфигурация, которая будет использована в том случае, когда [http://etcnet.org/ /etc/net] просят сконфигурировать hotplug-интерфейс, для которого не существует каталога конфигурации. Это будет работать только в том случае, если включена опция ALLOW_UNKNOWN.<br />
<br />
<div id="broadcast"></div><br />
<br />
=== О загадочном broadcast ===<br />
Периодически возникает вопрос: почему после старта [http://etcnet.org/ /etc/net] при запуске ifconfig можно видеть Bcast:0.0.0.0, хотя при использовании net-scripts это поле было правильным? Дело в том, что net-scripts оперируют адресом, маской, адресом сети и широковещательным адресом, пытаясь определить неизвестные компоненты из известных, а <tt>config-ipv4</tt> просто передаёт утилите ip содержимое файла ipv4address, не заботясь о его содержимом. Хорошо ли это или плохо? Я думаю, что скорее хорошо.<br />
<br />
Во-первых, если iproute2 изменит свой синтаксис, то с большой вероятностью править придётся только конфигурационные файлы.<br />
Во-вторых, я пока не встречал проблем с «отсутствующим» broadcast address. Он есть в таблице маршрутизации local. В-третьих, вы всегда можете назначить адрес broadcast в файле ipv4address. Проще всего это сделать с помощью выражения <tt>broadcast +</tt>##LINKTOFTN ftnd2##.<br />
Обновление: в версии 0.8.0 появилась опция <tt>AUTO_BROADCAST</tt> для автоматического дополнения каждой строки <tt>ipv4address</tt>.<br />
<br />
<div id="never_rmmod"></div><br />
<br />
=== О ядре 2.6 и пропадающих интерфейсах ===<br />
Иногда жалуются, что если два интерфейса используют один и тот же модуль ядра и у них определена опция MODULE (то есть скрипты [http://etcnet.org/ /etc/net] сами загружают и выгружают модули), то при опускании одного интерфейса пропадает и второй. Почти наверняка используется ядро 2.6, особенностью которого являются странные значения счётчика ссылок (третий столбец вывода lsmod). Когда он оказывается равен нулю (довольно часто), скрипты могут попытаться выгрузить модуль интерфейса, для которого запущен ifdown. И у них получится, несмотря на то, что другой интерфейс, использующий этот же модуль, находится в состоянии UP.<br />
<br />
Чтобы заблокировать выгрузку модулей, можно использовать булевскую переменную NEVER_RMMOD. Возможно, позже это будет происходить автоматически для таких странных ядер.<br />
<br />
<div id="removables"></div><br />
<br />
=== О hotplug-интерфейсах и не только ===<br />
Часто задают вопросы об опции USE_HOTPLUG, причём задают в контексте уже установленной кем-то USE_HOTPLUG=yes. Я попробую объяснить, зачем нужна эта опция и как её правильно использовать. Есть несколько сценариев конфигурации сети.<br />
<br />
Первый и самый простой — выполнение <tt>service network start</tt> при старте системы или вручную. При этом требуется только сформировать погруппные (потиповые) списки интерфейсов, подлежащих обработке, и последовательно выполнить требуемые действия. Модули ядра при этом загружаются сценариями [http://etcnet.org/ /etc/net], при этом имена модулей берутся из опции MODULE (кстати, в этой опции можно перечислить несколько имён и они будут последовательно загружены, только не забудьте взять список в кавычки). Это мой любимый метод конфигурации, он лучше всего подходит для маршрутизаторов. Преимущество его в том, что вся необходимая информация сконцентрирована в одном месте — каталоге <tt>/etc/net</tt>. Если опция MODULE не определена, то будет предпринята попытка загрузки по имени интерфейса в надежде на правильно заполненный <tt>/etc/modules.conf</tt>.<br />
<br />
Второй сценарий — реакция на событие ifplugd. Раньше существовала путаница, так как требовалась синхронная настройка сервиса ifplugd, но сейчас логика работы более определена, так как [http://etcnet.org/ /etc/net] взяла управление ifplugd на себя. В части загрузки модуля этот сценарий не отличается от первого.<br />
<br />
Третий сценарий — реакция на появление или исчезновение сменного устройства. Для обработки таких событий предназначены сценарии <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).<br />
<br />
Предположим, вам необходимо настроить действительно сменную карту. После заполнения <tt>/etc/iftab</tt> или <tt>/etc/net/iftab</tt> в файле options необходимо будет задать USE_HOTPLUG=yes. После этого при получении события от hotplug [http://etcnet.org/ /etc/net] будет работать в том контексте, что модуль в загрузке и выгрузке не нуждается. Кроме того, '''такой интерфейс будет пропущен при обычном старте сети'''. Почему? Потому, что если он сменный, то единственный достоверный способ узнать, что он присутствует — получить вызов от hotplug. Из факта выполнения <tt>service network start</tt> совсем не следует, что какой-то один или несколько из сконфигурированных hotplug-интерфейсов сейчас в наличии и требует конфигурации. Если вы хотите вручную расконфигурировать hotplug-интерфейс до его извлечения, дайте команду ifdown. Для повторной конфигурации вставьте его ещё раз.<br />
<br />
Также существует опция USE_PCMCIA. Если события для вашей карты генерирует pcmcia-cs, то вам нужно её включить. Если события генерируются только hotplug, то используйте опцию USE_HOTPLUG.<br />
<br />
<div id="eth0"></div><br />
<br />
=== В каких случаях eth0 вреден ===<br />
При использовании файла <tt>/etc/net/iftab</tt>, то есть в случае применения сложных конфигураций, возникает следующая проблема:<br />
* При загрузке модулей имена интерфейсов принимают вид eth0, eth1, eth2… Какие именно — в общем случае контролировать нельзя.<br />
* Имя eth0 обладает наибольшей вероятностью оказаться занятым.<br />
* ifrename не может переименовать интерфейс, если целевое имя уже занято (udev использует хак — <tt>ifrename -t</tt>, но это не работает после начальной загрузки, см. man-страницу ifrename)<br />
С учётом этого, если <tt>/etc/net/iftab</tt> содержит тот же набор имён интерфейсов, что уже имеется после загрузки модулей (то есть <tt>eth0</tt>/<tt>eth1</tt> и другие «стандартные» названия), то единственный случай, когда etcnet сможет без ошибок обработать такой файл — изначальное соответствие, не требующее переименования.<br />
<br />
Таким образом, при использовании <tt>/etc/net/iftab</tt> имеет смысл давать интерфейсам названия, отличные по виду от тех, что назначает ядро. В простых случаях проще использовать <tt>/etc/iftab</tt>.<br />
<br />
<div id="advanced"></div><br />
<br />
== Расширенные возможности ==<br />
<div id="multipleIPs"></div><br />
<br />
=== Несколько IP-адресов или маршрутов на одном интерфейсе ===<br />
Вы можете помещать произвольное количество IP-адресов в файл ipv4address по одному адресу на каждой строке. То же самое относится к статическим маршрутам и файлу ipv4route.<br />
<br />
Обратите внимание, что [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><br />
<br />
<div id="requires"></div><br />
<br />
=== Зависимости между интерфейсами ===<br />
У интерфейсов vlan, bond, bri и teql, входящих в группу зависимых физических, должна быть определена опция HOST со списком интерфейсов, необходимых для инициализации текущего интерфейса. Если хост-интерфейс не сконфигурирован при поднятии зависимого интерфейса, то это будет исправлено.<br />
<br />
Кроме обязательной для определённых интерфейсов опции HOST может быть задана необязательная для всех остальных интерфейсов опция REQUIRES. Интерфейсы, перечисленные в этой опции, будут считаться зависимостями текущего интерфейса. По умолчанию попытка сконфигурировать интерфейс А, который зависит от Б и В, приведёт сначала к конфигурации Б и В. Аналогично, при расконфигурации Б или В сначала будет расконфигурирован А.<br />
<br />
Зависимость одного интерфейса от другого не всегда формальна. Например, в сценарии ifup-pre одного интерфейса может использоваться команда, которая потребует разрешения DNS-имени, которое может быть разрешено только с помощью resolv.conf, инсталлируемого другим интерфейсом. Или это может быть PPPoE/PPtP-интерфейс, требующий Ethernet-интерфейс для работы.<br />
<br />
Для того, чтобы избежать неожиданных сбоев в таких случаях, правильно задавайте опцию REQUIRES.<br />
<br />
<div id="postpre"></div><br />
<br />
=== Как использовать свои сценарии post и pre ===<br />
Вы можете поместить в каталог конфигурации интерфейса файлы, которые будут выполнены в определённые моменты. Для этого они должны быть исполняемыми и называться следующим образом:<br />
* <tt>ifup-pre</tt> — для выполнения перед конфигурированием интерфейса.<br />
* <tt>ifup-post</tt> — для выполнения после конфигурирования интерфейса. Например, можно запустить почтовую систему.<br />
* <tt>ifdown-pre</tt> — для выполнения перед расконфигурированием интерфейса. Например, можно остановить почтовую систему.<br />
* <tt>ifdown-post</tt> — для выполнения после расконфигурирования интерфейса.<br />
Также в версии до 0.8.0 вы можете использовать следующие сценарии (они должны быть исполняемыми):<br />
* <tt>/etc/net/scripts/ifup-pre-local</tt><br />
* <tt>/etc/net/scripts/ifup-post-local</tt><br />
* <tt>/etc/net/scripts/ifdown-pre-local</tt><br />
* <tt>/etc/net/scripts/ifdown-post-local</tt><br />
Они будут вызваны для *каждого* интерфейса. Начиная с версии 0.8.0 эти сценарии называются так:<br />
* <tt>/etc/net/ifup-pre</tt><br />
* <tt>/etc/net/ifup-post</tt><br />
* <tt>/etc/net/ifdown-pre</tt><br />
* <tt>/etc/net/ifdown-post</tt><br />
Семантика сохранена.<br />
<br />
<div id="iplink"></div><br />
<br />
=== Как управлять канальными параметрами интерфейсов ===<br />
Если вы поместите в конфигурационный каталог интерфейса файл iplink, в котором в каждой строке будут записаны команды режима link утилиты ip, то они будут выполнены при конфигурации интерфейса. Например, если вы желаете, чтобы интерфейс net1 имел MAC-адрес aa:bb:cc:dd:ee:ff и MTU 200 байт, то в файл <tt>/etc/net/ifaces/net1/iplink</tt> нужно поместить следующее:<br />
<pre>address aa:bb:cc:dd:ee:ff<br />
mtu 200</pre><br />
Обратите внимание, что в этом случае в <tt>/etc/net/iftab</tt> вам необходимо будет использовать селектор businfo или driver вместо mac.<br />
<br />
<div id="ethtool"></div><br />
<br />
=== Как управлять физическими параметрами интерфейсов ===<br />
Если вы поместите в конфигурационный каталог интерфейса файл ethtool, в котором будет строка с параметрами программы ethtool, то она будет выполнена при конфигурации интерфейса. Например, если вы желаете, чтобы интерфейс net1 имел скорость 10Мбит и авто-согласование скорости было отключено, то в файл <tt>/etc/net/ifaces/net1/ethtool</tt> нужно поместить следующее:<br />
<pre>speed 10 autoneg off<br />
</pre><br />
<br />
<div id="bridge"></div><br />
<br />
=== Как настроить Ethernet-мост ===<br />
<br />
Для настройки Ethernet-моста (bridge, допустим интейфейс будет называться br0) надо, создав каталог ifaces/br0, создать там файлы со следующими данными:<br />
<br />
* <tt>brctl</tt>:<br />
stp AUTO on<br />
<br />
* <tt>ipv4address</tt>:<br />
192.168.100.200/24<br />
<br />
* <tt>options</tt>:<br />
TYPE=bri<br />
HOST='eth0 tap0'<br />
BOOTPROTO=static<br />
<br />
содержимое файла brctl передастся утилите brctl. AUTO означает, что скрипт setup-bri самостоятельно определит имя bridge-интерфейса (см. README.bridge в каталоге doc пакета etcnet).<br />
ipv4address установит ip-адрес для интерфейса как обычно.<br />
в опции HOST файла options нужно указать те интерфейсы, которые будут входить в мост. Если в него будут входить интерфейсы, которые до этого имели ip-адрес (например, eth0), то этот адрес должен быть удален (например, можно закомментировать содержимое файла ifaces/eth0/ipv4address).<br />
<br />
С пакетом etcnet поставляются примеры конфигурации. Один из них показывает, как из двух ethernet-интерфейсов port0 и port1 можно собрать мост bridge: [http://etcnet.org/examples/Ethernet-bridge-GRE/ http://etcnet.org/examples/Ethernet-bridge-GRE/]<br />
<br />
Безотносительно к etcnet, стоит помнить про проблему, связанную с NAT:<br />
http://bugzilla.kernel.org/show_bug.cgi?id=13079<br />
<br />
<div id="vlan"></div><br />
<br />
=== Как настроить VLAN ===<br />
<br />
Для настройки 802.1q VLAN (например, id 4094 на eth1) следует, создав каталог ifaces/eth1.4094, поместить в него файлы со следующим содержимым:<br />
<br />
* <tt>ipv4address</tt>:<br />
192.168.100.200/24<br />
<br />
* <tt>options</tt>:<br />
TYPE=vlan<br />
HOST=eth1<br />
VID=4094<br />
BOOTPROTO=static<br />
<br />
Содержимое переменных HOST и VID будет передано утилите vconfig; использование файла vlantab необязательно (и не рекомендуется по причине невозможности использовать ifup для отдельного интерфейса). Пример конфигурации: [http://etcnet.org/examples/VLAN-without-vlantab/ http://etcnet.org/examples/VLAN-without-vlantab/]<br />
<br />
Следует обратить внимание, что 4094 является верхней допустимой границей идентификатора валидного VLAN, а [http://www.candelatech.com/pipermail/vlan/2004-November/000128.html 4095 используется технически в процессе отбрасывания трафика по неверным VLAN]. (следует отметить, что это не ограничение Linux: [http://en.wikipedia.org/wiki/802.1Q в стандарте под VID отведено 12 бит])<br />
<br />
'''Для настройки Q-in-Q интерфейса''', скажем, eth1.123.513 (дважды тегированный трафик: внешняя метка -- 123, внутренняя -- 513) нужно файл <tt>options</tt> в каталоге <tt>ifaces/eth1.123.513</tt> заполнить примерно так:<br />
<br />
* <tt>options</tt>:<br />
TYPE=vlan<br />
HOST=eth1.123 # "родительский" интерфейс; может называться иначе<br />
VID=513<br />
VLAN_REORDER_HDR=0<br />
BOOTPROTO=static<br />
<br />
Разумеется, родительский интерфейс должен быть сконфигурирован (можно с или без BOOTPROTO, с или без ipv4address и т.п.).<br />
<br />
Таким образом можно каскадировать интерфейсы "как угодно глубоко" (Q-in-Q-in-Q-in-Q....). Необходимо только учесть, что длина имени интерфейса ограничена (16-ю символами).<br />
<br />
<div id="tun/tap"></div><br />
<br />
=== Настройка tun/tap интерфейса ===<br />
<br />
Etcnet поддерживает простое создание интерфейсов типа tun/tap. Это виртуальный тип интерфейсов для передачи пакетов между ядром и программами, который не передает данных через физические устройства.<br />
tun — это интерфейс типа point-to-point, работающий с кадрами IP, tap — интерфейс типа ethernet, работающий с кадрами ethernet.<br />
Потребуется использование утилиты tunctl, находящейся в одноименном пакете.<br />
Для настройки tun/tap интерфейса (допустим, интейфейс будет называться tap0) надо, создав каталог ifaces/tap0, создать там файл со следующими данными:<br />
<br />
* <tt>options</tt>:<br />
TYPE=tuntap<br />
TUNTAP_USER=combr<br />
<br />
<tt>TUNTAP_USER</tt> — это аккаунт или цифровой id пользователя, которому будут даны права на использование интерфейса tap0 (устройство /dev/net/tun).<br />
Этот параметр будет передан утилите tunctl как аргумент опции -u (см. man tunctl).<br />
С версии ядра 2.6.18 произошли изменения в управлении этим типом интерфейсов:<br />
<br />
{{Начало цитаты}}<br />
В 2.6.18 действительно произошли изменения, потребовавшие<br />
обязательного применения tunctl для разрешения доступа обычных<br />
пользователей к tap-интерфейсам. В предыдущих версиях любой<br />
пользователь, имеющий доступ к /dev/net/tun, мог создать любое<br />
количество сетевых интерфейсов с произвольными именами. Начиная с<br />
2.6.18, для создания интерфейса через /dev/net/tun требуется<br />
CAP_NET_ADMIN (обычно эту привилегию имеет только root), а обычный<br />
пользователь, имеющий доступ к /dev/net/tun, может только использовать<br />
уже созданные интерфейсы, к которым разрешён доступ для его uid.<br />
{{Конец цитаты|источник=Сергей Власов}}<br />
<br />
<div id="iptun"></div><br />
<br />
=== Настройка и использование IP-туннелей ===<br />
IP-туннели — средство, позволяющее при умелом использовании улучшить IP-сети. Поддерживаются IP-туннели трёх видов: IPIP, GRE и SIT. Прежде всего необходимо определиться, какой вид туннеля вам необходим. Туннели IPIP — самые простые. Обратите внимание, что IPIP-туннели не могут передавать multicast-пакеты, соответственно, OSPF на таких интерфейсах работать не будет.<br />
<br />
Туннели GRE (general incapsulation) обычно используются в маршрутизаторах Cisco. По туннелям этого типа могут передаваться broadcast и multicast пакеты, кроме того, эти туннели поддерживают контрольные суммы и контроль упорядоченности пакетов. Также GRE-туннели обладают опциональным атрибутом key в виде произвольного 4-байтового числа, который позволяет конфигурировать несколько GRE туннелей между одной парой IP-адресов несущей сети (в отличие от IPIP-туннелей, с которыми это невозможно).<br />
<br />
Туннели SIT предназначены для транспортировки пакетов IPv6 через сети IPv4.<br />
<br />
Тип туннеля определяется опцией TUNTYPE (ipip, gre, sit). По умолчанию TUNTYPE=ipip. Кроме типа туннеля для конфигурации всегда требуется адрес удалённого хоста и почти всегда — локальный адрес. Эти адреса определяются опциями TUNREMOTE и TUNLOCAL соответственно. В некоторых случаях локальный адрес можно не указывать. В этом случае опция TUNLOCAL всё равно обязательна, но принимает значение any. Не забудьте назначить туннельному интерфейсу адреса и маршруты в соответствущих файлах.<br />
<br />
Пример: для конфигурации GRE-туннеля между 10.0.1.2 и 10.0.2.3 с двумя ключами для исходящих и входящих пакетов, проверкой очерёдности пакетов, TTL 8 и вычислением контрольных сумм. Туннель должен использовать только интерфейс gw1. Файл <tt>/etc/net/ifaces/mytunnel/options</tt> будет следующим:<br />
<source lang="ini"><br />
TYPE=iptun<br />
TUNTYPE=gre<br />
TUNLOCAL=10.0.1.2<br />
TUNREMOTE=10.0.2.3<br />
TUNTTL=8<br />
HOST=gw1<br />
TUNOPTIONS='seq ikey 2020 okey 2030 csum'<br />
</source><br />
<br />
<div id="vpn"></div><br />
<br />
=== Что следует помнить при настройке VPN (и туннелей) ===<br />
Довольно часто при настройке VPN-подключения (под которыми тут я буду подразумевать все туннельные подключения, то есть подключения поверх IP) забывают, что при использовании опции pppd '<tt>defaultroute</tt>' маршрут по-умолчанию после подключения будет изменен. При этом, если VPN-сервер находится в другой, нежели клиент, сети, то после подключения (и изменения маршрута по-умолчанию) VPN-сервер становится недоступным, следовательно, недоступными становятся все внешние адреса, и подключение, как правило, рвется по тайм-ауту.<br />
<br />
Выходом, как обычно (и рекомендовано) служит указание ''отдельного'' маршрута на VPN-сервер (или его сеть). Для этого необходимо прописать (в примере для маршрута через eth0) в <tt>/etc/net/ifaces/eth0/ipv4route</tt> строку вида<br />
<pre>10.0.1.0/24 via 10.0.0.1</pre><br />
Тут подразумевается, что VPN-сервер находится в сети 10.0.1.0/24 (например, имеет адрес 10.0.1.1), клиент — в сети 10.0.0.0/24 (например, 10.0.0.10), а маршрутизатор имеет адрес 10.0.0.1.<br />
<br />
Теперь, при использовании опции '<tt>defaulroute</tt>' для pppd (которая указывает, что нужно изменить на вновь созданное подключение маршрут по-умолчанию), даже после замены маршрута по-умолчанию новым сеть 10.0.1.0, в которой в нашем примере и находится VPN-сервер, остается доступной.<br />
<br />
Как более точечный вариант (применяется в alterator-net-pptp 0.5.x) можно использовать скрипты <tt>ifup-pre</tt> и <tt>ifdown-post</tt> в каталоге конфигурируемого PPP-интерфейса; пример:<br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifup-pre; replace variables yourself<br />
ip route add $VPN_SERVER via $DEF_GW<br />
</source><br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifdown-post; replace variables yourself<br />
ip route del $VPN_SERVER via $DEF_GW<br />
</source><br />
Не забудьте подставить нужные IP-адреса (не сеть, где VPN-сервер, а его /32) и сделать <tt>chmod +x ifup-pre ifdown-post</tt><br />
<br />
<div id="ipsectun"></div><br />
<br />
=== Настройка и использование IPSec-туннелей ===<br />
В ALT Linux поддерживаются статические IPSec-туннели, которые реализутся модулем ядра ipsec_tunnel, который в свою очередь использует CryptoAPI ядер серии 2.4. Для этих интерфейсов кроме TUNLOCAL и TUNREMOTE обязательно требуется ещё такой параметр как TUNSPI. Это уникальный номер туннеля, он должен быть более 0x2000 и одинаковым на обоих хостах. Эти туннели требуют, чтобы для них были определены параметры либо шифрования, либо подписи, либо того и другого вместе. Опции CIPHER и DIGEST определяют соответственно алгоритмы и режимы шифрования и подписи, а опции CIPHERFILE и DIGESTFILE — имена файлов в конфигурационном каталоге интерфейса, которые содержат ключи шифрования и подписи. Для форсирования интерфейса, через который будут посылаться туннелированные пакеты, можно использовать опцию HOST.<br />
<br />
<div id="iprule"></div><br />
<br />
=== Сложная маршрутизация ===<br />
Под сложной маршрутизацией понимается наличие нескольких таблиц маршрутизации. Для их использования нужно будет сконфигурировать правила ядра. Если мы посмотрим на правила по умолчанию, то мы увидим следующее:<br />
<pre>$ /sbin/ip ru<br />
0: from all lookup local <br />
32766: from all lookup main <br />
32767: from all lookup default</pre><br />
Сами таблицы определены в файле <tt>/etc/iproute2/rt_tables</tt>. Для создания конфигурации «сложной маршрутизации» необходимо вначале «создать» нужные таблицы в этом файле (если вы хотите использовать имена таблиц, а не числа).<br />
<br />
Следующий шаг — заполнение таблиц. В конфигурационном каталоге интерфейса в файле ipv4route добавьте маршрутные записи, не забыв указать <tt>table XX</tt>. Учтите, что если вы не начинаете строку с режима ip route (add, del, replace, append, change), то по умолчанию будет использован режим DEFAULT_IPV4ROUTE_CMD (append).<br />
<br />
Второй шаг — определение правил в файле ipv4rule. Опять же, не обошлось без некоторой автоматики. Если строка не начинается с операции del или add, то нужный режим будет подставлен автоматически. Это подходит для тех случаев, когда вам при поднятии интерфейса необходимо добавить правила, а при опускании — удалить. Возможность указывать del или add реализована для обратных случаев: если при поднятии интерфейса вам необходимо удалить правила, а при опускании — добавить. В этом случае add и del будут в нужный момент автоматически заменены на del и add.<br />
<br />
Пример такой конфигурации входит в [http://etcnet.org/ /etc/net] 0.7.12: [http://etcnet.org/examples/routing-LARTC-1/ http://etcnet.org/examples/routing-LARTC-1/]<br />
<br />
<div id="wireless"></div><br />
<br />
=== Простое переключение маршрутов ===<br />
В ситуации, когда вы постоянно пользуетесь eth-интерфейсом и у вас настроен маршрут по умолчанию,<br />
бывает удобно настроить второй маршрут по умолчанию через беспроводной интерфейс,<br />
но с метрикой, меньшей чем у проводного интерфейса.<br />
В этом случае, при поднятии WI-FI маршрут по умолчанию «развернется» в нужную сторону.<br />
<br />
Например:<br />
<br />
<tt>/etc/net/ifaces/eth0/ipv4route</tt><br />
<pre>default via 192.168.3.254 metric 10</pre><br />
и<br />
<tt>/etc/net/ifaces/ath0/ipv4route</tt><br />
<pre>default via 192.168.123.1 metric 5</pre><br />
<br />
=== О беспроводном Ethernet ===<br />
Большинство беспроводных интерфейсов сейчас представлено системе как интерфейсы Ethernet. Соответственно ваш беспроводный интерфейс будет иметь [https://bugzilla.altlinux.org/show_bug.cgi?id=6283 TYPE=eth]. Чтобы он нормально работал, нужно кроме загрузки модуля с параметрами воспользоваться утилитами iwconfig из пакета wireless-tools или wpa_supplicant из такого же пакета. Вместо того, чтобы запускать их вручную, можно просто поместить в конфигурационный каталог интерфейса файл iwconfig с командами iwconfig или файл wpa_supplicant.conf с конфигурацией wpa_supplicant. Они будут использованы автоматически.<br />
<br />
Пример [http://hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wireless.html конфигурации] (совместно с <tt>[http://ndiswrapper.sourceforge.net/ ndiswrapper]</tt>):<br />
<tt>/etc/net/ifaces/wlan0/options</tt><br />
<pre>TYPE=eth<br />
MODULE=ndiswrapper<br />
NEVER_RMMOD=yes<br />
BOOTPROTO=dhcp<br />
USE_HOTPLUG=no<br />
ONBOOT=no</pre><br />
<tt>/etc/net/ifaces/wlan0/iwconfig</tt><br />
<pre>essid default<br />
#key bababababa</pre><br />
<br />
<br />
Еще один пример (от thresh@) использования etcnet для настройки беспроводной сети (в данный момент это не WPA2, но работало и на нем):<br />
<tt>/etc/net/ifaces/eth0/options</tt><br />
<pre>TYPE=eth<br />
USE_HOTPLUG=NO<br />
BOOTPROTO=static<br />
module=ipw2200<br />
WPA_DRIVER=wext</pre><br />
<br />
<tt>/etc/net/ifaces/eth0/iwconfig</tt><br />
<pre>essid homenet<br />
mode 1<br />
ap 00:11:D8:22:AD:0D<br />
channel 3<br />
rate 11M</pre><br />
<br />
<tt>/etc/net/ifaces/eth0/wpa_supplicant.conf</tt><br />
<pre>ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=0<br />
eapol_version=1<br />
ap_scan=1<br />
fast_reauth=1<br />
<br />
network={<br />
ssid="homenet"<br />
bssid=00:11:D8:22:AD:0D<br />
proto=WPA<br />
key_mgmt=WPA-PSK<br />
pairwise=CCMP TKIP<br />
group=TKIP<br />
psk="this is my mega secret password string to wpa supplicant"<br />
priority=2<br />
}</pre><br />
<br />
<br />
<div id="sysctl"></div><br />
<br />
=== Как использовать автодополнение в sysctl.conf ===<br />
В конфигурационном каталоге интерфейса может находиться файл 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.<br />
<br />
Решается это следующим способом: просто запишите в файл имя переменной и значение, а [http://etcnet.org/ /etc/net] сама решит, как к этой переменной добраться, и вызовет sysctl с полным именем. Например:<br />
<pre>log_martians=1<br />
rp_filter=1</pre><br />
<br />
<div id="profiles"></div><br />
<br />
=== Подключение к Wi-Fi с сертификатом на аппаратном токене ===<br />
Для беспроводного подключения в корпоративных сетях могут использоваться сертификаты, записанные на аппаратном токене, например, Aladdin eToken. Для настройки такого подключения нужно использовать <tt>/etc/net/ifaces/wlan0/wpa_supplicant.conf</tt><br />
<pre><br />
ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=wheel<br />
#eapol_version=1<br />
#ap_scan=2<br />
#fast_reauth=1<br />
pkcs11_engine_path=/usr/lib/openssl/engines/engine_pkcs11.so<br />
pkcs11_module_path=/usr/lib/libeTPkcs11.so<br />
update_config=0<br />
<br />
network={<br />
ssid="test"<br />
key_mgmt=WPA-EAP<br />
pairwise=CCMP TKIP<br />
group=CCMP TKIP<br />
eap=TLS<br />
identity="email@address.ru"<br />
engine_id="pkcs11"<br />
key_id="xxxxxxxxx"<br />
cert_id="xxxxxxxxx"<br />
engine=1<br />
}<br />
</pre><br />
где key_id и cerd_id взяты из вывода команды<br />
<pre><br />
# pkcs11-tool --module /usr/lib/libeTPkcs11.so -O -l<br />
</pre><br />
Используются родные драйвера Aladdin - pkiclient-5.00.28-0, и пакет openssl-engine_pkcs11-0.1.5-alt1.<br />
<br />
=== Профили конфигурации ===<br />
<br />
==== Определение профилей ====<br />
Профиль — именованный вариант конфигурации, в той или иной степени изменяющий базовую конфигурацию системы. Профили могут быть применены, например, для конфигурации ноутбука в разных сетевых окружениях, или при подготовке новой или тестовой конфигурации с возможностью быстрого возврата к старой. Практически профили реализуются следующим образом: для какого-либо из файлов, составляющих общесистемную конфигурацию или конфигурацию интерфейса, создаётся альтернативный вариант, который отличается добавлением в конце названия файла знака # и имени профиля.<br />
<br />
Например, единственное отличие между профилями заключается в том, какой модуль ядра будет загружен для интерфейса 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 работать не будет.<br />
<br />
Профили могут использоваться также и для отключения каких-то параметров конфигурации. Например, если используется файл ipv4route для установки маршрутов для интерфейса, то можно создать файл нулевого размера ipv4route#profile2, чтобы при использовании профиля profile2 никаких маршрутов не конфигурировалось.<br />
<br />
==== Выбор профиля при загрузке ====<br />
Если при загрузке системы ядру был передан параметр netprofile, то его значение будет использовано как имя профиля по умолчанию. Это может быть использовано для создания собственных пунктов меню загрузчиков LILO и GRUB с заранее определённым профилем сетевой конфигурации. Заданный таким образом профиль может быть далее переопределён другими методами. Следует понимать разницу между различными конфигурациями и различными результатами применения одной конфигурации. Например, если в двух разных сетях используется DHCP, то смысла в разных профилях конфигурации нет.<br />
<br />
Для загрузчика LILO секции <tt>/etc/lilo.conf</tt> могут выглядеть следующим образом:<br />
<pre>image=/boot/vmlinuz-up<br />
label=linux-up home<br />
append=" netprofile=home"<br />
[...]<br />
image=/boot/vmlinuz-up<br />
label=linux-up office<br />
append=" netprofile=office"<br />
[...]</pre><br />
Для приведённого примера необходимо будет создать варианты для файлов, отличающихся в профилях home и office, и можно будет выбирать при загрузке, какой из профилей необходимо использовать. Использование этого метода удобно, если смена сетевого окружения происходит синхронно с загрузкой системы.<br />
<br />
==== Выбор профиля по умолчанию ====<br />
Если вы хотите, чтобы какой-то профиль конфигурации использовался по умолчанию, запишите его название в файл <tt>/etc/net/profile</tt>. Этот метод имеет приоритет над параметром ядра netprofile. Использование такого способа выбора профиля целесообразно, когда переключение между конфигурациями происходит реже, чем перезагрузка системы.<br />
<br />
==== Смена профиля во время работы ====<br />
Если вы хотите переконфигурировать сеть без перезагрузки или редактирования файла <tt>/etc/net/profile</tt>, то используйте параметры сервиса network, описанные в разделе ##FTN restartreload##. Этот метод имеет приоритет над профилем по умолчанию и профилем, выбранным при загрузке. Целесообразно его использовать, если смена сетевого окружения происходит чаще, чем перезагрузка системы.<br />
<br />
==== Определение профиля во время конфигурации интерфейса ====<br />
Если в каталоге конфигурации интерфейса существует исполняемый файл ненулевого размера с именем selectprofile, то этот файл будет выполнен и первое слово первой строки его стандартного вывода использовано как имя профиля, которое должно быть использовано для конфигурации данного интерфейса. Этот метод имеет приоритет над всеми остальными методами. Исходной задачей, требующей такого решения, являлось конфигурирование беспроводного интерфейса в зависимости от доступных точек доступа.<br />
<br />
Следует учитывать, что число вызовов файла selectprofile может меняться в зависимости от контекста и время его выполнения может быть различным, поэтому при написании такого файла следует учитывать, что первым параметром будет являться имя текущего сценария. В настоящее время это могут быть ifup*, ifdown*, setup* и shutdown*. Для приведённого выше примера имеет смысл реагировать только на вызовы из ifup или ifup-common.<br />
<br />
<nowiki>## FTN ftnd1##</nowiki><br />
<br />
{|<br />
|<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/32||255.255.255.255<br />
|-<br />
|/31||255.255.255.254<br />
|-<br />
|/30||255.255.255.252<br />
|-<br />
|/29||255.255.255.248<br />
|-<br />
|/28||255.255.255.240<br />
|-<br />
|/27||255.255.255.224<br />
|-<br />
|/26||255.255.255.192<br />
|-<br />
|/25||255.255.255.128<br />
|-<br />
|/24||255.255.255.0<br />
|-<br />
|/23||255.255.254.0<br />
|-<br />
|/22||255.255.252.0<br />
|-<br />
|/21||255.255.248.0<br />
|-<br />
|/20||255.255.240.0<br />
|-<br />
|/19||255.255.224.0<br />
|-<br />
|/18||255.255.192.0<br />
|-<br />
|/17||255.255.128.0<br />
|}<br />
|<br />
| ||<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/16||255.255.0.0<br />
|-<br />
|/15||255.254.0.0<br />
|-<br />
|/14||255.252.0.0<br />
|-<br />
|/13||255.248.0.0<br />
|-<br />
|/12||255.240.0.0<br />
|-<br />
|/11||255.224.0.0<br />
|-<br />
|/10||255.192.0.0<br />
|-<br />
|/9||255.128.0.0<br />
|-<br />
|/8||255.0.0.0<br />
|-<br />
|/7||254.0.0.0<br />
|-<br />
|/6||252.0.0.0<br />
|-<br />
|/5||248.0.0.0<br />
|-<br />
|/4||240.0.0.0<br />
|-<br />
|/3||224.0.0.0<br />
|-<br />
|/2||192.0.0.0<br />
|-<br />
|/1||128.0.0.0<br />
|}<br />
|}<br />
<br />
<nowiki>## FTN ftnd2##</nowiki><br />
<br />
Выдержка из файла ip-cref.ps, который входит в документацию пакета iproute2:<br />
* broadcast ADDRESS<br />
<br />the broadcast address on the interface.<br />
It is possible to use the special symbols '+' and '-' instead of the broadcast address. In this case, <br />
the broadcast address is derived by setting/resetting the host bits of the interface prefix.<br />
NB. Unlike ifconfig, the ip utility does not set any broadcast address unless explicitly requested.<br />
<br />
<br />
{{Category navigation|title=etcnet|category=etcnet|sortkey=*}}</div>AndrewKornilovhttps://www.altlinux.org/index.php?title=Etcnet_Firewall&diff=1950Etcnet Firewall2008-08-09T22:15:17Z<p>AndrewKornilov: /* Системные таблицы и возможные системные цепочки в них */</p>
<hr />
<div>[[Category:Admin]]<br />
<br />
== Настройка сетевого экрана в [[etcnet|/etc/net]] ==<br />
Начиная с версии 0.7.9 etcnet содержит поддержку управления сетевым экраном (firewall). В данный момент поддерживается iptables и ebtables. Реализация основана на группировке таблиц и цепочек в таблицах. Таблицы могут быть только системные, цепочки же, кроме системных, могут быть заданы пользователем. <br />
<br />
=== Системные таблицы и возможные системные цепочки в них ===<br />
{| border="1"<br />
|-<br />
|<br />
Таблица<br />
|<br />
Цепочки<br />
|-<br />
|<br />
filter<br />
|<br />
INPUT FORWARD OUTPUT<br />
|-<br />
|<br />
nat<br />
|<br />
PREROUTING OUTPUT POSTROUTING<br />
|-<br />
|<br />
mangle<br />
|<br />
PREROUTING INPUT FORWARD OUTPUT POSTROUTING<br />
|-<br />
|<br />
raw<br />
|<br />
PREROUTING OUTPUT<br />
|}<br />
<br />
Схема прохождения пакетов<br />
[[Изображение:Iptables3al7.jpg]]<br />
<br />
Красивая, но неправильная: куда делся nat output ? ;)<br />
<br />
Еще одна схема прохождения пакетов (из Iptables Tutorial http://iptables-tutorial.frozentux.net/iptables-tutorial.html)<br />
<br />
[[Изображение:Tables_traverse.jpg]]<br />
<br />
=== Используемые файлы и каталоги ===<br />
<tt>/etc/net/ifaces/default/fw/options</tt> -- файл с настройками сетевого экрана по-умолчанию:<br />
* FW_TYPE -- типа сетевого экрана. Здесь можно указать только iptables, другие типы пока не поддерживаются<br />
* IPTABLES_HUMAN_SYNTAX -- включает или отключает использование поддержки "читабельного" синтаксиса правил для iptables (см. ниже). Значение: yes или no<br />
* IPTABLES_SYSTEM_CHAINS -- список системных цепочек в таблицах. Все цепочки, не указанные здесь, будут автоматически создаваться и удаляться. Значение: названия цепочек (все названия чувствительны к регистру!), разделенные пробелом<br />
* IPTABLES_INPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку INPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_FORWARD_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку FORWARD таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_OUTPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку OUTPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_RULE_EMBEDDING -- способ добавления нового правила в цепочку. Значение: APPEND или INSERT, что означает добавление в конец списка правил или в начало соответственно.<br />
<br />
<tt>/etc/net/ifaces/default/fw/iptables/filter</tt>, <tt>/etc/net/ifaces/default/fw/iptables/nat</tt>, <tt>/etc/net/ifaces/default/fw/iptables/mangle</tt> -- каталоги, соответствующие таблицам iptables. В каталогах создаются файлы, соответствующие необходимым системным или пользовательским цепочкам, в которых уже и прописываются сами правила iptables. <br />
<br />
<tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt>, <tt>/etc/net/ifaces/default/fw/tablename/loadorder</tt> -- если такой существует и он не пустой, то обработка таблиц и/или цепочек в таблице происходит в том порядке, который указан в файле (по одному значению на строку). Все таблицы и цепочки, которые не указаны, обрабатываться не будут.<br />
<tt>/etc/net/ifaces/default/fw/iptables/modules</tt> -- список модулей ядра, которые необходимо загрузить перед запуском сетевого экрана. При остановке эти модули выгружаются<br />
<tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> -- описание замен при использовании "читабельного" синтаксиса правил iptables<br />
<br />
<br />
=== Алгоритм работы сетевого экрана ===<br />
# При запуске службы network, виртуальный интерфейс default:<br />
## Если опция CONFIG_FW (в файле <tt>/etc/net/ifaces/default/options</tt>) не установлена в yes, то ничего не делает и происходит выход из процедуры запуска сетевого экрана; иначе переходим к следующему пункту<br />
## Считывается файл настроек <tt>/etc/net/ifaces/default/fw/iptables/options</tt><br />
## До настройки любого интерфейса и обработки значений sysctl устанавливаются действия по-умолчанию (policy) для системных цепочек таблицы filter<br />
## Считывается файл со списком модулей ядра <tt>/etc/net/ifaces/default/fw/iptables/modules</tt> и все указанные там модули (по одному на строку) загружаются; при отсутствии файла никакие модули не загружаются<br />
## Создаются все пользовательские цепочки во всех таблицах (пользовательскими считаются все цепочки, не указанные в переменной IPTABLES_SYSTEM_CHAINS)<br />
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt> и в указанном в нем порядке происходит обработка таблиц iptables; при отсутствии файла обработка происходит в соответствии с сортировкой названий таблиц по имени<br />
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/tablename/loadorder</tt> в каждой обрабатываемой таблице и происходит обработки и загрузка правил для каждой цепочки в порядке, указанном в файле; при отсутствии файла обработка опять же происходит в соответствии с сортировкой по имени<br />
## Если опция IPTABLES_HUMAN_SYNTAX установлена в yes, то считывается и обрабатывается файл с "синтаксисом" <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt><br />
## Файл с правилами обрабатывает построчно (одно правило на строку); если указана опция IPTABLES_HUMAN_SYNTAX, то правило обрабатывается интерпретатором в соответствии с синтаксисом и превращается в реальные опции для команды iptables, после чего запускается iptables с этими параметрами; иначе правило без обработки передается iptables<br />
# При "поднятии" любого интерфейса, кроме default:<br />
## Выполняются все подпункты пунка 1, только все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При "опускании" любого интерфейса, кроме default:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила удаляются из цепочек в обратном порядке, все модули ядра выгружаются в обратном порядке; все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При остановке службы network, виртуальный интерфейс default:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила из всех цепочек удалются командой iptables -F, все модули выгружаются в обратном порядке, все пользовательские цепочки удаляются<br />
## Действия по-умолчанию (policy) для системных цепочек устанавливается в ACCEPT<br />
<br />
<br />
=== Примечания ===<br />
* Правила для iptables можно писать с помощью синтаксиса, подобного синтаксису ipfw и других. Сделано это с помощью простой замены слов на опции iptables. Сами замены описаны в файле <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> (там также описано некоторое количество вспомогательных слов, так что правила можно писать практически на литературном английском :). Синтаксис правила можно совмещать (то есть использовать и заданный в etcnet синтаксис и реальные опции команды iptables)<br />
* Во всех правилах ''нельзя'' использовать названия цепочки и/или таблицы; они будут добавляться автоматически<br />
* В правилах можно использовать любые переменные окружения, выполнять любые команды shell (они должны быть указаны в одну строку). Переменная $NAME содержит имя текущего интерфейса. Переменные $IPV4ADDRESS и $IPV6ADDRESS содержат массив IPV4/IPV6 адресов текущего интерфейса (это обычные bash arrays, можно обращаться к ним по индексу: ${IPV4ADDRESS[2]} или просто $IPV4ADDRESS для первого значения). Для удобства можно использовать файлы options, в которых прописывать какие-либо переменные, к примеру, адреса gateway, ISP, сетей и т.д.<br />
* Во всех файлах можно использовать комментарии (строка должна начинаться с символа # )<br />
* Вам не нужно копировать все файлы настроек в каталог каждого интерфейса. Сначала будут считаны настройки виртуального интерфейса default, а уже потом у текущего интерфейса, соответственно, можно переопределять какие-то параметры для определенного интерфейса<br />
* Описания всех правил в настройках виртуального интерфейса default достаточно для поднятия простого сетевого экрана. При наличии же большого количества правил и интерфейсов есть смысл разделить логически все правила по каждому интерфейсу (опять же, не будет нагружаться процессор вхолостую, если интерфейс, к которому относится много правил, сейчас не "поднят")<br />
* В начале каждого правила можно указать, что с этим правилом делать. Может быть одно из трёх значений:<br />
** -A -- добавление в конец списка правил (при включеном "читабельном" синтаксисе соответствует команде "append")<br />
** -I [num] -- добавление в начало списка правил; если указан необязательный параметр num, то правило будет вставлено в строку правил с таким номером (будьте внимательны, iptables считает несуществующий номер строки ошибкой и не добавляет правило); (при включеном "читабельном" синтаксисе соответствует команде "insert [num]")<br />
** -D -- удаление правила из списка правил (соответственно, при "остановке" интерфейса правило наоборот будет добавлено); (при включеном "читабельном" синтаксисе соответствует команде "delete") <br />
* Если никакое действие не указано, то правило добавляются в цепочку в соответствии со значением переменной IPTABLES_RULE_EMBEDDING<br />
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит все правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов.<br />
<br />
=== Примеры ===<br />
<tt>/etc/net/ifaces/eth0/fw/options</tt><br />
<pre># Our WAN IP address<br />
WAN_IP=5.6.7.8/24<br />
# First net<br />
NET1=1.2.3.0/24<br />
# Second net<br />
NET2=4.3.2.0/24<br />
# Friend net<br />
FRIEND_NET=5.6.7.0/24</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/INPUT</tt><br />
<pre>accept all from any to $IPV4ADDRESS<br />
jump-to COUNT-CHAIN if marked as 0x11</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FORWARD</tt><br />
<pre>jump-to FRIEND-NET if from $FRIEND-NET<br />
append drop tcp from net $NET1 to net NET2<br />
delete drop udp from $NET1 to $NET2<br />
insert reject udp to $WAN_IP<br />
drop icmp to $(somescript.sh)</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FRIEND-NET</tt><br />
<pre>policy reject</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/mangle/PREROUTING</tt><br />
<pre>insert 15 mark tcp as 0x10 if from-iface $NAME and dport is 22<br />
mark tcp as 0x11 if from net $NET1 and from-iface $NAME</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/nat/POSTROUTING</tt><br />
<pre>snat-to $WAN_IP if marked as 0x10</pre><br />
<br />
=== Утилиты ===<br />
* В contrib находятся следующие вспомогательные утилиты:<br />
** Скрипт '''efw''', который предназначен для ручного управления сетевым экраном и умеет следующее:<br />
::<pre>Usage: ./efw [iface] [table] [chain] <action> [iptables rule or action options]<br />
<br />
iface - 'default' (by default), real interface name or 'all' for all interfaces<br />
table - 'mangle', 'filter' (by default), 'nat' or 'all' for all tables<br />
chain - system or user defined chain name (case sensitive!) or 'all' for all chains<br />
action - 'start','stop','restart','load','unload','reload','flush','show|list','count|counters','rule','new|create','remove|delete','zero','policy','rename'<br />
<br />
start - process all tables and chains for given interface (even when chain or table is defined)<br />
stop - process all tables and chains for given interface (even when chain or table is defined)<br />
restart - equivalent to stop then start<br />
load - load rules for given interface, table and chain<br />
unload - unload rules for given interface, table and chain<br />
reload - equivalent to unload then load<br />
flush - flush rules for given interface, table and chain<br />
show - list rules for given interface, table and chain<br />
list - same as show<br />
count - show counters for given table and chains<br />
counters - same as count<br />
rule - parse rule and pass it to iptables<br />
new - create new chain<br />
create - same as new<br />
remove - remove chain<br />
delete - same as remove<br />
zero - zero packet and byte counters in chain<br />
policy - set default policy for chain<br />
rename - rename chain<br />
<br />
Options for action 'show' or 'list':<br />
-n or numeric - numeric output for IP addresses, ports and services<br />
-v or verbose - verbose output of rules<br />
-x or exact - expand numbers instead of rounded numbers<br />
--line-numbers or lines - display line number for each rule</pre><br />
::На текущий момент он умеет частично угадывать интерфейс, таблицу и цепочку (если их не передали в комстроке) и все действия, кроме counters. Так же поддерживается "маска" all для интерфейсов, таблиц и цепочек.<br />
<br />
=== Примеры команд: ===<br />
<br />
* Выгрузить (путем flush) все правила из всех цепочек всех таблиц, удалить цепочки, заданные пользователем, выгрузить все загруженные модули<br />
::::<pre>efw default stop</pre><br />
* Выгрузить (путем удаления каждого правила в обратном порядке) все правила из цепочки FORWARD таблицы filter для интерфейса eth0<br />
::::<pre>efw eth0 unload</pre><br />
* Загрузить все правила для всех цепочек во всех таблицах всех интерфейсов<br />
::::<pre>efw all all all load</pre><br />
* Обработать правило и добавить его во все цепочки таблицы filter<br />
::::<pre>efw default filter all rule accept all from any</pre><br />
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит <u>все</u> правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов. Таким образом, наиболее используемой командой при изменении конфигурации сетевого экрана является:<br />
::::<pre>efw default stop ; efw all start</pre><br />
<br />
=== Прочее ===<br />
[http://fly.osdn.org.ua/~mike/works/misc/iptables2etcnet/ Конвертор правил], точнее, дампа <tt>iptables-save</tt> (альфа! и требует <tt>ruby</tt>) в соответствующее расположение правил в etcnet<br />
<br />
<br />
----<br />
<br />
Весь этот текст относится к версии etcnet >=0.8.5</div>AndrewKornilovhttps://www.altlinux.org/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Tables_traverse.jpg&diff=1949Файл:Tables traverse.jpg2008-08-09T22:12:52Z<p>AndrewKornilov: iptables packet traverse. Original image: http://iptables-tutorial.frozentux.net/images/tables_traverse.jpg</p>
<hr />
<div>== Краткое описание ==<br />
iptables packet traverse. Original image: http://iptables-tutorial.frozentux.net/images/tables_traverse.jpg<br />
<br />
== Лицензирование ==<br />
{{GFDL}}</div>AndrewKornilovhttps://www.altlinux.org/index.php?title=Etcnet_Firewall&diff=1948Etcnet Firewall2008-08-09T22:08:39Z<p>AndrewKornilov: /* Примеры команд: */</p>
<hr />
<div>[[Category:Admin]]<br />
<br />
== Настройка сетевого экрана в [[etcnet|/etc/net]] ==<br />
Начиная с версии 0.7.9 etcnet содержит поддержку управления сетевым экраном (firewall). В данный момент поддерживается iptables и ebtables. Реализация основана на группировке таблиц и цепочек в таблицах. Таблицы могут быть только системные, цепочки же, кроме системных, могут быть заданы пользователем. <br />
<br />
=== Системные таблицы и возможные системные цепочки в них ===<br />
{| border="1"<br />
|-<br />
|<br />
Таблица<br />
|<br />
Цепочки<br />
|-<br />
|<br />
filter<br />
|<br />
INPUT FORWARD OUTPUT<br />
|-<br />
|<br />
nat<br />
|<br />
PREROUTING OUTPUT POSTROUTING<br />
|-<br />
|<br />
mangle<br />
|<br />
PREROUTING INPUT FORWARD OUTPUT POSTROUTING<br />
|-<br />
|<br />
raw<br />
|<br />
PREROUTING OUTPUT<br />
|}<br />
<br />
Схема прохождения пакетов<br />
[[Изображение:Iptables3al7.jpg]]<br />
<br />
Красивая, но неправильная: куда делся nat output ? ;)<br />
<br />
=== Используемые файлы и каталоги ===<br />
<tt>/etc/net/ifaces/default/fw/options</tt> -- файл с настройками сетевого экрана по-умолчанию:<br />
* FW_TYPE -- типа сетевого экрана. Здесь можно указать только iptables, другие типы пока не поддерживаются<br />
* IPTABLES_HUMAN_SYNTAX -- включает или отключает использование поддержки "читабельного" синтаксиса правил для iptables (см. ниже). Значение: yes или no<br />
* IPTABLES_SYSTEM_CHAINS -- список системных цепочек в таблицах. Все цепочки, не указанные здесь, будут автоматически создаваться и удаляться. Значение: названия цепочек (все названия чувствительны к регистру!), разделенные пробелом<br />
* IPTABLES_INPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку INPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_FORWARD_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку FORWARD таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_OUTPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку OUTPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_RULE_EMBEDDING -- способ добавления нового правила в цепочку. Значение: APPEND или INSERT, что означает добавление в конец списка правил или в начало соответственно.<br />
<br />
<tt>/etc/net/ifaces/default/fw/iptables/filter</tt>, <tt>/etc/net/ifaces/default/fw/iptables/nat</tt>, <tt>/etc/net/ifaces/default/fw/iptables/mangle</tt> -- каталоги, соответствующие таблицам iptables. В каталогах создаются файлы, соответствующие необходимым системным или пользовательским цепочкам, в которых уже и прописываются сами правила iptables. <br />
<br />
<tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt>, <tt>/etc/net/ifaces/default/fw/tablename/loadorder</tt> -- если такой существует и он не пустой, то обработка таблиц и/или цепочек в таблице происходит в том порядке, который указан в файле (по одному значению на строку). Все таблицы и цепочки, которые не указаны, обрабатываться не будут.<br />
<tt>/etc/net/ifaces/default/fw/iptables/modules</tt> -- список модулей ядра, которые необходимо загрузить перед запуском сетевого экрана. При остановке эти модули выгружаются<br />
<tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> -- описание замен при использовании "читабельного" синтаксиса правил iptables<br />
<br />
<br />
=== Алгоритм работы сетевого экрана ===<br />
# При запуске службы network, виртуальный интерфейс default:<br />
## Если опция CONFIG_FW (в файле <tt>/etc/net/ifaces/default/options</tt>) не установлена в yes, то ничего не делает и происходит выход из процедуры запуска сетевого экрана; иначе переходим к следующему пункту<br />
## Считывается файл настроек <tt>/etc/net/ifaces/default/fw/iptables/options</tt><br />
## До настройки любого интерфейса и обработки значений sysctl устанавливаются действия по-умолчанию (policy) для системных цепочек таблицы filter<br />
## Считывается файл со списком модулей ядра <tt>/etc/net/ifaces/default/fw/iptables/modules</tt> и все указанные там модули (по одному на строку) загружаются; при отсутствии файла никакие модули не загружаются<br />
## Создаются все пользовательские цепочки во всех таблицах (пользовательскими считаются все цепочки, не указанные в переменной IPTABLES_SYSTEM_CHAINS)<br />
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt> и в указанном в нем порядке происходит обработка таблиц iptables; при отсутствии файла обработка происходит в соответствии с сортировкой названий таблиц по имени<br />
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/tablename/loadorder</tt> в каждой обрабатываемой таблице и происходит обработки и загрузка правил для каждой цепочки в порядке, указанном в файле; при отсутствии файла обработка опять же происходит в соответствии с сортировкой по имени<br />
## Если опция IPTABLES_HUMAN_SYNTAX установлена в yes, то считывается и обрабатывается файл с "синтаксисом" <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt><br />
## Файл с правилами обрабатывает построчно (одно правило на строку); если указана опция IPTABLES_HUMAN_SYNTAX, то правило обрабатывается интерпретатором в соответствии с синтаксисом и превращается в реальные опции для команды iptables, после чего запускается iptables с этими параметрами; иначе правило без обработки передается iptables<br />
# При "поднятии" любого интерфейса, кроме default:<br />
## Выполняются все подпункты пунка 1, только все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При "опускании" любого интерфейса, кроме default:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила удаляются из цепочек в обратном порядке, все модули ядра выгружаются в обратном порядке; все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При остановке службы network, виртуальный интерфейс default:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила из всех цепочек удалются командой iptables -F, все модули выгружаются в обратном порядке, все пользовательские цепочки удаляются<br />
## Действия по-умолчанию (policy) для системных цепочек устанавливается в ACCEPT<br />
<br />
<br />
=== Примечания ===<br />
* Правила для iptables можно писать с помощью синтаксиса, подобного синтаксису ipfw и других. Сделано это с помощью простой замены слов на опции iptables. Сами замены описаны в файле <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> (там также описано некоторое количество вспомогательных слов, так что правила можно писать практически на литературном английском :). Синтаксис правила можно совмещать (то есть использовать и заданный в etcnet синтаксис и реальные опции команды iptables)<br />
* Во всех правилах ''нельзя'' использовать названия цепочки и/или таблицы; они будут добавляться автоматически<br />
* В правилах можно использовать любые переменные окружения, выполнять любые команды shell (они должны быть указаны в одну строку). Переменная $NAME содержит имя текущего интерфейса. Переменные $IPV4ADDRESS и $IPV6ADDRESS содержат массив IPV4/IPV6 адресов текущего интерфейса (это обычные bash arrays, можно обращаться к ним по индексу: ${IPV4ADDRESS[2]} или просто $IPV4ADDRESS для первого значения). Для удобства можно использовать файлы options, в которых прописывать какие-либо переменные, к примеру, адреса gateway, ISP, сетей и т.д.<br />
* Во всех файлах можно использовать комментарии (строка должна начинаться с символа # )<br />
* Вам не нужно копировать все файлы настроек в каталог каждого интерфейса. Сначала будут считаны настройки виртуального интерфейса default, а уже потом у текущего интерфейса, соответственно, можно переопределять какие-то параметры для определенного интерфейса<br />
* Описания всех правил в настройках виртуального интерфейса default достаточно для поднятия простого сетевого экрана. При наличии же большого количества правил и интерфейсов есть смысл разделить логически все правила по каждому интерфейсу (опять же, не будет нагружаться процессор вхолостую, если интерфейс, к которому относится много правил, сейчас не "поднят")<br />
* В начале каждого правила можно указать, что с этим правилом делать. Может быть одно из трёх значений:<br />
** -A -- добавление в конец списка правил (при включеном "читабельном" синтаксисе соответствует команде "append")<br />
** -I [num] -- добавление в начало списка правил; если указан необязательный параметр num, то правило будет вставлено в строку правил с таким номером (будьте внимательны, iptables считает несуществующий номер строки ошибкой и не добавляет правило); (при включеном "читабельном" синтаксисе соответствует команде "insert [num]")<br />
** -D -- удаление правила из списка правил (соответственно, при "остановке" интерфейса правило наоборот будет добавлено); (при включеном "читабельном" синтаксисе соответствует команде "delete") <br />
* Если никакое действие не указано, то правило добавляются в цепочку в соответствии со значением переменной IPTABLES_RULE_EMBEDDING<br />
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит все правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов.<br />
<br />
=== Примеры ===<br />
<tt>/etc/net/ifaces/eth0/fw/options</tt><br />
<pre># Our WAN IP address<br />
WAN_IP=5.6.7.8/24<br />
# First net<br />
NET1=1.2.3.0/24<br />
# Second net<br />
NET2=4.3.2.0/24<br />
# Friend net<br />
FRIEND_NET=5.6.7.0/24</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/INPUT</tt><br />
<pre>accept all from any to $IPV4ADDRESS<br />
jump-to COUNT-CHAIN if marked as 0x11</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FORWARD</tt><br />
<pre>jump-to FRIEND-NET if from $FRIEND-NET<br />
append drop tcp from net $NET1 to net NET2<br />
delete drop udp from $NET1 to $NET2<br />
insert reject udp to $WAN_IP<br />
drop icmp to $(somescript.sh)</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FRIEND-NET</tt><br />
<pre>policy reject</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/mangle/PREROUTING</tt><br />
<pre>insert 15 mark tcp as 0x10 if from-iface $NAME and dport is 22<br />
mark tcp as 0x11 if from net $NET1 and from-iface $NAME</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/nat/POSTROUTING</tt><br />
<pre>snat-to $WAN_IP if marked as 0x10</pre><br />
<br />
=== Утилиты ===<br />
* В contrib находятся следующие вспомогательные утилиты:<br />
** Скрипт '''efw''', который предназначен для ручного управления сетевым экраном и умеет следующее:<br />
::<pre>Usage: ./efw [iface] [table] [chain] <action> [iptables rule or action options]<br />
<br />
iface - 'default' (by default), real interface name or 'all' for all interfaces<br />
table - 'mangle', 'filter' (by default), 'nat' or 'all' for all tables<br />
chain - system or user defined chain name (case sensitive!) or 'all' for all chains<br />
action - 'start','stop','restart','load','unload','reload','flush','show|list','count|counters','rule','new|create','remove|delete','zero','policy','rename'<br />
<br />
start - process all tables and chains for given interface (even when chain or table is defined)<br />
stop - process all tables and chains for given interface (even when chain or table is defined)<br />
restart - equivalent to stop then start<br />
load - load rules for given interface, table and chain<br />
unload - unload rules for given interface, table and chain<br />
reload - equivalent to unload then load<br />
flush - flush rules for given interface, table and chain<br />
show - list rules for given interface, table and chain<br />
list - same as show<br />
count - show counters for given table and chains<br />
counters - same as count<br />
rule - parse rule and pass it to iptables<br />
new - create new chain<br />
create - same as new<br />
remove - remove chain<br />
delete - same as remove<br />
zero - zero packet and byte counters in chain<br />
policy - set default policy for chain<br />
rename - rename chain<br />
<br />
Options for action 'show' or 'list':<br />
-n or numeric - numeric output for IP addresses, ports and services<br />
-v or verbose - verbose output of rules<br />
-x or exact - expand numbers instead of rounded numbers<br />
--line-numbers or lines - display line number for each rule</pre><br />
::На текущий момент он умеет частично угадывать интерфейс, таблицу и цепочку (если их не передали в комстроке) и все действия, кроме counters. Так же поддерживается "маска" all для интерфейсов, таблиц и цепочек.<br />
<br />
=== Примеры команд: ===<br />
<br />
* Выгрузить (путем flush) все правила из всех цепочек всех таблиц, удалить цепочки, заданные пользователем, выгрузить все загруженные модули<br />
::::<pre>efw default stop</pre><br />
* Выгрузить (путем удаления каждого правила в обратном порядке) все правила из цепочки FORWARD таблицы filter для интерфейса eth0<br />
::::<pre>efw eth0 unload</pre><br />
* Загрузить все правила для всех цепочек во всех таблицах всех интерфейсов<br />
::::<pre>efw all all all load</pre><br />
* Обработать правило и добавить его во все цепочки таблицы filter<br />
::::<pre>efw default filter all rule accept all from any</pre><br />
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит <u>все</u> правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов. Таким образом, наиболее используемой командой при изменении конфигурации сетевого экрана является:<br />
::::<pre>efw default stop ; efw all start</pre><br />
<br />
=== Прочее ===<br />
[http://fly.osdn.org.ua/~mike/works/misc/iptables2etcnet/ Конвертор правил], точнее, дампа <tt>iptables-save</tt> (альфа! и требует <tt>ruby</tt>) в соответствующее расположение правил в etcnet<br />
<br />
<br />
----<br />
<br />
Весь этот текст относится к версии etcnet >=0.8.5</div>AndrewKornilovhttps://www.altlinux.org/index.php?title=Etcnet_Firewall&diff=1947Etcnet Firewall2008-08-09T22:06:56Z<p>AndrewKornilov: /* Примечания */</p>
<hr />
<div>[[Category:Admin]]<br />
<br />
== Настройка сетевого экрана в [[etcnet|/etc/net]] ==<br />
Начиная с версии 0.7.9 etcnet содержит поддержку управления сетевым экраном (firewall). В данный момент поддерживается iptables и ebtables. Реализация основана на группировке таблиц и цепочек в таблицах. Таблицы могут быть только системные, цепочки же, кроме системных, могут быть заданы пользователем. <br />
<br />
=== Системные таблицы и возможные системные цепочки в них ===<br />
{| border="1"<br />
|-<br />
|<br />
Таблица<br />
|<br />
Цепочки<br />
|-<br />
|<br />
filter<br />
|<br />
INPUT FORWARD OUTPUT<br />
|-<br />
|<br />
nat<br />
|<br />
PREROUTING OUTPUT POSTROUTING<br />
|-<br />
|<br />
mangle<br />
|<br />
PREROUTING INPUT FORWARD OUTPUT POSTROUTING<br />
|-<br />
|<br />
raw<br />
|<br />
PREROUTING OUTPUT<br />
|}<br />
<br />
Схема прохождения пакетов<br />
[[Изображение:Iptables3al7.jpg]]<br />
<br />
Красивая, но неправильная: куда делся nat output ? ;)<br />
<br />
=== Используемые файлы и каталоги ===<br />
<tt>/etc/net/ifaces/default/fw/options</tt> -- файл с настройками сетевого экрана по-умолчанию:<br />
* FW_TYPE -- типа сетевого экрана. Здесь можно указать только iptables, другие типы пока не поддерживаются<br />
* IPTABLES_HUMAN_SYNTAX -- включает или отключает использование поддержки "читабельного" синтаксиса правил для iptables (см. ниже). Значение: yes или no<br />
* IPTABLES_SYSTEM_CHAINS -- список системных цепочек в таблицах. Все цепочки, не указанные здесь, будут автоматически создаваться и удаляться. Значение: названия цепочек (все названия чувствительны к регистру!), разделенные пробелом<br />
* IPTABLES_INPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку INPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_FORWARD_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку FORWARD таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_OUTPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку OUTPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_RULE_EMBEDDING -- способ добавления нового правила в цепочку. Значение: APPEND или INSERT, что означает добавление в конец списка правил или в начало соответственно.<br />
<br />
<tt>/etc/net/ifaces/default/fw/iptables/filter</tt>, <tt>/etc/net/ifaces/default/fw/iptables/nat</tt>, <tt>/etc/net/ifaces/default/fw/iptables/mangle</tt> -- каталоги, соответствующие таблицам iptables. В каталогах создаются файлы, соответствующие необходимым системным или пользовательским цепочкам, в которых уже и прописываются сами правила iptables. <br />
<br />
<tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt>, <tt>/etc/net/ifaces/default/fw/tablename/loadorder</tt> -- если такой существует и он не пустой, то обработка таблиц и/или цепочек в таблице происходит в том порядке, который указан в файле (по одному значению на строку). Все таблицы и цепочки, которые не указаны, обрабатываться не будут.<br />
<tt>/etc/net/ifaces/default/fw/iptables/modules</tt> -- список модулей ядра, которые необходимо загрузить перед запуском сетевого экрана. При остановке эти модули выгружаются<br />
<tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> -- описание замен при использовании "читабельного" синтаксиса правил iptables<br />
<br />
<br />
=== Алгоритм работы сетевого экрана ===<br />
# При запуске службы network, виртуальный интерфейс default:<br />
## Если опция CONFIG_FW (в файле <tt>/etc/net/ifaces/default/options</tt>) не установлена в yes, то ничего не делает и происходит выход из процедуры запуска сетевого экрана; иначе переходим к следующему пункту<br />
## Считывается файл настроек <tt>/etc/net/ifaces/default/fw/iptables/options</tt><br />
## До настройки любого интерфейса и обработки значений sysctl устанавливаются действия по-умолчанию (policy) для системных цепочек таблицы filter<br />
## Считывается файл со списком модулей ядра <tt>/etc/net/ifaces/default/fw/iptables/modules</tt> и все указанные там модули (по одному на строку) загружаются; при отсутствии файла никакие модули не загружаются<br />
## Создаются все пользовательские цепочки во всех таблицах (пользовательскими считаются все цепочки, не указанные в переменной IPTABLES_SYSTEM_CHAINS)<br />
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt> и в указанном в нем порядке происходит обработка таблиц iptables; при отсутствии файла обработка происходит в соответствии с сортировкой названий таблиц по имени<br />
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/tablename/loadorder</tt> в каждой обрабатываемой таблице и происходит обработки и загрузка правил для каждой цепочки в порядке, указанном в файле; при отсутствии файла обработка опять же происходит в соответствии с сортировкой по имени<br />
## Если опция IPTABLES_HUMAN_SYNTAX установлена в yes, то считывается и обрабатывается файл с "синтаксисом" <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt><br />
## Файл с правилами обрабатывает построчно (одно правило на строку); если указана опция IPTABLES_HUMAN_SYNTAX, то правило обрабатывается интерпретатором в соответствии с синтаксисом и превращается в реальные опции для команды iptables, после чего запускается iptables с этими параметрами; иначе правило без обработки передается iptables<br />
# При "поднятии" любого интерфейса, кроме default:<br />
## Выполняются все подпункты пунка 1, только все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При "опускании" любого интерфейса, кроме default:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила удаляются из цепочек в обратном порядке, все модули ядра выгружаются в обратном порядке; все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При остановке службы network, виртуальный интерфейс default:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила из всех цепочек удалются командой iptables -F, все модули выгружаются в обратном порядке, все пользовательские цепочки удаляются<br />
## Действия по-умолчанию (policy) для системных цепочек устанавливается в ACCEPT<br />
<br />
<br />
=== Примечания ===<br />
* Правила для iptables можно писать с помощью синтаксиса, подобного синтаксису ipfw и других. Сделано это с помощью простой замены слов на опции iptables. Сами замены описаны в файле <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> (там также описано некоторое количество вспомогательных слов, так что правила можно писать практически на литературном английском :). Синтаксис правила можно совмещать (то есть использовать и заданный в etcnet синтаксис и реальные опции команды iptables)<br />
* Во всех правилах ''нельзя'' использовать названия цепочки и/или таблицы; они будут добавляться автоматически<br />
* В правилах можно использовать любые переменные окружения, выполнять любые команды shell (они должны быть указаны в одну строку). Переменная $NAME содержит имя текущего интерфейса. Переменные $IPV4ADDRESS и $IPV6ADDRESS содержат массив IPV4/IPV6 адресов текущего интерфейса (это обычные bash arrays, можно обращаться к ним по индексу: ${IPV4ADDRESS[2]} или просто $IPV4ADDRESS для первого значения). Для удобства можно использовать файлы options, в которых прописывать какие-либо переменные, к примеру, адреса gateway, ISP, сетей и т.д.<br />
* Во всех файлах можно использовать комментарии (строка должна начинаться с символа # )<br />
* Вам не нужно копировать все файлы настроек в каталог каждого интерфейса. Сначала будут считаны настройки виртуального интерфейса default, а уже потом у текущего интерфейса, соответственно, можно переопределять какие-то параметры для определенного интерфейса<br />
* Описания всех правил в настройках виртуального интерфейса default достаточно для поднятия простого сетевого экрана. При наличии же большого количества правил и интерфейсов есть смысл разделить логически все правила по каждому интерфейсу (опять же, не будет нагружаться процессор вхолостую, если интерфейс, к которому относится много правил, сейчас не "поднят")<br />
* В начале каждого правила можно указать, что с этим правилом делать. Может быть одно из трёх значений:<br />
** -A -- добавление в конец списка правил (при включеном "читабельном" синтаксисе соответствует команде "append")<br />
** -I [num] -- добавление в начало списка правил; если указан необязательный параметр num, то правило будет вставлено в строку правил с таким номером (будьте внимательны, iptables считает несуществующий номер строки ошибкой и не добавляет правило); (при включеном "читабельном" синтаксисе соответствует команде "insert [num]")<br />
** -D -- удаление правила из списка правил (соответственно, при "остановке" интерфейса правило наоборот будет добавлено); (при включеном "читабельном" синтаксисе соответствует команде "delete") <br />
* Если никакое действие не указано, то правило добавляются в цепочку в соответствии со значением переменной IPTABLES_RULE_EMBEDDING<br />
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит все правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов.<br />
<br />
=== Примеры ===<br />
<tt>/etc/net/ifaces/eth0/fw/options</tt><br />
<pre># Our WAN IP address<br />
WAN_IP=5.6.7.8/24<br />
# First net<br />
NET1=1.2.3.0/24<br />
# Second net<br />
NET2=4.3.2.0/24<br />
# Friend net<br />
FRIEND_NET=5.6.7.0/24</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/INPUT</tt><br />
<pre>accept all from any to $IPV4ADDRESS<br />
jump-to COUNT-CHAIN if marked as 0x11</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FORWARD</tt><br />
<pre>jump-to FRIEND-NET if from $FRIEND-NET<br />
append drop tcp from net $NET1 to net NET2<br />
delete drop udp from $NET1 to $NET2<br />
insert reject udp to $WAN_IP<br />
drop icmp to $(somescript.sh)</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FRIEND-NET</tt><br />
<pre>policy reject</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/mangle/PREROUTING</tt><br />
<pre>insert 15 mark tcp as 0x10 if from-iface $NAME and dport is 22<br />
mark tcp as 0x11 if from net $NET1 and from-iface $NAME</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/nat/POSTROUTING</tt><br />
<pre>snat-to $WAN_IP if marked as 0x10</pre><br />
<br />
=== Утилиты ===<br />
* В contrib находятся следующие вспомогательные утилиты:<br />
** Скрипт '''efw''', который предназначен для ручного управления сетевым экраном и умеет следующее:<br />
::<pre>Usage: ./efw [iface] [table] [chain] <action> [iptables rule or action options]<br />
<br />
iface - 'default' (by default), real interface name or 'all' for all interfaces<br />
table - 'mangle', 'filter' (by default), 'nat' or 'all' for all tables<br />
chain - system or user defined chain name (case sensitive!) or 'all' for all chains<br />
action - 'start','stop','restart','load','unload','reload','flush','show|list','count|counters','rule','new|create','remove|delete','zero','policy','rename'<br />
<br />
start - process all tables and chains for given interface (even when chain or table is defined)<br />
stop - process all tables and chains for given interface (even when chain or table is defined)<br />
restart - equivalent to stop then start<br />
load - load rules for given interface, table and chain<br />
unload - unload rules for given interface, table and chain<br />
reload - equivalent to unload then load<br />
flush - flush rules for given interface, table and chain<br />
show - list rules for given interface, table and chain<br />
list - same as show<br />
count - show counters for given table and chains<br />
counters - same as count<br />
rule - parse rule and pass it to iptables<br />
new - create new chain<br />
create - same as new<br />
remove - remove chain<br />
delete - same as remove<br />
zero - zero packet and byte counters in chain<br />
policy - set default policy for chain<br />
rename - rename chain<br />
<br />
Options for action 'show' or 'list':<br />
-n or numeric - numeric output for IP addresses, ports and services<br />
-v or verbose - verbose output of rules<br />
-x or exact - expand numbers instead of rounded numbers<br />
--line-numbers or lines - display line number for each rule</pre><br />
::На текущий момент он умеет частично угадывать интерфейс, таблицу и цепочку (если их не передали в комстроке) и все действия, кроме counters. Так же поддерживается "маска" all для интерфейсов, таблиц и цепочек.<br />
<br />
=== Примеры команд: ===<br />
<br />
* Выгрузить (путем flush) все правила из всех цепочек всех таблиц, удалить цепочки, заданные пользователем, выгрузить все загруженные модули<br />
::::<pre>efw default stop</pre><br />
* Выгрузить (путем удаления каждого правила в обратном порядке) все правила из цепочки FORWARD таблицы filter для интерфейса eth0<br />
::::<pre>efw eth0 unload</pre><br />
* Загрузить все правила для всех цепочек во всех таблицах всех интерфейсов<br />
::::<pre>efw all all all load</pre><br />
* Обработать правило и добавить его во все цепочки таблицы filter<br />
::::<pre>efw default filter all rule accept all from any</pre><br />
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит <u>все</u> правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов. Т.о. самой ходовой командой при изменении конфигурации файрволла является<br />
::::<pre>efw default stop ; efw all start</pre><br />
<br />
<br />
=== Прочее ===<br />
[http://fly.osdn.org.ua/~mike/works/misc/iptables2etcnet/ Конвертор правил], точнее, дампа <tt>iptables-save</tt> (альфа! и требует <tt>ruby</tt>) в соответствующее расположение правил в etcnet<br />
<br />
<br />
----<br />
<br />
Весь этот текст относится к версии etcnet >=0.8.5</div>AndrewKornilovhttps://www.altlinux.org/index.php?title=Etcnet_Firewall&diff=440Etcnet Firewall2008-07-28T16:03:05Z<p>AndrewKornilov: Import from freesource.info</p>
<hr />
<div>[[Category:Admin]]<br />
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/admin/etcnet/firewall}}<br />
<br />
== Настройка сетевого экрана в [[etcnet|/etc/net]] ==<br />
Начиная с версии 0.7.9 etcnet содержит поддержку управления сетевым экраном (firewall). В данный момент поддерживается iptables и ebtables. Реализация основана на группировке таблиц и цепочек в таблицах. Таблицы могут быть только системные, цепочки же, кроме системных, могут быть заданы пользователем. <br />
<br />
=== Системные таблицы и возможные системные цепочки в них ===<br />
{| border="1"<br />
|-<br />
|<br />
Таблица<br />
|<br />
Цепочки<br />
|-<br />
|<br />
filter<br />
|<br />
INPUT FORWARD OUTPUT<br />
|-<br />
|<br />
nat<br />
|<br />
PREROUTING OUTPUT POSTROUTING<br />
|-<br />
|<br />
mangle<br />
|<br />
PREROUTING INPUT FORWARD OUTPUT POSTROUTING<br />
|-<br />
|<br />
raw<br />
|<br />
PREROUTING OUTPUT<br />
|}<br />
<br />
<br />
''([http://img408.imageshack.us/img408/3663/iptables3al7.jpg схема прохождения пакетов]''<br />
<br />
(диаграмма красивая, но неправильная: куда делся nat output ? ;)<br />
<br />
=== Используемые файлы и каталоги ===<br />
<tt>/etc/net/ifaces/default/fw/options</tt> -- файл с настройками сетевого экрана по-умолчанию:<br />
* FW_TYPE -- типа сетевого экрана. Здесь можно указать только iptables, другие типы пока не поддерживаются<br />
* IPTABLES_HUMAN_SYNTAX -- включает или отключает использование поддержки "читабельного" синтаксиса правил для iptables (см. ниже). Значение: yes или no<br />
* IPTABLES_SYSTEM_CHAINS -- список системных цепочек в таблицах. Все цепочки, не указанные здесь, будут автоматически создаваться и удаляться. Значение: названия цепочек (все названия чувствительны к регистру!), разделенные пробелом<br />
* IPTABLES_INPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку INPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_FORWARD_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку FORWARD таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_OUTPUT_POLICY -- действие по-умолчанию для пакетов, попадающих в системную цепочку OUTPUT таблицы filter. Значение: одно из ACCEPT, DROP, QUEUE или RETURN<br />
* IPTABLES_RULE_EMBEDDING -- способ добавления нового правила в цепочку. Значение: APPEND или INSERT, что означает добавление в конец списка правил или в начало соответственно.<br />
<br />
<tt>/etc/net/ifaces/default/fw/iptables/filter</tt>, <tt>/etc/net/ifaces/default/fw/iptables/nat</tt>, <tt>/etc/net/ifaces/default/fw/iptables/mangle</tt> -- каталоги, соответствующие таблицам iptables. В каталогах создаются файлы, соответствующие необходимым системным или пользовательским цепочкам, в которых уже и прописываются сами правила iptables. <br />
<br />
<tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt>, <tt>/etc/net/ifaces/default/fw/tablename/loadorder</tt> -- если такой существует и он не пустой, то обработка таблиц и/или цепочек в таблице происходит в том порядке, который указан в файле (по одному значению на строку). Все таблицы и цепочки, которые не указаны, обрабатываться не будут.<br />
<tt>/etc/net/ifaces/default/fw/iptables/modules</tt> -- список модулей ядра, которые необходимо загрузить перед запуском сетевого экрана. При остановке эти модули выгружаются<br />
<tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> -- описание замен при использовании "читабельного" синтаксиса правил iptables<br />
<br />
<br />
=== Алгоритм работы сетевого экрана ===<br />
# При запуске службы network, виртуальный интерфейс default:<br />
## Если опция CONFIG_FW (в файле <tt>/etc/net/ifaces/default/options</tt>) не установлена в yes, то ничего не делает и происходит выход из процедуры запуска сетевого экрана; иначе переходим к следующему пункту<br />
## Считывается файл настроек <tt>/etc/net/ifaces/default/fw/iptables/options</tt><br />
## До настройки любого интерфейса и обработки значений sysctl устанавливаются действия по-умолчанию (policy) для системных цепочек таблицы filter<br />
## Считывается файл со списком модулей ядра <tt>/etc/net/ifaces/default/fw/iptables/modules</tt> и все указанные там модули (по одному на строку) загружаются; при отсутствии файла никакие модули не загружаются<br />
## Создаются все пользовательские цепочки во всех таблицах (пользовательскими считаются все цепочки, не указанные в переменной IPTABLES_SYSTEM_CHAINS)<br />
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/loadorder</tt> и в указанном в нем порядке происходит обработка таблиц iptables; при отсутствии файла обработка происходит в соответствии с сортировкой названий таблиц по имени<br />
## Считывается файл <tt>/etc/net/ifaces/default/fw/iptables/tablename/loadorder</tt> в каждой обрабатываемой таблице и происходит обработки и загрузка правил для каждой цепочки в порядке, указанном в файле; при отсутствии файла обработка опять же происходит в соответствии с сортировкой по имени<br />
## Если опция IPTABLES_HUMAN_SYNTAX установлена в yes, то считывается и обрабатывается файл с "синтаксисом" <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt><br />
## Файл с правилами обрабатывает построчно (одно правило на строку); если указана опция IPTABLES_HUMAN_SYNTAX, то правило обрабатывается интерпретатором в соответствии с синтаксисом и превращается в реальные опции для команды iptables, после чего запускается iptables с этими параметрами; иначе правило без обработки передается iptables<br />
# При "поднятии" любого интерфейса, кроме default:<br />
## Выполняются все подпункты пунка 1, только все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При "опускании" любого интерфейса, кроме default:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила удаляются из цепочек в обратном порядке, все модули ядра выгружаются в обратном порядке; все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При остановке службы network, виртуальный интерфейс default:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила из всех цепочек удалются командой iptables -F, все модули выгружаются в обратном порядке, все пользовательские цепочки удаляются<br />
## Действия по-умолчанию (policy) для системных цепочек устанавливается в ACCEPT<br />
<br />
<br />
=== Примечания ===<br />
* Правила для iptables можно писать с помощью синтаксиса, подобного синтаксису ipfw и других. Сделано это с помощью простой замены слов на опции iptables. Сами замены описаны в файле <tt>/etc/net/ifaces/default/fw/iptables/syntax</tt> (там также описано некоторое количество вспомогательных слов, так что правила можно писать практически на литературном английском :). Синтаксис правила можно совмещать (то есть использовать и заданный в etcnet синтаксис и реальные опции команды iptables)<br />
* Во всех правилах ''нельзя'' использовать названия цепочки и/или таблицы; они будут добавляться автоматически<br />
* В правилах можно использовать любые переменные окружения, выполнять любые команды shell (они должны быть указаны в одну строку). Переменная $NAME содержит имя текущего интерфейса. Переменные $IPV4ADDRESS и $IPV6ADDRESS содержат массив IPV4/IPV6 адресов текущего интерфейса (это обычные bash arrays, можно обращаться к ним по индексу: ${IPV4ADDRESS[2]} или просто $IPV4ADDRESS для первого значения). Для удобства можно использовать файлы options, в которых прописывать какие-либо переменные, к примеру, адреса gateway, ISP, сетей и т.д.<br />
* Во всех файлах можно использовать комментарии (строка должна начинаться с символа # )<br />
* Вам не нужно копировать все файлы настроек в каталог каждого интерфейса. Сначала будут считаны настройки виртуального интерфейса default, а уже потом у текущего интерфейса, соответственно, можно переопределять какие-то параметры для определенного интерфейса<br />
* Описания всех правил в настройках виртуального интерфейса default достаточно для поднятия простого сетевого экрана. При наличии же большого количества правил и интерфейсов есть смысл разделить логически все правила по каждому интерфейсу (опять же, не будет нагружаться процессор вхолостую, если интерфейс, к которому относится много правил, сейчас не "поднят")<br />
* В начале каждого правила можно указать, что с этим правилом делать. Может быть одно из трёх значений:<br />
** -A -- добавление в конец списка правил (при включеном "читабельном" синтаксисе соответствует команде "append")<br />
** -I [num] -- добавление в начало списка правил; если указан необязательный параметр num, то правило будет вставлено в строку правил с таким номером (будьте внимательны, iptables считает несуществующий номер строки ошибкой и не добавляет правило); (при включеном "читабельном" синтаксисе соответствует команде "insert [num]")<br />
** -D -- удаление правила из списка правил (соответственно, при "остановке" интерфейса правило наоборот будет добавлено); (при включеном "читабельном" синтаксисе соответствует команде "delete") <br />
* Если никакое действие не указано, то правило добавляются в цепочку в соответствии со значением переменной IPTABLES_RULE_EMBEDDING<br />
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса перед измененим файлов или <br />
<br />
<br />
=== Примеры ===<br />
<tt>/etc/net/ifaces/eth0/fw/options</tt><br />
<pre># Our WAN IP address<br />
WAN_IP=5.6.7.8/24<br />
# First net<br />
NET1=1.2.3.0/24<br />
# Second net<br />
NET2=4.3.2.0/24<br />
# Friend net<br />
FRIEND_NET=5.6.7.0/24</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/INPUT</tt><br />
<pre>accept all from any to $IPV4ADDRESS<br />
jump-to COUNT-CHAIN if marked as 0x11</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FORWARD</tt><br />
<pre>jump-to FRIEND-NET if from $FRIEND-NET<br />
append drop tcp from net $NET1 to net NET2<br />
delete drop udp from $NET1 to $NET2<br />
insert reject udp to $WAN_IP<br />
drop icmp to $(somescript.sh)</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/filter/FRIEND-NET</tt><br />
<pre>policy reject</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/mangle/PREROUTING</tt><br />
<pre>insert 15 mark tcp as 0x10 if from-iface $NAME and dport is 22<br />
mark tcp as 0x11 if from net $NET1 and from-iface $NAME</pre><br />
<tt>/etc/net/ifaces/eth0/fw/iptables/nat/POSTROUTING</tt><br />
<pre>snat-to $WAN_IP if marked as 0x10</pre><br />
<br />
=== Утилиты ===<br />
* В contrib находятся следующие вспомогательные утилиты:<br />
** Скрипт '''efw''', который предназначен для ручного управления сетевым экраном и умеет следующее:<br />
::<pre>Usage: ./efw [iface] [table] [chain] <action> [iptables rule or action options]<br />
<br />
iface - 'default' (by default), real interface name or 'all' for all interfaces<br />
table - 'mangle', 'filter' (by default), 'nat' or 'all' for all tables<br />
chain - system or user defined chain name (case sensitive!) or 'all' for all chains<br />
action - 'start','stop','restart','load','unload','reload','flush','show|list','count|counters','rule','new|create','remove|delete','zero','policy','rename'<br />
<br />
start - process all tables and chains for given interface (even when chain or table is defined)<br />
stop - process all tables and chains for given interface (even when chain or table is defined)<br />
restart - equivalent to stop then start<br />
load - load rules for given interface, table and chain<br />
unload - unload rules for given interface, table and chain<br />
reload - equivalent to unload then load<br />
flush - flush rules for given interface, table and chain<br />
show - list rules for given interface, table and chain<br />
list - same as show<br />
count - show counters for given table and chains<br />
counters - same as count<br />
rule - parse rule and pass it to iptables<br />
new - create new chain<br />
create - same as new<br />
remove - remove chain<br />
delete - same as remove<br />
zero - zero packet and byte counters in chain<br />
policy - set default policy for chain<br />
rename - rename chain<br />
<br />
Options for action 'show' or 'list':<br />
-n or numeric - numeric output for IP addresses, ports and services<br />
-v or verbose - verbose output of rules<br />
-x or exact - expand numbers instead of rounded numbers<br />
--line-numbers or lines - display line number for each rule</pre><br />
::На текущий момент он умеет частично угадывать интерфейс, таблицу и цепочку (если их не передали в комстроке) и все действия, кроме counters. Так же поддерживается "маска" all для интерфейсов, таблиц и цепочек.<br />
*** Примеры команд:<br />
**** Выгрузить (путем flush) все правила из всех цепочек всех таблиц, удалить цепочки, заданные пользователем, выгрузить все загруженные модули<br />
::::<pre>efw default stop</pre><br />
**** Выгрузить (путем удаления каждого правила в обратном порядке) все правила из цепочки FORWARD таблицы filter для интерфейса eth0<br />
::::<pre>efw eth0 unload</pre><br />
**** Загрузить все правила для всех цепочек во всех таблицах всех интерфейсов<br />
::::<pre>efw all all all load</pre><br />
**** Обработать правило и добавить его во все цепочки таблицы filter<br />
::::<pre>efw default filter all rule accept all from any</pre><br />
*** Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах iptables, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не default) перед изменением файлов или после изменения использовать команду efw default restart (она полностью удалит <u>все</u> правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов. Т.о. самой ходовой командой при изменении конфигурации файрволла является<br />
::::<pre>efw default stop ; efw all start</pre><br />
<br />
** [http://fly.osdn.org.ua/~mike/works/misc/iptables2etcnet/ Конвертор правил], точнее, дампа <tt>iptables-save</tt> (альфа! и требует <tt>ruby</tt>) в соответствующее расположение правил в etcnet<br />
<br />
=== P.S. ===<br />
Весь этот текст относится к версии etcnet >=0.8.5</div>AndrewKornilovhttps://www.altlinux.org/index.php?title=CreateMdRAID1onLiveSystem&diff=409CreateMdRAID1onLiveSystem2008-07-28T16:02:19Z<p>AndrewKornilov: Import from freesource.info</p>
<hr />
<div>[[Category:Admin]]<br />
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/admin/CreateMdRAID1onLiveSystem}}<br />
<br />
== Создание загрузочного программного RAID1 с помощью средств ядра 2.6 на работающей системе ==<br />
Пишу по памяти, кое-что мог забыть.<br />
<br />
Дано:<br />
* Два HDD<br />
* Необходимость создания md RAID1<br />
* Инсталлятор, который не умеет создавать и ставиться на md RAID (текущий от Compact-а, к примеру)<br />
* Ядро 2.6 и Sisyphus<br />
<br />
Шаги:<br />
1. Инсталлируемся на первый HDD (<tt>/dev/sda</tt>), причем он должен иметь наименьший размер из двух доступных.<br />
<br />
2. Создаем такие же разделы с такими же размерами на втором HDD:<br />
<pre>sfdisk -d /dev/sda | sfdisk /dev/sdb</pre><br />
<br />
3. Запускаем <tt>fdisk /dev/sdb</tt> и проставляем всем разделам тип FD (Linux RAID Auto)<br />
<br />
4. Создаем на каждом разделе degraded md RAID1 (нумерацию удобно начинать с единицы, по номерам разделов на HDD):<br />
<pre>mdadm -Cv /dev/md1 -b internal --level=1 --raid-devices=2 missing /dev/sdb1</pre><br />
и т.д.<br />
NB: '''-b internal''' включает отслеживание использования блоков на массиве, т.е. при ресинхронизации массива будет синкаться не весь массив целиком, а только блоки с данными.<br />
<br />
5. Создаем на каждом массиве нужную файловую систему:<br />
<pre>mkfs.ext3 -E stride=16 /dev/md1</pre><br />
и т.д.<br />
NB: для достижения более высокой производительности можно использовать опцию mkfs.ext3 '''-E stride=''', т.е. подогнать ФС под размер страйпа. stride=stripe/block-size. Т.е. в нашем случае это 64/4=16<br />
См. [http://wiki.centos.org/HowTos/Disk_Optimization http://wiki.centos.org/HowTos/Disk_Optimization]<br />
<br />
6. Судя по всему, swap тоже нужно создавать на raid-массиве:<br />
<pre>mkswap /dev/mdX</pre><br />
<br />
7. Инсталлируем grub (нынешнее lilo тоже умеет загрузку с raid)<br />
<br />
8. Создаем новый образ initrd:<br />
<pre>mkinitrd --with-raid --with raid1 /boot/initrd-`uname -r`-raid1.img `uname -r`</pre><br />
<br />
9. Монтируем новый root (который <tt>/dev/mdX</tt>) куда-нибудь в <tt>/mnt/raid1/root</tt>, создаем в нем нужные каталоги из нашего текущего корня, далее в них монтируем новые разделы, если такие есть (то бишь, создаем <tt>/mnt/raid1/root/var</tt>, к нему монтируем какой-нибудь <tt>/dev/md6</tt>, уже после этого создаем <tt>/mnt/raid1/root/var/log</tt> и к нему уже монтируем какой-нибудь <tt>/dev/md7</tt>)<br />
<br />
10. Копируем все файлы с текущего HDD на новый (способов много, cp -ax, cpio, rsync и т.д), не забыл пропустить <tt>/proc</tt> и <tt>/sys</tt> (но создав их в новом root). Пример с rsync:<br />
<pre>#!/bin/sh<br />
<br />
renice 19 -p $$ ||:<br />
ionice -c3 -p$$ ||:<br />
<br />
rsync -vaPHx --delete --delete-after --numeric-ids / /mnt/newroot/<br />
rsync -vaPHx --delete --delete-after --numeric-ids /usr /mnt/newroot/usr<br />
rsync -vaPHx --delete --delete-after --numeric-ids /var /mnt/newroot/var</pre><br />
''Предполагается, что у нас на отдельные разделы вынесены /, /usr, /var. Применён ключ '''-x''' у rsync, чтобы он не выходил за границы одной файловой системы. Полезно, т.к. у нас могут быть примонтированы разные левые ресурсы куда-нибудь в /mnt, и ещё используются bind-mounts.''<br />
Для уменьшения downtime системы можно выполнить такой rsync два раза - на живой системе и потом перейдя в '''init 1'''<br />
<br />
11. Делаем <tt>chroot /mnt/raid1/root</tt><br />
<br />
12. Правим <tt>/etc/fstab</tt>, изменяя все разделы <tt>/dev/sdaX</tt> на массивы <tt>/dev/mdX</tt><br />
<br />
13. Создаем в #/boot/grub/menu.lst## записи вида:<br />
<pre># Boot automatically after 3 secs.<br />
timeout 3<br />
<br />
# By default, boot the first entry.<br />
default 2614-vs26-smp-raid1 (hd0,0)<br />
<br />
title 2614-vs26-smp-raid1 (hd0,0)<br />
root (hd0,0)<br />
kernel (hd0,0)/vmlinuz-2.6.14-vs26-smp-alt5 root=/dev/md2 vga=normal<br />
initrd (hd0,0)/initrd-2.6.14-vs26-smp-alt5-raid1.img<br />
<br />
title 2614-vs26-smp-raid1 (hd1,0)<br />
root (hd1,0)<br />
kernel (hd1,0)/vmlinuz-2.6.14-vs26-smp-alt5 root=/dev/md2 vga=normal<br />
initrd (hd1,0)/initrd-2.6.14-vs26-smp-alt5-raid1.img</pre><br />
<br />
14. Инсталлируем grub.<br />
<pre>#!/bin/sh<br />
<br />
grub --batch <<EOF<br />
device (hd0) /dev/sda<br />
root (hd0,0) # (0 - это тот раздел, где у вас /boot, обычно /dev/sdX1, в grub-е просто нумерация с 0)<br />
setup (hd0)<br />
device (hd0) /dev/sdb<br />
root (hd0,0)<br />
setup (hd0)<br />
quit<br />
EOF</pre><br />
<br />
15. Отмонтируем все и перегружается. Если все правильно, то вы должны загрузиться с md raid1 массивов, которые пока располагаются на втором HDD<br />
<br />
16. Если все работает, то запускаем <tt>fdisk /dev/sda</tt> и проставляем всем разделам тип FD (Linux RAID Auto)<br />
<br />
17. Далее делаем для каждого raid-массива:<br />
<pre>mdadm /dev/md1 --add /dev/sda1</pre><br />
и т.д.<br />
<br />
18. После этого регулярно поглядываем в <tt>/proc/mdstat</tt>, нам нужно дождаться, когда ядро синхронизирует все массивы (при этом в <tt>/proc/mdstat</tt> исчезнут все упоминания о прогрессе синхронизации)<br />
<br />
19. Перегружаемся и, если все хорошо, прописываем в <tt>/etc/mdadm.conf</tt> что-то вроде:<br />
<pre>MAILADDR root<br />
PROGRAM /usr/sbin/mdadm-syslog-events<br />
DEVICE partitions<br />
ARRAY /dev/md1 devices=/dev/sda1,/dev/sdb1<br />
ARRAY /dev/md2 devices=/dev/sda2,/dev/sdb2</pre><br />
и т.д.<br />
<br />
20. Включаем сервис mdadm<br />
<br />
21. Пробуем отключить каждый HDD по очереди и загрузиться.<br />
<br />
<div style="display: inline; color: red;">Это, похоже, уже не актуально:</div><br />
p.s. В некоторых случаях устройства <tt>/dev/md*</tt> будут не доступны. В данном случае могут помочь:<br />
<pre>service udevd stop</pre><br />
и/или<br />
<pre>/lib/mkinitd/busybox raidautorun /dev/mdX</pre><br />
<br />
FIXME<br />
How to speed up raid1 resync ?<br />
<br />
Just echo large numbers into both min and max resync speed proc entries:<br />
/proc/sys/dev/raid/spped_limit_max and speed_limit_min<br />
<br />
e.g. as root do:<br />
<br />
echo 200000 > /proc/sys/dev/raid/speed_limit_max<br />
echo 200000 > /proc/sys/dev/raid/speed_limit_min<br />
<br />
And watch the speed fly up till it maxes out your hardware. (-:<br />
<br />
The above will set both speeds to 200MiB/s which ought to be more than<br />
your devices can do...</div>AndrewKornilov