Среда, 24.04.2024, 15:39
Приветствую Вас Гость | RSS
Мой сайт
Главная
Регистрация
Вход
Форма входа

Меню сайта

Категории раздела
Об ОС Windows [137]
В категории размещаются статьи, касающщиеся операционных систем от Microsoft.
Об ОС *Nix [198]
В данной категории собраны статьи об ОС семейства Unix/Linux/FreeBSD/...
Справочные материалы [351]
Справка по всему разделу.
Виртуализация и Облака [46]
Networks & Routing [86]
DataBases [22]

Наш опрос
Оцените мой сайт
Всего ответов: 209

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » Статьи » Системное администрирование » Об ОС *Nix

Настройка сети в Linux через конфиг-файлы, ч.1 (RedHat + CentOS)

Настройка сети в Linux через конфиг-файлы, ч.1

Первое моё общение с Линуксом состоялось около шести лет назад. Тогда это был какой-то свежевышедший 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 и заслужила (на мой взгляд) более пристального внимания :)
Сервер Айдеко. Скачайте готовый Linux Сервер для локальной сети!
www.ideco-software.ru

Онлайн-консультации. Настройка, решение нестандартных задач.
www.tipmeet.com

Быстро, просто, дешево. Отличные цены на домен и хостинг!
domen.com.zp.ua

Hi-tech новости. Статьи о передовых технологиях. Только интересные обзоры!
www.kyivpost.com

комментарии (34)

  • Спасибо за референс.
    Было бы здорово, если бы вы ещё написали как меня макадрес при старте системы.

    да, ещё добавьте opensuse в список, там такие же конфги, только лежат в /etc/sysconfig/network
    • МАК меняется так же как и другие параметры в файлах ifcfg-ethXX:

      HWADDR=00:xx…
      • О чём, кстати, в статье и написано :)
      • У меня подозрение, что HWADDR не совпадет с MAC карточки и файл будет обозван .bak и интерфейс не поднимется.

        Помнится можно было через ifconfig ethX hw ethernet MAC_ADDR, что можно закинуть в rc.local
        • нет, все поднимется без ошибок.

          через ifconfig конечно тоже можно сделать, но это не совсем красиво.
    • в генту надо прописать в /etc/conf.d/net строчку
      mac_<имя интерфейса>="<мак адрес>"

      например
      mac_eth0=«00:04:61:50:e9:87»

      кстати, обзор настройки сети в генту будет? по-моему там попроще чем в RH-based дистрибах конфигурируется сеть
  • В принципе это всё знаю, но в свое время эта информация мне бы пригодился. Хотя может именно из-за отсутствия этой информации в популярных источниках ( не книгах ) я перерыл и перечитал множество другой полезной инфы. Спорно вопщем =)
    • Я прошёл весь путь от тыкания в кнопочки до написания этой статьи :) И считаю нужным передать кому-либо свой полученный опыт, чтобы другие не повторяли ошибки. Уверен, что эта информация также может для многих послужить толчком к более углубленному изучению описанных процессов :)
  • Самое сложное, с чем недавно столкнулся в федоре десятке, ipv6 ((
    Не резолвится с ним днс и нормально не работает сеть.
    Лиса лечится, включением параметров в about:config, но вся система без резолва днс.
    • а в чем проблема?
      как отключить ipv6?
      • отключается — но сети нет.
        это уже есть в багзиле «красношапочников».
        • странно, у меня не на одной машине стоит и все работает
          grep ipv6 /etc/modprobe.conf
          install ipv6 /bin/true

          можно ссылку на БЗ?
          • https://bugzilla.redhat.com/show_bug.cgi?id=459756
  • Кто бы еще про Ubuntu/Debian написал такую же статью… В них подкаталога /etc/sysconfig/… нет как понятия. Достало уже при переключении подсетки не забывать еще и маршрутизацию передергивать.
    • Для Ubuntu/Debian это выглядит так:

      $ cat /etc/network/interfaces
      auto lo # start lo automatically
      iface lo inet loopback # set lo interface as a loopback
      
      auto ath0 # start ath0 interface automatically (ath0 - это в моём случае вай-фай карта)
      iface ath0 inet static # статические параметры)
       address 192.168.1.2 # IP-адрес
       netmask 255.255.255.0 # маска
       gateway 192.168.1.1 # гейтвей
       dns-nameserver 206.191.0.140 # dns-server
      


      Вот, собственно, и всё :)

      Для настройки по DHCP пишем так:
      auto ath0
      iface ath0 inet dhcp

      • Ну, давайте разберем ваш бодрый пост. Учитывая, что man /etc/network/interfaces показывает пять строчек с примерами, без какого либо описания что к чему, думаю это будет интересно не только мне.

        1. auto lo — автоматически стартовать интерфейс с именем «lo». Вопрос — при каком событии автоматически стартовать то? При старте компьютера? Или при каких-то других условиях?

        2. iface lo inet loopback — интерфейс с именем «lo» будет loopback-интерфейсом. Это понятно. А что есть inet в середине строки? Есть конечно подозрение, что имеется в виду протокол IPv4, но так как формат файла нигде не описан, хотелось бы уточнить.

        3. iface ath0 inet static… — совершенно неясно как вы так лихо смогли перенести строки. Формат файла /etc/network/interfaces это позволяет? Как определяется конец конфигурирующей команды? Лексическим анализом всех опций? По пустой строке? Или между ключевыми словами типа «auto», «iface» всё считается опциями соответсвующего ключевого слова?

        4. Важна ли последовательность опций для ключевого слова iface? Или можно в любой последовательности их прописывать?

        5. Как применяются изменения, внесенные в файл etc/network/interfaces? Они сами применятся через несколько секунд после редактирования? Или чтобы применились изменения, надо перезагрузить компьютер? Или нужно дать какую-то команду, перезапустить какой-то демон? Или изменения вступают в силу при после команд ifdown и ifup для соответсвущего интерфейса?
        • Что-то я не пойму причину Вашего сарказма «давайте разберём ваш бодрый пост». Скудность информации — возможно, но я всё-таки не статью писал, а приводил пример, как это делается. Да, кстати, копипаст с примера не заработает, потому что комментарии в конце строк недопустимы.

          Учитывая, что Вы упомянули man interfaces — странно, что Вы не нашли там ответы на поставленные Вами вопросы:

          1. При вызове ifup с параметром -a (обычно используется в загрузочных скриптах).

          2. inet — семейство адресов IPv4. Доступны также семейства ipx и inet6 (IPX и IPv6 соответственно).

          3. Куда чего «перенести»? Строки с параметрами? Они и должны быть на отдельных строках, каждый параметр на своей. Набор параметров свой для каждого семейства адресов, и может дополняться определёнными пакетами (dns-nameserver, например, не является стандартным, он предназначен для пакета dnsutils). Пакет wireless-tools тоже добавляет некоторые параметры, такие как wireless-essid, wireless-channel и так далее.

          4. Нет, не важна.

          5. См. п.1.
          Сам я обычно делаю /etc/init.d/networking restart
          • > Учитывая, что Вы упомянули man interfaces — странно, что Вы не нашли там ответы на поставленные Вами вопросы

            man /etc/network/interfaces

            Форматирование, как грица, авторское:

            auto lo iface lo inet loopback address 127.0.0.1 netmask
            255.0.0.0

            iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0
            gateway 192.168.1.1

            auto eth1 iface eth1 inet dhcp

            auto eth2 iface eth2 inet dhcp

            auto ath0 iface ath0 inet dhcp

            auto wlan0 iface wlan0 inet dhcp

            iface dsl-provider inet ppp pre-up /sbin/ifconfig eth0 up # line
            maintained by pppoeconf provider dsl-provider

            auto eth0

            Manual page interfaces line 1/132 (END)

            Подумал, что это не мануал, а почему-то содержимое файла /etc/network/interfaces (с какой стати?). Глянул поверхностно — файл другой.

            Потом ковырялся-ковырялся, оказалось что за каким-то хреном, если файла помощи нет, а файл, по которому нужно получить помощь, существует, то man показывает содержимое этого файла (зачем?). Причем, текст переформатируется по одному только man известному принципу. Обратите внимание — там две команды в одной строке. Вообще бред. Причем, это срабатывает не для всех файлов, для некоторых man честно пишет — «Нет записи руководства».

            Да, указываю обычно полный путь к файлу, ибо на других дистрах сталкивался, что какой-нить man crontab не работает, а man /etc/crontab показывает мануал.

            По п. 3.

            Вот, значит разбор файла идет по принципу «между стартовыми ключевыми словами типа «auto», «iface» всё считается опциями соответсвующего ключевого слова», причем отдельную опцию надо размещать в отдельной строке, писать несколько опций в строку нельзя.

            Когда конфигуришь что-то через конфигфайлы, и не знаешь тонкостей формата, понаписать можно что угодно, а потом чешешь репу «чего оно не работает?». На конфигурирование простой вещи может несколько суток уйти. Особенно, если найдешь решение на форуме, в котором форматирование побилось, и думай опять, что к чему и где надо править.
            • >Когда конфигуришь что-то через конфигфайлы, и не знаешь тонкостей формата, понаписать можно что угодно, а потом чешешь репу «чего оно не работает?». На конфигурирование простой вещи может несколько суток уйти. Особенно, если найдешь решение на форуме, в котором форматирование побилось, и думай опять, что к чему и где надо править.

              Ну, это не к чести отвечающих на форумах, которые не удосужатся проверить, совпадает ли то, что они написали с тем, что находится в файле. А вообще хорошим тоном считается прикрепление файла целиком. Во-превых, так он будет в первозданном виде, а во-вторых его скачают только те, кому он нужен, а остальным не нужно будет листать несколько экранов (например, в случае xorg.conf :)) неинтересного им кода.
  • «Возможно познавательными эти статьи будут и тем, кто (не от большого знания) пишет свои скрипты управления сетью и помещает их в какой-нибудь rc.local» — возможно как раз от большого знания хаоса в дистрибутивах тазика торвальца.

    терпеть не могу федоры, рхелы, центосы и прочую «ынтырпрайз» шваль из-за вот такого сифилиса.
  • Спасибо! Статья сильно помогла при настройке CentOS, и, надеюсь, поможет ещё многим.


Источник: http://habrahabr.ru/blogs/linux/47230/
Категория: Об ОС *Nix | Добавил: admin (12.10.2010)
Просмотров: 2964 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2024