Утилита ip Linux
Сегодня я хочу поговорить о настройке сети в Linux и, в частности, об универсальной консольной утилите — ip. В давних инструкциях, да что там в давних, в новых тоже мы очень часто встречаем утилиты ifconfig, arp, route. Но они уже в прошлом, они устарели еще начиная с версии ядра 2.2. Утилита ip объединяет в себе возможности всех этих и нескольких других команд для управления сетью в Linux.
Утилита ip поставляется во всех дистрибутивах по умолчанию, и хотя ее предшественники тоже пока что доступны, будущее за ip, а поэтому давайте разберемся как ею пользоваться и что с помощью нее можно настроить.
Как вы поняли, в этой инструкции мы рассмотрим как использовать утилиту ip для настройки сети в Linux. Эта утилита позволит делать вам даже больше чем все те, функциональность которых она поглотила. Например, здесь вы сможете не только смотреть свойства подключения, установить ip адрес и смотреть arp таблицу, но и настроить политики маршрутизации, управлять arp таблицами, а также настраивать специфичные параметры стека TCP/IP, например, ширину окна. Конечно, учитывая такое количество функций, она сложна в освоении, но оно того стоит.
Синтаксис
Сначала рассмотрим синтаксис команды:
ip [ опции ] объект команда [ параметры ]
опции — это глобальные настройки, которые сказываются на работе всей утилиты независимо от других аргументов, их указывать необязательно.
- объект — объект или устройство, с которым будем работать или о котором будем узнавать информацию.
- команды — какое-либо действие с объектом.
- параметры — само собой, командам иногда нужно передавать параметры, они передаются в этом пункте.
Дальше рассмотрим все еще более подробно.
Опции
Поддерживаются такие опции для настройки сети в lInux:
- -v — только вывод информации об утилите и ее версии
- -s — включает вывод статистической информации
- -f — позволяет указать протокол, с которым нужно работать, если протокол не указан, то берется на основе параметров команды. Опция f должна принимать одно из значений: bridge, dnet, inet, inet6, ipx или link. По умолчанию используется inet, link — означает отсутствие протокола.
- -o — выводить каждую запись с новой строки
- -r — выполнять резолвинг и выводить символические имена хостов
- Все остальные опции — ярлыки опции -f:
- -4 — ярлык для -f inet
- -6 — -f inet6
- -B — -f bridge
- -0 — -f link
Объекты
Теперь давайте рассмотрим самые важные объекты.
- address — сетевой адрес на устройстве
- link— физическое сетевое устройство
- monitor — мониторинг состояния устройств
- neigh — ARP
- route — управление маршрутизацией
- rule — правила маршрутизации
- tunnel — настройка туннелирования
Конечно, это не все объекты которые поддерживает команда ip linux, но на первое время вам хватит. Во время ввода имя объекта может быть сокращено до одной буквы. При неоднозначности используется алфавитный порядок. Например, ip a show, расшифровывается как ip address show. Тогда как в ip r show, r — означает route.
Команды
Теперь рассмотрим доступные команды, с помощью которых может быть выполнена настройка сети linux. Вот они: add, change, del или delete, flush, get, list или show, monitor, replace, restore, save, set, и update.
Если команда не задана, по умолчанию используется show (показать).
Здесь тоже поддерживается сокращение и в большинстве случаев для выполнения нужного действия достаточно нескольких символов. Но алфавитный порядок соблюдается не всегда. Например, ip a s, означает ip address show, а не ip address set, к сожалению.
Параметры
Параметры зависят от объекта и указанной команды. Рассмотрим самые основные:
- dev имя_устройства — сетевое устройство;
- up — включить;
- down — выключить;
- lladdr — MAC — адрес;
- initcwnd — размер окна перегрузки TCP при инициализации;
- window — размер окна TCP;
- cwnd — размер окна перегрузки TCP;
- type — тип;
- via — подключиться к роутеру;
- default — маршрут по умолчанию;
- blackhole — маршрут «черная дыра» — отбрасывать пакеты и не посылать ICMP сообщения о недоступности;
- prohibit — маршрут «запрета» — отбрасывать пакеты и возвращать ICMP сообщения о запрете доступа;
- unreachable — маршрут «недостижимый» — отбрасывать пакеты и посылать ICMP пакеты о недостижимости узла.
Примеры использования
Вот теперь мы дошли к самому интересному — примерам использования утилиты ip Linux. То что я здесь опишу на самом деле лишь маленькая капля из всего того что может утилита ip. Для удобства все команды отсортированы по объектам, к которым они применяются.
ip link
Утилита ip в Linux с параметром linux позволяет управлять состоянием сетевых интерфейсов и просматривать информацию о них.
- ip link show — отобразить состояние всех сетевых интерфейсов
- ip l sh — то же самое
- ip ll — то же самое
- ip l — то же самое
- ip link show eth0 — отобразить состояние eth0
- ip link list up — отобразить статус всех включенных интерфейсов
- ip link set eth1 up — включить eth1
- ip link set eth1 down выключить eth1
ip neigbour
Объект neigbour используется для управления ARP таблицами.
- ip neigh show — показать все записи ARP
- ip n sh — то же самое
- ip n l — то же самое
- ip n — то же самое
- ip neigh show dev eth0 — посмотреть все ARP записи для eth0
- ip neigh flush — удалить все ARP записи
- ip ne fl dev eth0 — удалить все ARP записи для eth0
- ip nei add 1.1.1.13 lladdr AA:BB:CC:DD:EE:FF dev eth0 — добавить ARP запись для определенного IP адреса.
- ip n del 1.1.1.13 dev eth0 — удалить все записи для указанного адреса
ip address
Важно заметить, что вторичные ip адреса не используются в качестве исходящих адресов для отправки пакетов.
- ip address show — показать все ip адреса и их интерфейсы
- ip a sh — то же самое
- ip a list — то же самое
- ip a — то же самое
- ip a l permanent — отобразить только статические ip адреса
- ip a l dynamic — отобразить только динамические ip адреса
- ip addr add 1.1.1.13/24 dev eth0 — установить ip адрес для интерфейса eth0
- ip addr del 1.1.1.13/24 dev eth0 — удалить ip адрес интерфейса eth0
- ip add flush dev eth0 — удалить все ip адреса интерфейса eth0
ip route
Утилита ip в Linux позволяет не только устанавливать ip адреса, но и настраивать маршруты. По умолчанию в Linux используется таблица маршрутизации 254, вы также можете иметь дело с таблицей 255, которую не следует изменять, а также 253, в которой хранятся маршруты по умолчанию.
- ip r sh показать все маршруты в таблице маршрутизации
- ip route show table nnn — отобразить все маршруты из таблицы 255
- ip route get 10.10.20.0/24 — отобразить маршрут к этой сети
- ip route get 10.10.20.0/24 from 192.168.12.9 — отобразить маршрут к этой сети от указного интерфейса.
- ip route add 10.10.20.0/24 via 192.168.50.100 — создать маршрут
- ip route delete 10.10.20.0/24 — удалить маршрут.
- ip route del 10.10.20.0/24 via 192.168.50.100 — удалить маршрут.
- ip route add default via 192.168.50.100 — создать маршрут по умолчанию.
- ip route add 10.10.20.0/24 dev eth0 — создать маршрут к указной сети.
- ip route add table nnn 10.10.20.0/24 dev eth0 — создать маршрут в специальной таблице роутинга.
- ip route add blackhole 10.10.20.0/24 dev eth0 — создать blackhole маршрут.
- ip route add unreachable 10.10.20.0/24 dev eth0 — создать unreachable маршрут.
Вот и все, возможно, в будущем этот список будет пополняться. Надеюсь, утилита ip Linux уже не кажется такой непонятной. Если у вас есть вопросы или хотите предложить еще несколько команд, пишите комментарии!
Настройка сети с помощью утилиты ip в Debian linux
Команда ip используется для назначения адреса сетевому интерфейсу и/или конфигурирования параметров сетевого интерфейса в дистрибутивах Linux. Эта команда заменяет собой старую добрую и ныне устаревшую команду ifconfig в современных дистрибутивах Linux.
Команда ip может использоваться для следующих целей:
- Узнать какие интерфейсы сконфигурированы в системе.
- Запросить статус IP интерфейса.
- Сконфигурировать локальный, Ethernet и другие интерфейсы.
- Пометить интефейс как up или down.
- Сконфигурировать или изменить статическую маршрутизацию или маршрутизацию по умолчанию.
- Сконфигурировать туннель через IP.
- Сконфигурировать содержимое ARP или NDISC кэша.
- Назначить IP адресы, маршруты, подсети и другую IP информацию на интерфейс.
Синтаксис
Понимание синтаксиса OBJECTS в комманде ip
OBJECTS может быть одним из следующих и может записываться в полной или сокращенной форме:
Объект | Сокращенная форма | Задача |
---|---|---|
link | l | Сетевое устройство. |
address | a, addr | IP адрес на устройстве. |
addrlabel | addrl | Управление метками для выбора адреса. |
neighbour | n, neigh | Записи для ARP или NDISC кэшей. |
route | r | Управление записямя таблицы маршрутизации. |
rule | ru | Правила в базе политик маршрутизации. |
maddress | m, maddr | Мультикаст адрес. |
mroute | mr | Записи мультикастового кэша маршрутизации. |
tunnel | t | Туннель через IP. |
xfrm | x | Фреймворк для протокола IPsec. |
Чтобы получить информацию о каждом из объектов используйте команду help следующим образом:
Предупреждение : команды описанные ниже должны выполняться с осторожностью, так как ошибка может привести к потере соединения с сервером. Вы должны быть особо аккуратны при работе в удаленной сессии по ssh.
Примеры использования команды ip
Не пугайтесь синтаксиса команды ip. Давайте сразу начнем с примеров.
Показать информацию обо всех сетевых интерфейсах
Введите следующую команду чтобы получить список всех ip адресов назначенных всем сетевым интерфейсам:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default
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:
mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:8b:46:9a brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe8b:469a/64 scope link
valid_lft forever preferred_lft forever
Вы можете выбрать между IPv4 и IPv6 используя следующий синтаксис:
Также существует возможность вывести детали только об определенном сетевом интерфейсе:
Назначить интерфейсу IP адрес
Для того чтобы добавить IP адрес используется синтаксис следующего вида:
Чтобы назначить адрес 192.168.1.200/255.255.255.0 на интерфейс eth0, введите:
Добавить широковещательный адрес на интерфейс
По умолчанию, команда ip не задает какой-либо широковещательный адрес до тех пор, пока это будет недвусмысленно указано. Таким образом следующий синтаксис задает широковещательный адрес ADDRESS:
Существует возможность использовать специальные символы + и — вместо широковещательного адреса указывая хостовую часть адреса. В этом примере добавим адрес 192.168.1.50 с маской 255.255.255.0 (/24) со стандартным широковещательным адресом и зададим название eth0Work на интерфейс eth0:
Вы можете задать лупбек адрес на лупбек интерфейсе lo следующим образом:
Удалить IP адрес с интерфейса
Синтаксис для удаления IPv4/IPv6 адреса следующий:
Чтобы удалить 192.168.1.200/24 с интерфейса eth0, введите:
Сбросить ряд IP адресов с интерфейса
Вы можете удалять IP адреса с интерфейса по одному, как показано выше. Однако команда flush может удалить набор адресов с интерфейса по указанному признаку. Например, вы можете удалить все адреса из частной сети 192.168.2.0/24 с помощью команды:
2: eth0 inet 192.168.2.201/24 scope global secondary eth0
2: eth0 inet 192.168.2.200/24 scope global eth0
*** Round 1, deleting 2 addresses ***
*** Flush is complete after 1 round ***
Вы можете выключить IP адрес на всех ppp (Point-to-Point) интерфейсах:
Еще один пример для всех Ethernet интерфейсов:
Как изменить состояние интерфейса на UP или DOWN
К примеру, чтобы положить интерфейс eth1, используйте:
А чтобы поднять этот же интерфейс:
Как изменить txqueuelen устройства
Вы можете установить длину очереди передачи устройства с помощью ifconfig или команды ip следующим образом:
В этом примере изменим txqueuelen со значения по умолчанию, равного 1000, на 10000 для интерфейса 10000:
Как изменить MTU устройства
Для гигабиных сетей вы можете установить максимальный размер блоков передачи (MTU) для лучшей производительности сети. Синтаксис следующий:
Например, установим MTU устройства eth0 на 9000:
2: eth0: mtu 9000 qdisc pfifo_fast state UP qlen 1000
link/ether 00:08:9b:c4:30:30 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1
inet6 fe80::208:9bff:fec4:3030/64 scope link
valid_lft forever preferred_lft forever
Показать соседей (arp кэш)
Пример вывода (часть информации скрыта):
74.xx.yy.zz dev eth1 lladdr 00:30:48:yy:zz:ww REACHABLE
10.10.29.66 dev eth0 lladdr 00:30:48:c6:0a:d8 REACHABLE
74.ww.yyy.xxx dev eth1 lladdr 00:1a:30:yy:zz:ww REACHABLE
10.10.29.68 dev eth0 lladdr 00:30:48:33:bc:32 REACHABLE
74.fff.uu.cc dev eth1 lladdr 00:30:48:yy:zz:ww STALE
74.rr.ww.fff dev eth1 lladdr 00:30:48:yy:zz:ww DELAY
10.10.29.65 dev eth0 lladdr 00:1a:30:38:a8:00 REACHABLE
10.10.29.74 dev eth0 lladdr 00:30:48:8e:31:ac REACHABLE
Последнее поле показывает состояние системы «определения недоступности соседа»:
- STALE — сосед существует, но, скорее всего недоступен, поэтому ядро попробует проверить это при первой ближайшей передаче.
- DELAY — пакет был отправлен соседу в состоянии STALE и ядро ждет подтверждения.
- REACHABLE — сосед существует и определенно доступен.
Добавить новую ARP запись
Например, добавить постоянную ARP запись для соседа 192.168.1.5 на устройстве eth0:
Состояние соседа | Значение |
---|---|
permanent | Состояние соседа занято навсегда и может быть удалено только администратором. |
noarp | Состояние соседа валидно. Попыток проверить состояние не будет, но может быть удалено, когда закончится время жизни. |
stale | Состояние соседа валидно, но подозрительно. Эта опция для ip neigh не меняет состояние соседа, если оно было валидно и адрес не был изменен этой командой. |
reachable | Состояние соседа валидно до окончания таймаута доступности. |
Удалить ARP запись
Удалить запись для соседа 192.168.1.5 на интерфейсе eth1:
Изменить состояние на reachable для соседа 192.168.1.100 на устройстве eth1:
Очистить ARP запись
Команда flush или f очищает таблицы соседей или arp таблицы. Синтаксис:
ip route: команды управления таблицей маршрутизации
Используйте следующие команды для управления таблицей маршрутизации ядра.
Показать таблицу маршрутизации
Посмотреть таблицу маршрутизации:
Показать роутинг для 192.168.1.0/24:
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10
Добавить новый маршрут
Добавить статический маршрут в сеть 192.168.1.0/24 через шлюз 192.168.1.254:
Чтобы маршрутизировать весь трафик через шлюз 192.168.1.254 подключенный через сетевой интерфейс eth0:
Удалить маршрут
Команда чтобы удалить маршрут по умолчанию:
В этом примере удалим маршрут созданный в предыдущем блоке: