четверг, 16 января 2014 г.

Debian: Настройка сети

Актуально для: Debian Lenny, Squeeze; Ubuntu
Денис "Reagent" Ходус @ 20.01.2011
Настройка сети в Linux Debian. Топик призван стать памяткой для системного администратора "как управлять сетью в Debian". В нем рассказываются основные принципы и действия по управлению сетевыми настройками этого семейства операционных систем.


Сетевые интерфейсы

Debian называет сетевые карты по имени eth и номеру. Виртуальные интерфейсы (loopback, vpn и т.п.) Debian именует отдельно, так-же по имени (например, tun, tap) и номеру за ним.

Например, если у Вас в компьютере 2 сетевых карты, то называться они будут по-умолчанию eth0 и eth1.

Следует учесть, что эта операционная система перманентно привязывает MAC-адрес физического сетевого интерфейса (сетевой карты) к номеру ethX. Так, если у Вас была сетевая карта в компьютере с именем eth0 и Вы ее поменяли, то, загрузившись после замены Вы не увидите ожидаемого eth0, а увидите уже eth1.

Как частный, но показательный случай: сервер с двумя сетевыми интерфейсами eth0 и eth1. Одна из сетевых карт сгорает и администратору приходится ее поменять. Запустив сервер он так и не дожидается ответа на пинг этого сетевого интерфейса. Зайдя под консолью - что он видит? Он видит старую вторую сетевую карту с именем eth1 и новую, но не с именем eth0, как ожидал, а с названием eth2! А это потому, что Debian закрепил за интерфейсом eth0 конкретный интерфейс с конкретным MAC-адресом.

Посмотреть закрепленные карты и их MAC можно по пути:

/etc/udev/rules.d/70-persistent-net.rules

Отредактировав этот файл Вы можете удалить старые сетевые карты из списка Debian.


IP-адреса

Долговременные настройки хранятся в файле /etc/network/interfaces

Вот пример файла:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.250
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.0.240

В этом файле определен IPv4 адрес 192.168.0.1 на сетевой карте eth0. Так-же определен шлюз по-умолчанию 192.168.0.250. Опция dns-nameservers оставлена на случай отсутствия в файле /etc/resolv.conf информации о DNS-серверах.

Следует учесть, что современный Debian не нуждается в строках network и broadcast, прекрасно вычисляя их самостоятельно из IP-адреса и маски. Однако если Вы хотите перезадать эти значения - указать такие опции придется.

А вот пример этого файла для 2х сетевых карт:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.250
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.0.240

auto eth1
iface eth1 inet static
        address 192.168.100.1
        netmask 255.255.255.0
        network 192.168.100.0
        broadcast 192.168.100.255


На ходу значения IP адресов можно менять утилитой ifconfig:

# ifconfig eth0 inet 192.168.0.33 netmask 255.255.255.0

Эта команда поменяет у сетевой карты eth0 IPv4 адрес на 192.168.0.33 с маской /24.


Если сетевые реквизиты требуется получать по DHCP - указываем в файле interfaces, например:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp


Указание DNS-сервера

DNS-серверы указываются (не более трех) в файле:

/etc/resolv.conf

Например, вот пример такого файла:

nameserver 192.168.0.240
nameserver 192.168.0.242

Поменяв в файле значения они сразу начинают действовать.


Имя машины и домен

Посмотреть или поменять на ходу имя машины можно командой hostname:

# hostname
myserver
# hostname boo
# hostname
boo

Домен указывается в файле:

/etc/resolv.conf

например, вот как пример файла resolv.conf:

domain mydomain.ru
nameserver 192.168.0.240
nameserver 192.168.0.242
nameserver 192.168.0.244

Перманентно имя машины можно поменять в файле:

/etc/hostname

Но помните, что после этого необходимо поменять так-же имя хоста в файле

/etc/hosts

Чтобы значения в нем соответствовали новому имени хоста (там прописаны такие вещи, как 127.0.0.1, например).


Маршрутизация

Схема статической маршрутизации в Debian традиционная: статические маршруты и шлюз по-умолчанию.

На-лету маршрутизацией можно управлять через утилиту route:

# route add -net 10.0.3.0/24 gw 192.168.0.251

Эта команда добавит маршрут к сети 10.0.3.0:255.255.255.0 на роутер с адресом 192.168.0.251.

# route del -net 10.0.3.0/24

А эта команда наоборот, удалит маршрут 10.0.3.0/24.

Роутер по-умолчанию указывается как 0.0.0.0/32 или default, например:

# route add default gw 192.168.0.250

Эта команда добавит шлюз по-умолчанию 192.168.0.250.

Посмотреть текущие маршруты можно командой:

# netstat -r


Перманентно статические маршруты указываются в файле

/etc/network/interfaces

Например, возьмем вот такой файл:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.250
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.0.240
        up route add -net 10.0.0.0/24 gw 192.168.0.251
        up route add -net 10.0.1.0/24 gw 192.168.0.252
        up route add -net 10.0.2.0/24 gw 192.168.0.253

В этом файле видно, что:

а) Шлюз по-умолчанию 192.168.0.250

б) При поднятии интерфейса будут добавлены маршруты к сетям 10.0.0.0/24, 10.0.1.0/24 и 10.0.2.0/24 через, соответственно, 192.168.0.251, 192.168.0.252 и 192.168.0.253.


Маршрутизатор

По-умолчанию система не выполняет маршрутизацию проходящих пакетов. Чтобы ее включить (превратить наш сервер в маршрутизатор) необходимо установить переменную ядра

net.ipv4.ip_forward

в значение "1".

Например:

# sysctl net.ipv4.ip_forward=1

Чтобы это значение сохранилось после перезагрузки - добавим его в файл

/etc/sysctl.conf

Вот такой строчкой:

sysctl net.ipv4.ip_forward=1


Сетевые алиасы (несколько IP-адресов на одном интерфейсе)

Нередко можно встретить ситуацию, когда одной сетевой карте (или просто одному сетевому интерфейсу) необходимо назначить не один, а несколько IP-адресов. В таком случае:

а) Обязательно присваивается основной адрес интерфейсу ethX
б) Алиасы (добавочные IP-адреса) присваиваются как ethX:Y, где Y - номер алиаса

Например, вот так мы присвоим еще 2 IP-адреса интерфейсу eth0:

# ifconfig eth0:1 inet 192.168.1.1 netmask 255.255.255.0
# ifconfig eth0:2 inet 192.168.2.1 netmask 255.255.255.0

Перманентно эти интерфейсы указываются в том же файл, что и все остальные:

/etc/network/interfaces

Давайте приведем пример такого файла:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.250
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 127.0.0.1

auto eth0:1
iface eth0:1 inet static
        address 10.0.1.2
        netmask 255.255.255.0
        network 10.0.1.0
        broadcast 10.0.1.255

auto eth0:2
iface eth0:2 inet static
        address 10.100.10.3
        netmask 255.255.255.0
        network 10.100.10.0
        broadcast 10.100.10.255

auto eth0:3
iface eth0:3 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255

Тут видно, что мы указали один основной адрес и 3 алиаса. Следует заметить, что к алиасам нельзя применять опции gateway или dns-nameservers.


VLANы

Для начала, убедитесь, что у Вас установлен пакет vlan:

# dpkg --list | grep vlan
ii  vlan                               1.9-3                      user mode programs to enable VLANs on your ethernet devices

Если нет, то устанавливаем:

# aptitude install vlan

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

/etc/network/interfaces

Например, вот пример такого файла:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.250
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 127.0.0.1

auto vlan333
iface vlan333 inet static
        address 10.0.1.2
        netmask 255.255.255.0
        vlan_raw_device eth0

auto eth0.999
iface eth0.999 inet static
        address 10.100.10.3
        netmask 255.255.255.0
        vlan_raw_device eth0

auto eth0.100
iface eth0.100 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        vlan_raw_device eth0

Здесь видно объявление 3х VLANов. Причем и запись vlan333, и записи вида eth0.999 верны. Отличие будет лишь в их название в виде интерфейсов. Я предпочитаю вид eth.XXX, что дает мне сразу информацию о том - на каком интерфейсе влан лежит.

Так-же добавилась опция vlan_raw_device, указывающая системе - на какой сетевой карте этот VLAN будет таггироваться.

В процессе работы VLANами можно управлять через утилиту vconfig. Например:

# vconfig add eth0 777

Эта команда добавит VLAN=777 к интерфейсу eth0.

# vconfig rem vlan777

А эта команда - удалить VLAN vlan777.


Сетевые мосты

Что это такое - почитать можно в интернете. Для организации нам потребуются установленные bridge-utils. Проверим их наличие:

# dpkg --list | grep bridge-utils
ii  bridge-utils                         1.4-5                      Utilities for configuring the Linux Ethernet bridge

Если нет - ставим:

# aptitude install bridge-utils

Мосты прописываются в файле

/etc/network/interfaces

Например, так:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Physical interface
#auto eth0
#iface eth0 inet manual

#auto eth1
#iface eth1 inet manual

# The primary network interface
auto br0
iface br0 inet static
        bridge_ports eth0 eth1
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.250
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.0.240

Тут видно, что мы не настраиваем сетевые карты (не прописываем им IP адрес, не даем получить реквизиты по DHCP). Это необходимо так и делать!

Сетевой мост мы называем br0. Уже на нем прописываем все необходимые реквизиты и указываем опцию bridge_ports, которая показывает - какие сетевые интерфейсы включать в этот мост.

На ходу мосты управляются утилитой brctl. Например, таким образом можно создать сетевой мост из 2х сетевых карт (карты не должны быть настроены и должны находиться в состоянии down):

# brctl addbr "br0"
# brctl addif br0 eth0
# brctl addif br0 eth1
# ifconfig br0 up

Эта последовательность команд:
а) Создаст виртуальный коммутатор br0
б) Добавит в него сетевые интерфейсы eth0 и eth1
в) "Поднимет" мост (up), т.е. включит его

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

# ifconfig br0 inet 192.168.0.254 netmask 255.255.255.0

Другие примеры:

# brctl delif br0 eth1

Эта команда удалит из виртуального коммутатора (моста) интерфейс eth1.

# brctl delbr br0

А эта команда удалит мост br0 совсем.


Link aggregation (Bonding)

Агрегация интерфейсов - способ поднять скорость передачи данных и/или обеспечить отказоустойчивость путем использования двух или более физических сетевых карт. Работает это так, что несколько сетевых карт выступают в роли одной виртуальной (не путать с мостом!), при этом, в зависимости от режима работы, эти сетевые карты или увеличивают пропускную способность (в то количество раз - сколько объединено сетевых карт), или дают отказоустойчивость (т.е. работает одна карта, если она сдыхает - начинает работать вторая), или и то, и другое.

Для работы требуется установленный пакет ifenslave-2.6. Если не установлен - ставим:

# aptitude install ifenslave-2.6

Конфигурация прописывается в файле

/etc/network/interfaces

Например, так:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Physical interface
#auto eth0
#iface eth0 inet manual

#auto eth1
#iface eth1 inet manual

# The primary network interface
auto bond0
iface bond0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.250
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.0.240
        slaves eth0 eth1
        bond_mode round-robin
        bond_miimon 100
        bond_downdelay 200
        bond_updelay 200

Здесь видно, что физические карты не настраиваются - им не присваиваются статические IP адреса и не позволяется использовать DHCP для получения реквизитов. Вместо этого они участвуют в создании bond0 интерфейса, который уже и получает сетевые реквизиты.

ВНИМАНИЕ! На другой стороне сетевых кабелей необходимо, чтобы сетевые карты были настроены один-в-один так-же (т.е. работали в том же режиме). Если это аппаратные коммутаторы или маршрутизаторы - придется подбирать режим работы - какой поддерживается "железкой" на той стороне. Если это сервер - то лучше всего использовать:

а) такие-же сетевые карты (если это возможно)
б) такую-же ОС (это снизит вероятность сбоев в работе агрегатирования)


Автозапуск скриптов при поднятии/выключении интерфейса

Для этого служат 4 директории:

/etc/network/if-pre-up.d
/etc/network/if-up.d
/etc/network/if-down.d
/etc/network/if-post-down.d


Соответственно, в директории if-pre-up.d располагаются скрипты, которые запускается перед поднятием интерфейса; в if-up.d - скрипты, которые запускаются после поднятия интерфейса; в if-down.d - перед выключением интерфейса, а в if-post-down.d - после выключения.

Среди прочего, вызываемые скрипты могут использовать специальные переменные из окружения вызывающего процесса, например $IFACE (называние интерфейса) или $MODE (операция). Подробнее - в man-страницах.
Комментариев: 10
Страница: 1 из 1
Гость @ 12.11.2013 18:53
Автор спасибо ! Отлично всё написано !
Гость @ 04.10.2013 01:36
spasibo tebe avtor ,  klevaiy stateika
Гость @ 16.08.2013 12:49
СПАСИБО, автору и авторам! ОГРОМНОЕ!
Гость @ 12.12.2012 11:00
Хорошая и подробная статья, я тоже написал статью про настройку сети в debian/ubuntu
http://www.artcom-ufa.ru/posts/2011/07/20/nastroika-seti-v-linux
Гость @ 29.10.2012 18:46
Я так понял что статическая маршрутизация в /etc/network/interfaces типа:
up route add -net 10.0.0.0/24 gw 192.168.0.251
Не будет работать если не включена маршрутизация: # sysctl net.ipv4.ip_forward=1 ?
А то я второй день бьюсь. А netstat -r не кажет никаких мною добавленных в /etc/network/interfaces
маршрутов.
Гость @ 25.10.2012 17:13
хорошая статья
Гость @ 07.09.2012 17:55
Классная статья! Просто, доступно, понятно и с примерами! С каждым днём всё больше люблю LINUX !
Гость @ 20.06.2012 13:00
Что бы прочитать столько полезности, пришлось бы перелопатить несколько десятков статей, а тут всё очень просто, наглядно и с примером конфига =)
Фантастически полезная статья!
Огромное спасибо!

ps: сохранил в избранное и буду всем рекомендовать этот сайт!
Гость @ 21.12.2011 03:45
Spasibo Gromadnoe
Гость @ 03.12.2011 21:22
Очень полезная статья для начинающих! Спасибо!

1 комментарий: