Управление сетевыми настройками VPS Linux с помощью инструментов iproute2

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

Обычно для этого использовалась группа несвязанных утилит, объединенных под названием «сетевые инструменты». Зачастую они были объединены в один пакет, чтобы сразу же предоставить полный охват функциональности, но их разработка и стратегия использования варьировалась от инструмента к инструменту.

Из-за некоторой несогласованности работы, а также из-за прекращения обслуживания данный инструментарий был заменен набором утилит, известным под комплексным псевдонимом iproute2. Данные утилиты были созданы вместе с целью разработать общий синтаксис и обеспечить их продуктивную совместную работу.

Данное руководство описывает использование инструментария iproute2 для настройки, управления и сбора информации о сети. Для демонстрации примеров используется  Ubuntu 12,04 VPS, но большинство современных дистрибутивов Linux должны работать таким же образом.

Команды для выполнения запросов выполняются с привилегиями обычного пользователя, но для изменения параметров нужны root-привилегии.

Как просмотреть сетевые интерфейсы, адреса и маршруты

Управление сетевыми интерфейсами — одна из главных функций пакета iproute2.

Обычно интерфейсы имеют названия вроде eth0, eth1, lo, и т.п.

Раньше для изменения настроек в данной области использовалась команда ifconfig. В системе iproute2 за выполнение таких действий отвечают подкоманды ip addr и ip link.

Набрав команду ifconfig без аргументов, можно было собрать информацию о текущем состоянии сетевых интерфейсов:

ifconfig
eth0      Link encap:Ethernet  HWaddr 54:be:f7:08:c2:1b
inet addr:192.168.56.126  Bcast:192.168.56.255  Mask:255.255.255.0
inet6 addr: fe80::56be:f7ff:fe08:c21b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:114273 errors:0 dropped:0 overruns:0 frame:0
TX packets:58866 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:73490903 (73.4 MB)  TX bytes:14294252 (14.2 MB)
Interrupt:20 Memory:f7f00000-f7f20000
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:3942 errors:0 dropped:0 overruns:0 frame:0
TX packets:3942 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:668121 (668.1 KB)  TX bytes:668121 (668.1 KB)

Чтобы получить информацию об отдельном интерфейсе, в качестве аргумента нужно задать команде имя данного интерфейса:

ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 54:be:f7:08:c2:1b
inet addr:192.168.56.126  Bcast:192.168.56.255  Mask:255.255.255.0
inet6 addr: fe80::56be:f7ff:fe08:c21b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:114829 errors:0 dropped:0 overruns:0 frame:0
TX packets:59007 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:73598364 (73.5 MB)  TX bytes:14325245 (14.3 MB)
Interrupt:20 Memory:f7f00000-f7f20000

В пакете iproute2 функции данной команды можно повторить при помощи подкоманд.

Чтобы получить краткий обзор адресов, присоединенных к каждому интерфейсу, наберите ip addr без аргументов:

ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 54:be:f7:08:c2:1b brd ff:ff:ff:ff:ff:ff
inet 192.168.56.126/24 brd 192.168.56.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::56be:f7ff:fe08:c21b/64 scope link
valid_lft forever preferred_lft forever

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

ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 54:be:f7:08:c2:1b brd ff:ff:ff:ff:ff:ff
inet 192.168.56.126/24 brd 192.168.56.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::56be:f7ff:fe08:c21b/64 scope link
valid_lft forever preferred_lft forever

По сути, команда ip addr — альтернативное имя команды ip addr show.

Чтобы получить информацию о состоянии интерфейсов, а не об адресах, используйте команду ip link:

ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 04:01:13:8a:a2:01 brd ff:ff:ff:ff:ff:ff

Чтобы получить информацию о конкретном интерфейсе, нужно использовать ключевое слово show перед именем интерфейса:

ip link show eth0

Чтобы получить статистику интерфейса, можно запросить ее из каждого интерфейса, используя на подкоманду опцию «-s»:

ip -s link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 04:01:13:8a:a2:01 brd ff:ff:ff:ff:ff:ff
RX: bytes  packets  errors  dropped overrun mcast
853144     14672    0       0       0       0
TX: bytes  packets  errors  dropped carrier collsns
91257      537      0       0       0       0

Как найти таблицу маршрутизации? Таблица маршрутизации содержит информацию ядра о путях к другим точкам сети. Вывести текущую таблицу маршрутизации можно с помощью команды:

ip route show
default via 107.170.58.1 dev eth0  metric 100
107.170.58.0/24 dev eth0  proto kernel  scope link  src 107.170.58.162

Выведенный результат говорит о том, что маршрут к сети Интернет по умолчанию доступен через интерфейс eth0 с IP-адресом 107.170.58.1. К серверу можно подключиться с помощью данного интерфейса, где адрес интерфейса пользователя 107.170.58.162.

Настройка сетевых интерфейсов и адресов

После ознакомления со способами получения информации об интерфейсах и связанных с ними адресах нужно научиться изменять их состояния.

Для начала нужно настроить сам интерфейс. Это можно сделать при помощи уже знакомой подкоманды ip link. В данном случае вместо show нужно использовать ключевое слово set, которое меняет параметры сетевого устройства.

К примеру, чтобы включить или выключить интерфейс, используйте:

ip link set eth1 up
ip link set eth1 down

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

Как сказано выше, подкоманда ip link часто используется для установки параметров интерфейса. Например, чтобы включить или выключить флаг multicast, можно ввести:

ip link set eth1 multicast on
ip link set eth1 multicast off

Отрегулировать значение MTU и длину передаваемой очереди можно так:

ip link set eth1 mtu 1500
ip link set eth1 txqueuelen 1000

Если настраиваемый интерфейс выключен, его можно переименовать или изменить значение флага arp:

ip link set eth1 name eth10
ip link set eth1 arp on

Чтоб отредактировать адрес, связанный с интерфейсом, используется подкоманда ip addr, которая уже упоминалась в данном руководстве.

Чтобы добавить адрес, введите:

ip addr add ip_address/net_prefix brd + dev interface

Отрывок данной команды brd + автоматически устанавливает широковещательный адрес. К каждому интерфейсу можно без труда добавить несколько адресов.

Для удаления адресов выполняется противоположная операция. Чтобы удалить определенный адрес, используйте:

ip addr del ip_address/net_prefix dev interface

Если адрес не будет указан в данной строке, то удален будет первый показанный адрес, связанный с этим интерфейсом.

Можно также отредактировать таблицу маршрутизации сервера:

ip route [add | change | replace | delete ]

Но данная функция используется достаточно редко, потому выходит за рамки руководства.

Дополнительные возможности IPRoute2

IPRoute2 обладает некоторыми дополнительными возможностями, глубоко изучить которые в данном руководстве невозможно. Тем не менее, ниже можно найти краткое описание дополнительных функций данного инструментария.

Понятие правил IP-маршрутизации достаточно сложно сформулировать, поскольку оно зависит от ситуации. В целом, трафик можно маршрутизировать, руководствуясь несколькими направлениями, такими как целевой адрес, адрес источника, протокол маршрутизации, размер пакета и т.д.

За выполнение данной функции отвечает подкоманда ip rule. Запрос строится по тому же шаблону, что и предыдущие подкоманды:

ip rule show
0:  from all lookup local
32766:  from all lookup main
32767:  from all lookup default

Эти три правила маршрутизации настроены ядром по умолчанию. Первая строка соответствует любому трафику и используется для маршрутизации приоритетного трафика. Вторая строка — это главное правило, которое обрабатывает маршрутизацию. Последнее правило пустое, оно используется для последующей обработки, если пакет не соответствует предыдущим правилам.

Правила маршрутизации, настроенные программой IPRoute2, хранятся в базе данных маршрутизации. Их можно добавлять и удалять, но не стоит вносить в них какие-либо изменения, не умея работать с ними. Прежде чем делать это, ознакомьтесь с официальной документацией инструмента.

man ip         # search for "ip rule"

Еще один важный момент, который нужно вкратце описать — обработка arp информации при помощи данных инструментов. За это отвечает подкоманда ip neigh.

ip neigh
107.170.58.1 dev eth0 lladdr 00:00:5e:00:01:68 DELAY

По умолчанию это выведет список межсетевых шлюзов. Arp — это протокол, используемый для сбора информации о физических устройствах, доступных через локальную сеть.

В целом, запрос arp передается по локальной сети всякий раз, когда IP-адрес должен быть достигнут. Совпавший IP-адрес отвечает, и затем локальный компьютер знает, куда посылать информацию для этого IP-адреса. Эта информация кэшируется в локальной системе в течение некоторого времени (обычно около 15 минут), во избежание необходимости запросов в ходе последующего взаимодействия.

Заключение

Данное руководство достаточно подробно описывает использование набора утилит iproute2. Хотя многие руководства и учебники по-прежнему ссылаются на устаревшие утилиты (отчасти потому, что умелые системные администраторы выросли на их использовании), команды, описанные здесь, будут широко использоваться в ближайшем будущем.

Потому очень важно ознакомиться с этими командами заранее, до того, как возникнет острая необходимость их использования. В целом, они гораздо более последовательны, и в синтаксисе всех этих команд есть явные сходства, что делает их еще более удобными в использовании.

Tags: , ,