ip против ifconfig. Сравниваем, чтобы выбрать лучшее.
Из пакета net-tools в дистрибутивах на основе Linux имеется широкий набор команд, благодаря которым можно настроить сеть через командную строку. Пакет включат следующие команды: ifconfig, route, nameif, iwconfig, iptunnel, netstat и arp. На протяжении длительного времени пакет входил во все дистрибутивы Linux, так как его в действительности достаточно, для мониторинга и настройки сети так, как потребовал бы этого хоть новичок, хоть опытный пользователь Linux. За последние годы в ядре Linux, произошли большие улучшения и благодаря этому появилась более мощная альтернатива, которая может заменить все эти команды. Это альтернатива — команда ip из пакета iproute2util. Команда ip функционально организована на 2-х уровнях сетевого стека, то есть на уровне 2 (канальный уровень) и на уровне 3 (сетевой уровень) и выполняет все функции вышеупомянутых команд из пакета net-tools.
Несмотря на то, что команда /bin/ip в системах Linux уже достаточно давно, многие по привычке пользуются устаревшей командой /sbin/ifconfig для настройки, отображения. Конечно ifconfig не исчезнет в ближайшее время, хотя она уже не входит в новые дистрибутивы Linux, поэтому мы рекомендуем уже сейчас вооружиться и овладеть командой ip, тем более что она шире по функциональности и в конечном итоге заменит ifconfig.
Справочная страница ip поначалу может показаться пугающей, хотя на самом деле ее синтаксис очень легко читается. Все познается в сравнении. Поэтому в этой статье мы сделаем сравнение команд ifconfig с ip. А о новых возможностях ip мы расскажем в другой статье.
Примечания:
— Если вы используете ifconfig или ip для настройки сетевых интерфейсов, изменения будут потеряны после перезагрузки. Чтобы ваши изменения были постоянными, вам необходимо изменить файлы конфигурации, такие как /etc/network/interfaces . Например, чтобы отключить интерфейс, вы можете просто удалить его конфигурационную часть из файла.
— Чтобы произвести настройку сетевого интерфейса с помощью команд ip или ifconfig у вас должны быть привилегии суперпользователя.
1. Отображение всех сетевых интерфейсов Linux.
$ ifconfig
$ ip addr show
Здесь хотелось бы обратить ваше внимание на отличительную особенность между ip и ifconfig в том, что ifconfig показывает только включенные интерфейсы, ip же показывает все, независимо от того, включены или отключены интерфейсы.
2. Добавление или удаление IP-адреса в Linux.
Приведенная ниже команда назначает интерфейсу eth0 IP-адрес 192.168.0.5:
# ifconfig eth0 add 192.168.0.5
# ip addr add 192.168.0.5 dev eth0
Это простой вариант команды. Иногда бывает, что необходимо добавить маску подсети и широковещательный адрес. Обратите внимание, что маска подсети в команде ip может быть задана в нотации CIDR, то есть как 192.168.0.5/24:
# ifconfig eth0 192.168.0.5 netmask 255.255.255.0 broadcast 192.168.0.255
# ip addr add 192.168.0.5/24 broadcast 192.168.0.255 dev eth0
Приведенная ниже команда удалит с интерфейса eth0 IP-адрес 192.168.0.5:
# ifconfig eth0 del 192.168.80.5
# ip addr del 192.168.0.5/24 dev eth0
3. Включение отключение сетевого интерфейса.
Приведенные ниже команды включают или отключают определенный сетевой интерфейс:
# ifconfig eth0 up
# ip link set eth0 up
Для того, чтобы выключить сетевой интерфейс просто замените up на down.
4. Создание псевдонимов (alias).
Приведенные ниже команды создадут alias eth0:1 для интерфейса eth0 с IP-адресом 192.168.0.5:
# ifconfig eth0:1 192.168.0.5/24
# ip addr add 192.168.0.5/24 dev eth0 label eth0:1
5. Добавить MAC-адрес на сетевой интерфейс.
Приведенная ниже команда устанавливает аппаратный MAC-адрес на интерфейс eth0:
# ifconfig eth0 hw ether 1c:1b:0d:d5:bf:f8
# ip link set dev eth0 1c:1b:0d:d5:bf:f8
Проверить назначенный MAC-адрес можно в значении Hwaddr выведя команду ifconfig.
6. Протокол ARP
Приведенные ниже команды включают/отключают использование протокола ARP:
# ifconfig eth0 arp
Для того, чтобы отключить данную опцию используйте -arp
# ip link set dev eth0 arp on
Для того, чтобы отключить эту опцию просто замените on на off
Для добавления новой запаси в ARP-таблицу используйте следующие команды:
# arp -i eth0 -s 192.168.0.5 00:11:22:33:44:55
# ip neigh add 192.168.0.5 lladdr 00:11:22:33:44:55 hud permanent dev eth0
7. Отображение и настройка таблицы маршрутизации
Показать таблицу маршрутизации:
$ route
$ ip route show
Чтобы посмотреть на какой интерфейс (и шлюз) будет направлен пакет с определенным IP-адресом, в ip route есть хорошая особенность:
$ ip route get 192.168.7.103
Добавление маршрута на интерфейсе:
# add route -net 192.168.2.0/24 dev eth0
# ip route add 192.168.2.0/24 dev eth0
Удалить запись из таблицы маршрутизации:
# route del -net 192.168.2.0/24 dev eth0
# ip route del 192.168.2.0/24 dev eth0
Команды для добавления шлюза:
# route add -net 192.168.5.0/24 gw 192.168.5.1
# ip route add 92.168.5.0/24 via 192.168.5.1
8. Дополнительные конфигурации сетевого интерфейса.
Установка значения MTU на 1492:
# ifconfig eth0 mtu 1492
# ip link set dev eth0 mtu 1492
Включить или отключить многоадресный флаг:
# ifconfig etho multicast
# ip link set dev eth0 multicast on
Установка длины очереди передачи:
# ifconfig eth0 txqueuelen 1200
# ip link set dev eth0 txqueuelen 1200
Включить или отключить все режимы многоадресной рассылки
# ifconfig eth0 allmulti
# ip link set dev eth0 allmulti on
Заключение
Сравнив две команды ip и ifconfig, которые по сути идентичны и предназначены для одной цели — настройка и мониторинг сетевых интерфейсов, мы можем сделать для себя рациональный выбор. Команда ip ничем не хуже, а в некоторых моментах даже лучше подходит для реализации задач. Не менее весомый аргумент в пользу ip то, что в последние дистрибутивы Linux ifconfig уже не поставляется по умолчанию, а для установки пакета необходим выход в интернет, которого может и не быть на настраиваемом сервере.
Для тех, кто решил начать пользоваться командой ip для настройки и мониторинга сетевых интерфейсов, есть небольшая, но очень удобная настройка отображения выходных данных.
echo "alias ip='ip --color'" >> .bash_aliases echo "alias ipb='ip --color --brief'" >> .bash_aliases