Управление сетевыми настройками VPS Linux с помощью инструментов iproute2
Linux, VPS | Комментировать запись
При администрировании и устранение неполадок серверов 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: iproute2, Linux, VPS