Первое моё общение с Линуксом состоялось около шести лет назад. Тогда это был какой-то свежевышедший
Red Hat, который мы с другом смогли установить, но при этом войти в него у нас так и не получилось.
Однако статья не об этом. Позже через мои руки и голову прошли почти все
семейства дистрибутивов Linux, и везде я замечал свои подходы к
автонастройке сети. И в этом цикле статей я постараюсь осветить наиболее
популярные из них. Надеюсь, они будут полезны тем пользователям,
которые пока ещё нажимают на кнопки и проставляют галочки в графических
менеджерах настройки, но уже понимают, что это не true :)
Возможно познавательными эти статьи будут и тем, кто (не от большого
знания) пишет свои скрипты управления сетью и помещает их в какой-нибудь
rc.local
Итак, в первой части речь пойдёт о семействе номер один, одном из самых обширных по числу дистрибутивов,
Red Hat based.
Сюда, например, относятся такие используемые сейчас дистрибутивы, как:
- Fedora
- RHEL/CentOS
- Mandriva
- ASPLinux
Служебные скрипты для настройки сети и сами конфиг-файлы в этих
дистрибутивах хранятся по традиции в каталоге
/etc/sysconfig/network-scripts/
Там вы найдёте несколько скриптов ifup-* и столько же ifdown-*, которые,
соответственно, поднимают или опускают определённый тип интерфейса, а
также ifcfg-* (звёздочка — это имя), где хранятся настройки этих самых
интерфейсов.
Если сеть ещё не настроена, то вы обнаружите там ifcfg-lo, описывающий интерфейс loopback. В имеющейся у меня под рукой
Fedora Core 7 этот файл выглядит следующим образом: (комментарии из файла удалены)
DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
Не все параметры, перечисленные здесь являются обязательными. Зачастую
чтобы задать интерфейс достаточно указать IPADDR и NETMASK. Параметр
DEVICE необходим, если вы хотите, чтобы в имени скрипта после «ifcfg-»
стояло не имя интерфейса, а какое-нибудь другое слово. Здесь же можно
указывать такие параметры как GATEWAY, BOOTPROTO (static или dhcp),
HWADDR (если есть желание изменить mac-адрес интерфейса) и так далее.
Полный список возможных параметров зависит от типа поднимаемого
интерфейса и дистрибутива. А, учитывая скудность официальной информации,
его можно узнать и познать только перелопатив скрипты.
Такими конфиг-файлами можно задавать различные ppp-интерфейсы, ip-туннели, vlan'ы и так далее.
Следующий пример показывает настройку ipip-туннеля (ifcfg-tun0):
DEVICE=tun0
MY_OUTER_IPADDR=172.16.0.2
PEER_OUTER_IPADDR=192.168.0.1
MY_INNER_IPADDR=10.0.0.2
PEER_INNER_IPADDR=10.0.0.1
TYPE=IPIP
TTL=255
В этом примере мы, имея адрес 172.16.0.2, создаём туннель с машиной
192.168.0.1, указывая TTL=255, и присваиваем туннелю адрес 10.0.0.2 peer
10.0.0.1.
Не все знают, что помимо файлов ifcfg-* в этом же каталоге можно помещать соответствующие им файлы rule-* и route-*
Они нужны, соответственно, чтобы прописывать правила маршрутизации и сами маршруты (
ip rule, ip route
), например при использовании
source-policy routing.
Для указанного выше туннеля эти файлы могут выглядеть так.
rule-tun0:
from 10.0.0.2 lookup mytable
route-tun0:
default dev tun0 table mytable
192.168.0.0/24 dev tun0
Создав эти файлы мы снимаем с себя головную боль о том, чтобы
соответствующие правила и маршруты создавались и удалялись при поднятии и
опускании интерфейса соответственно.
Ещё одна интересная возможность — автоматическое создание алиасов. Если у
вас есть интерфейс eth0 с адресом 192.168.0.1, а вы хотите повесить ещё
и 192.168.0.2, то достаточно создать файл ifcfg-eth0:1, куда вписать
помимо вышеперечисленных параметров (IPADDR, NETMASK и так далее), ещё
один — REALDEVICE=eth0.
Если же вдруг возникла необходимость в создании большого числа алиасов, а
отдельные файлы для каждого создавать не хочется, то и тут есть выход:
нас спасёт ifcfg-eth0-range, который может выглядеть так:
IPADDR_START=192.168.0.5
IPADDR_END=192.168.0.15
CLONENUM_START=3
Этот пример создаст интерфейсы eth0:3 — eth0:13 с адресами от 192.168.0.5 до 192.168.0.15.
Ну и, наконец, нельзя не упомянуть о каталогах ifup.d и ifdown.d, лежащих там же (в /etc/sysconfig/network-scripts).
В эти каталоги вы можете поместить свои файлы, которые будут выполняться
при поднятии и опускании интерфейса. Вашим скриптам будет передан один
параметр $1 — это имя интерфейса, который был поднят или опущен.
Имея сеть, настроенную по этим принципам, вы всегда можете
поднять/опустить отдельный интерфейс командой ifup name (ifdown name),
где name — это ваш интерфейс. Чтобы перезагрузить всю сеть, достаточно
набрать service network reload.
Следующая часть будет посвящена не семейству, а одному дистрибутиву —
Alt Linux. Несмотря на его прямые RedHat-корни, разработчики практически
полностью заново написали всю систему управления сетью, которая
получила имя etcnet и заслужила (на мой взгляд) более пристального
внимания :)