вторник, 15 января 2013 г.

Настройка TCP-IP через консоль и файлы конфигурации




Пакет ifupdown является комплексным средством настройки параметров сети, в частности используется для инициализации сети при загрузке операционной системы в Debian GNU\Linux (совместно с соответствующими скриптами ifupdown-clean, ifupdown, networking, расположенными в каталоге /etc/init.d)
Начиная с версии 6.0 (squeeze), разработчики Debian в документации классифицируют пакет ifupdown как устаревший и рекомендуют пользоваться такими средствами как NetworkManager или Wicd. Такой подход себя оправдывает для рабочих станций с установленными средствами графического интерфейса пользователя. Для серверов продолжается использование ifupdown - стабильного, многофункционального, хорошо документированного средства управления сетевой подсистемой.
Пакет ifupdown содержит две команды ifup и ifdown для включения и отключения сетевого подключения (в данном случае интерфейса eth1):
# ifdown eth1
# ifup eth1
Эти команды по умолчанию используют настройки, записанные в файле /etc/network/interfaces.
Для запуска, перезапуска и останова сетевой подсистемы следует использовать скрипт /etc/init.d/networking c параметрами start, restart и stop соответственно:
# /etc/init.d/networking restart

Файл настроек сетевых интерфейсов /etc/network/interfaces
Файл /etc/network/interfaces имеет текстовый формат, пригодный для редактирования администратором системы c помощью текстового редактора, в тоже время команды ifup и ifdown также способны его читать и распознавать указанные в нем настройки.
Пример этого файла:
auto lo eth1 eth0
iface lo inet loopback

iface eth1 inet static
      address 192.168.1.100
      netmask 255.255.255.0
      gateway 192.168.1.1
      dns-nameservers 192.168.1.1

iface eth0 inet dhcp

Ключевое слово auto c перечислением через пробел имен интерфейсов указывает включать данные интерфейсы при старте системы. Ключевое слово iface является описанием интерфейса (общий формат: iface <имя_интерфейса> <тип адреса> <метод_настройки>). Так, в примере:
  •  в строке iface lo inet loopback настраивается локальный интерфейс lo для взаимодействия приложений в рамках данного компьютера (loopback)
  •  в строке iface eth1 inet static настраивается интерфейс eth1 на статический метод конфигурации (сетевые параметры указываются вручную, static). Далее параметры статической настройки интерфейса и указаны (формат в общем виде: <опция> <значение>): IP-адрес (address), маска подсети (netmask), шлюз по умолчанию (gateway), адреса DNS-серверов (dns-nameservers) и т.д.
  • в строке iface eth0 dhcp указывается настройка интерфейса eth0 по протоколу динамической конфигурации узла.
Протокол DHCP (Dynamic Host Configuration Protocol) позволяет компьютеру автоматически получать по сети IP-адрес и другие параметры, необходимые для работы сетевого интерфейса. Для использования протокола DHCP необходимо чтобы в данном широковещательном домене был настроен DHCP-сервер. При настройке сетевого устройства компьютер обращается к DHCP-серверу и получает требуемые сетевые параметры.
Кроме статической и динамической настройки интерфейса, существует ручной способ конфигурирования (manual), который предполагает то, что интерфейс будет настроен с помощью средств, сторонних относительно ifupdown.
Рекомендуется отключать сетевой интерфейс (ifdown) перед тем как вносить изменения в его конфигурацию, а затем включать (ifup).
Синтаксис файла interfaces подробно описан на соответствующей странице помощи (man interfaces).

Добавление постоянного статического маршрута
Опции интерфейса в файле interfaces позволяют указать команды, которые необходимо выполнить при включении интерфейса (опция up) и выключении (опция down).
Например, настроим постоянную сетевую конфигурацию со статическим маршрутом через альтернативный шлюз (приведен фрагмент файла /etc/network/interfaces):
iface eth1 inet static
      address 192.168.1.100
      netmask 255.255.255.0
      up ip route add 192.168.24.0/24 via 192.168.1.2
      gateway 192.168.1.1

Применим данную конфигурацию с помощью команд ifdown/ifup и просмотрим таблицу маршрутизации:
# ifdown eth1
# ifup eth1
# ip route show dev eth1
192.168.1.0/24  proto kernel  scope link  src 192.168.1.100
192.168.24.0/24 via 192.168.1.2
default via 192.168.1.1

Несколько IP-адресов на одном сетевом интерфейсе
Задача добавления нескольких IP-адресов на интерфейс с помощью файла /etc/network/interfaces решается следующим образом:

auto eth1 eth1:add
iface eth1 inet static
      address 192.168.11.10
      netmask 255.255.255.0
      gateway 192.168.11.1

iface eth1:add inet static
      address 192.168.11.11
      netmask 255.255.255.0

Псевдоним задается через двоеточие после имени интерфейса. Также необходимо указать автоматический запуск нового интерфейса в параметре auto.
Для применения данной конфигурации необходимо выполнить последовательность команд:
# ifdown eth1; ifup eth1; ifup eth1:add
или же:
# /etc/init.d/networking restart

eth0 вместо eth1

Идентификатор, который будет назначен сетевой карте, определяется в файле /etc/udev/rules.d/70-persistent-net.rules

Этот файл содержит перечисление доступных сетевых карт в виде примерно следующего списка:

....
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:15:f2:6a:77:04", NAME="eth0"
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:17:9a:74:93:82", NAME="eth1"
...
где ATTRS{address} - MAC сетевухи.

Если на компьютере обнаруживается сетевая карта с MAC-адресом, которого нет в этом списке, в хвост файла дописывается еще одна строчка, назначая новой сетевой карте наименьшее свободное имя вида eth(n+1). Если при загрузке системы одна из указанных в файле сетевых карт в компьютере не обнаруживается, соответствующее устройство eth0 не будет показываться в списке доступных сетевых карт. Однако идентификатор за сетевой картой закрепится и если её вставить обратно, она снова появится под тем же названием.

Файл /etc/udev/rules.d/70-persistent-net.rules можно редактировать, в частности - комментировать в нём строки символом #.


P.S. Список потенциально доступных сетевых карт, установленных на компьютере, можно получить при помощи команды:

# lshw -C network