Настройка сети с помощью утилиты ip в Debian linux

Команда ip используется для назначения адреса сетевому интерфейсу и/или конфигурирования параметров сетевого интерфейса в дистрибутивах  Linux. Эта команда заменяет собой старую добрую и ныне устаревшую команду ifconfig в современных дистрибутивах Linux.

Команда ip может использоваться для следующих целей:

  • Узнать какие интерфейсы сконфигурированы в системе.
  • Запросить статус IP интерфейса.
  • Сконфигурировать локальный, Ethernet и другие интерфейсы.
  • Пометить интефейс как up или down.
  • Сконфигурировать или изменить статическую маршрутизацию или маршрутизацию по умолчанию.
  • Сконфигурировать туннель через IP.
  • Сконфигурировать содержимое ARP или NDISC кэша.
  • Назначить IP адресы, маршруты, подсети и другую IP информацию на интерфейс.

Синтаксис

ip OBJECT COMMAND
ip [options] OBJECT COMMAND
ip OBJECT help

Понимание синтаксиса 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 следующим образом:

ip OBJECT help
ip OBJECT h
ip a help
ip r help

Предупреждение: команды описанные ниже должны выполняться с осторожностью, так как ошибка может привести к потере соединения с сервером. Вы должны быть особо аккуратны при работе в удаленной сессии по ssh.

Примеры использования команды ip

Не пугайтесь синтаксиса команды ip. Давайте сразу начнем с примеров.

Показать информацию обо всех сетевых интерфейсах

Введите следующую команду чтобы получить список всех ip адресов назначенных всем сетевым интерфейсам:

ip a

или

ip addr

Пример вывода:

1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 используя следующий синтаксис:

### Показывать только TCP/IP IPv4  ##
ip -4 a

### Показывать только TCP/IP IPv6  ###
ip -6 a

Также существует возможность вывести детали только об определенном сетевом интерфейсе:

### Показать только интерфейс eth0 ###
ip a show eth0
ip a list eth0
ip a show dev eth0

### Показать только поднятые интерфейсы ###
ip link ls up

Назначить интерфейсу IP адрес

Для того чтобы добавить IP адрес используется синтаксис следующего вида:

ip a add {ip_addr/mask} dev {interface}

Чтобы назначить адрес 192.168.1.200/255.255.255.0 на интерфейс eth0, введите:

ip a add 192.168.1.200/255.255.255.0 dev eth0

или

ip a add 192.168.1.200/24 dev eth0

Добавить широковещательный адрес на интерфейс

По умолчанию, команда ip не задает какой-либо широковещательный адрес до тех пор, пока это будет недвусмысленно указано. Таким образом следующий синтаксис задает широковещательный адрес ADDRESS:

ip addr add brd {ADDDRESS-HERE} dev {interface}
ip addr add broadcast {ADDDRESS-HERE} dev {interface}
ip addr add broadcast 172.20.10.255 dev dummy0

Существует возможность использовать специальные символы + и - вместо широковещательного адреса указывая хостовую часть адреса. В этом примере добавим адрес 192.168.1.50 с маской 255.255.255.0 (/24) со стандартным широковещательным адресом и зададим название eth0Work на интерфейс eth0:

ip a add 192.168.1.50/24 brd + dev eth0 label eth0Work

Вы можете задать лупбек адрес на лупбек интерфейсе lo следующим образом:

ip a add 127.0.0.1/8 dev lo brd + scope host

Удалить IP адрес с интерфейса

Синтаксис для удаления IPv4/IPv6 адреса следующий:

ip a del {ipv6_addr_OR_ipv4_addr} dev {interface}

Чтобы удалить 192.168.1.200/24 с интерфейса eth0, введите:

ip a del 192.168.1.200/24 dev eth0

Сбросить ряд IP адресов с интерфейса

Вы можете удалять IP адреса с интерфейса по одному, как показано выше. Однако команда flush может удалить набор адресов с интерфейса по указанному признаку. Например, вы можете удалить все адреса из частной сети 192.168.2.0/24 с помощью команды:

ip -s -s a f to 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) интерфейсах:

ip -4 addr flush label "ppp*"

Еще один пример для всех Ethernet интерфейсов:

ip -4 addr flush label "eth0"

Как изменить состояние интерфейса на UP или DOWN

Синтаксис:

ip link set dev {DEVICE} {up|down}

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

ip link set dev eth1 down

А чтобы поднять этот же интерфейс:

ip link set dev eth1 up

Как изменить txqueuelen устройства

Вы можете установить длину очереди передачи устройства с помощью ifconfig или команды ip следующим образом:

ip link set txqueuelen {NUMBER} dev {DEVICE}

В этом примере изменим txqueuelen со значения по умолчанию, равного 1000, на 10000 для интерфейса 10000:

ip link set txqueuelen 10000 dev eth0
ip a list eth0

Как изменить MTU устройства

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

ip link set mtu {NUMBER} dev {DEVICE}

Например, установим MTU устройства eth0 на 9000:

ip link set mtu 9000 dev eth0
ip a list eth0

Пример вывода:

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 кэш)

Синтаксис:

ip n show
ip neigh show

Пример вывода (часть информации скрыта):

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 запись

Синтаксис:

ip neigh add {IP-HERE} lladdr {MAC/LLADDRESS} dev {DEVICE} nud {STATE}

Например, добавить постоянную ARP запись для соседа 192.168.1.5 на устройстве eth0:

ip neigh add 192.168.1.5 lladdr 00:1a:30:38:a8:00 dev eth0 nud perm

Где,

Состояние соседа Значение
permanent Состояние соседа занято навсегда и может быть удалено только администратором.
noarp Состояние соседа валидно. Попыток проверить состояние не будет, но может быть удалено, когда закончится время жизни.
stale Состояние соседа валидно, но подозрительно. Эта опция для ip neigh не меняет состояние соседа, если оно было валидно и адрес не был изменен этой командой.
reachable Состояние соседа валидно до окончания таймаута доступности.

 

Удалить ARP запись

Синтаксис:

ip neigh del {IPAddress} dev {DEVICE}

Удалить запись для соседа 192.168.1.5 на интерфейсе eth1:

ip neigh del 192.168.1.5 dev eth1

Изменить состояние на reachable для соседа 192.168.1.100 на устройстве eth1:

ip neigh chg 192.168.1.100 dev eth1 nud reachable

Очистить ARP запись

Команда flush или f очищает таблицы соседей или arp таблицы. Синтаксис:

ip -s -s n f {IPAddress}

Например:

ip -s -s n f 192.168.1.5

или

ip -s -s n flush 192.168.1.5

ip route: команды управления таблицей маршрутизации

Используйте следующие команды для управления таблицей маршрутизации ядра.

Показать таблицу маршрутизации

Посмотреть таблицу маршрутизации:

ip r
ip r list
ip route

Пример вывода:

default via 192.168.1.254 dev eth1
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.10

Показать роутинг для 192.168.1.0/24:

ip r list 192.168.1.0/24

Пример вывода:

192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.10

Добавить новый маршрут

Синтаксис:

ip route add {NETWORK/MASK} via {GATEWAYIP}
ip route add {NETWORK/MASK} dev {DEVICE}
ip route add default {NETWORK/MASK} dev {DEVICE}
ip route add default {NETWORK/MASK} via {GATEWAYIP}

Добавить статический маршрут в сеть 192.168.1.0/24 через шлюз 192.168.1.254:

ip route add 192.168.1.0/24 via 192.168.1.254

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

ip route add 192.168.1.0/24 dev eth0

Удалить маршрут

Команда чтобы удалить маршрут по умолчанию:

ip route del default

В этом примере удалим маршрут созданный в предыдущем блоке:

ip route del 192.168.1.0/24 dev eth0

Наверх

Опубликовано