How to use iproute2 tools to manage network configuration on a linux vps

Добавление альтернативного маршрута для «избранных» хостов

Рассмотрим классический пример, когда в локальной сети необходимо направить избранные хосты по альтернативному маршруту. Предположим, что в локальной сети 10.0.0.0/24 имеется некоторый шлюз с двумя интерфейсами, имеющими IP-адреса 10.0.0.1/24 — смотрит в локальную сеть, 12.13.14.15/24 — смотрит в глобальную сеть. Маршрут по умолчанию проходит через IP 12.13.14.1. При этом необходимо, чтобы хост 10.0.0.100 был направлен по маршруту 12.13.14.100. Для решения этой задачи, необходимо:

Добавить описание  дополнительной  в файл /etc/iproute2/rt_tables (это действие необязательно, можно использовать просто номер таблицы)

# echo 100 newtable >> /etc/iproute2/rt_tables

Добавить , которое будет направлять пакеты с адресом отправителя 10.0.0.100 в описанную на прошлом шаге

# ip rule add from 10.0.0.100 lookup newtable
# # или
# ip rule add from 10.0.0.100 lookup 100
# # после выполнения данной команды список правил примет следующий вид
# ip rule show
0: from all lookup local
32765: from 10.0.0.100 lookup newtable
32766: from all lookup main
32767: from all lookup default

Добавить по умолчанию, отправляющий пакеты на хост 12.13.14.100 в новую

# ip route add default via 12.13.14.100 dev eth1 table newtable
# # после внесенных изменений необходимо очистить кэш маршрутов, чтобы ядро обновило информацию о новых маршрутах
# ip route flush cache
# # после данных изменений таблица newtable (id 100) будет иметь следующий вид
# ip route show table 100
default via 12.13.14.100 dev eth1

Давайте рассмотрим путь пакета, согласно наших правил. Хост 10.0.0.100 отправляет пакет некоторому узлу 7.8.9.10, соответственно, в заголовках пакета источник — 10.0.0.100, назначение — 7.8.9.10. На хосте 10.0.0.100 шлюз по умолчанию — 10.0.0.1, согласно данного правила пакет попадает на шлюз 10.0.0.1. Ядро, получив пакет последовательно с нулевого правила просматривает соответствие пакета заданным в правилах фильтрам/критериям. Пакет подходит под действие правила 0 (0: from all lookup local) и направляется в таблицу маршрутизации local. Но т.к. пакет не принадлежит локальной системе и он не широковещательный, то маршрут в данной таблице не найден и пакет возвращается в RPDB для просмотра следующего правила. Следующее правило на пути пакета —  32765: from 10.0.0.100 lookup newtable. Пакет под критерии данного правила подходит, поэтому направляется в таблицу newtable (id 100). Согласно данной таблицы все пакеты направляются на единственный маршрут по умолчанию — 12.13.14.100. Пакет уходит согласно этого правила на указанный хост. Следующие правила не обрабатываются

Обращаю внимание, что в данном разборе я не учитывал прохождение пакета через

Краткие итоги

В статье я рассмотрел работу механизма Routing Policy DataBase (RPDB) — маршрутизации на основе политик. Я долго вникал в работу этого механизма и постарался изложить свое понимание всего происходящего в ядре. Доходчивой документации на русском языке по данному вопросу в сети я не нашел. Даже всеми хваленый LARTC не дает прозрачного понимания RPDB. Надеюсь, что мои мысли помогут вам понять основные принципы. Подводя итог всему вышесказанному можно свести основной смысл к тому, что пакет в порядке приоритета правил (от 0 до 32767) сверяется с каждым правилом и в случае, если подходит под заданные условия, над пакетом совершается какое-либо действие (обычно отправляется в указанную таблицу). Если пакет в заданной таблице находит свой маршрут, то он отправляется по заданному маршруту. Если не находит — возвращается к списку правил для обработки в следующем правиле. Управление всем этим делом осуществляется командой ip с различными параметрами. В дальнейших статьях я постараюсь рассмотреть более интересные примеры реализации маршрутизации на основе политик. Кроме того, я бы обязательно посоветовал вам почитать приведенные ниже ссылки для более глубокого ознакомления.

Что еще почитать

Хорошая статья о том,ч то такое маршрут по умолчанию — http://xgu.ru/wiki/Маршрут_по_умолчанию
RFC 1394 (что такое TOS и с чем его едят) — http://www.ietf.org/rfc/rfc1349.txt
Обязательно к прочтению (Policy Routing With Linux) — http://www.policyrouting.org/PolicyRoutingBook/ONLINE/TOC.html
Guide to IP Layer Network Administration with Linux — http://www.linux-ip.net/html/
Команда ip на буржуйском от русского автора — http://www.linux-ip.net/gl/ip-cref/
Linux Advanced Routing & Traffic Control HOWTO — http://www.opennet.ru/docs/RUS/LARTC/index.html

Управление маршрутизацией с помощью iproute2

Из статьи Основные понятия сетей мы знаем, что если текущему узлу необходимо куда-либо отправить IP пакет, то сетевая подсистема ядра использует таблицу маршрутизации. Если пакет отправляется в ту же подсеть, которой принадлежит хост, то с помощью ARP определяется физический адрес хоста назначения и пакет отправляется напрямую хосту назначения. Если адрес назначения принадлежит не «локальной сети», то пакет отправляется на шлюз (читай — направляется по маршруту), который указан в таблице маршрутизации для сети, которой принадлежит хост назначения. При этом, выбирается та сеть, в которой адрес сети наиболее заполнен (читай — меньше хостов в подсети). Если для хоста назначения не найден маршрут, то пакет отправляется на «шлюз по умолчанию». Все шлюзы должны находиться в той же подсети, что и исходный хост.

Допустим, в локальной сети есть некоторый хост с адресом 192.168.1.100/24, а так же есть хост 192.168.1.1, который является шлюзом в глобальную сеть, а так же есть хост с адресом 192.168.1.2, который является связующим маршрутизатором с сетью 192.168.24.0/24 (то есть имеет еще один интерфейс  в сеть 192.168.24.0/24 и на нем включен форвардинг). Для того, чтобы хост с адресом 192.168.1.100/24 имел доступ в сеть Интернет и к локальной сети 192.168.24.0/24, необходимо внести в таблицу маршрутизации соответствующие записи, например с помощью команды ip route add:

# ip route add default via 192.168.1.1
# ip route add 192.168.24.0/24 via 192.168.1.2
# ip route show
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.100
192.168.24.0/24 via 192.168.1.2 dev eth1
default via 192.168.1.1 dev eth

Первая команда добавляет маршрут по умолчанию (default) через узел 192.168.1.1 (параметр via ). Вторая команда устанавливает маршрут на сеть 192.168.24.0/24 через узел 192.168.1.2.

Для вывода на экран содержимого таблицы маршрутизации используется команда ip route show. В данном случае в таблице маршрутизации три записи: первая о том, что сеть 192.168.1.0/24 доступна непосредственно на интерфейсе eth1 (запись добавляется автоматически), и две записи, добавленные пользователем: альтернативный маршрут и маршрут по умолчанию.

Добавление постоянного статического маршрута при инициализации сети

О настройке сети через конфигурационные файлы я рассказывал в статье  Настройка сети в Linux, диагностика и мониторинг, в сегодняшней статье я немного дополню эту информацию. С помощью файла /etc/network/interfaces есть возможность задать постоянные маршрута при поднятии интерфейса и удаление маршрута при выключении интерфейса. Это делается с помощью параметра up и down соответственно. Нижеприведенная конфигурация позволяет задать маршрут до сети 192.168.100.0/24 через шлюз 192.168.1.1:

iface eth1 inet static
      address 192.168.1.100
      netmask 255.255.255.0
      up ip route add 192.168.100.0/24 via 192.168.1.1
      down ip route del 192.168.100.0/24
      gateway 192.168.1.3

Выводы

На этом, данную заметку заканчиваю. Подведу краткие итоги. Для управления физическими интерфейсами применяется команда ip link из пакета iproute. Для настройки свойств физического подключения (скорость, технология, тип дуплекса используется команда ethtool. Для того, чтобы хост мог взаимодействовать с другими узлами подсети в рамках локального сегмента (широковещательного домена) на нем должен быть установлен IP-адрес и определена маска подсети. Для управления IP-адресами в Linux можно использовать команду ip addr. В локальной сети данный узел для определения физических адресов(MAC) по IP — адресам других узлов использует протокол ARP и локальный ARP -кэш (таблица). Управление ARP -таблицей осуществляется командой ip neigh. Для взаимодействия с удаленными подсетями на данном узле необходимо определить шлюз по умолчанию или/и альтернативные шлюзы. Все шлюзы должны находиться в той же подсети, что и исходный узел. Управление таблицей маршрутизации на узле может осуществляться командой ip route. У параметров команд пакета iproute2 есть сокращенный синтаксис, например, ip link show eth0 можно записать как ip l sh eth0.

Что почитать

man ip
man interfaces

Route

route
.
Отображение таблицы маршрутизации хоста.
ip route
route -A  или route 
.
Использование указанного семейства адресов с возможностью add (добавить) или del (удалить). Допустимые семьи это inet (DARPA Internet), inet6 (IPv6), ax25 (AMPR AX.25), netrom (AMPR NET/ROM), ipx (Novell IPX), ddp (Appletalk DDP) и x25 (CCITT X.25).
ip -f route
. может быть inet (IP), inet6 (IPv6), или link. Дополнительно, -4 = -f inet и -6 = -f inet6.
route -C или cache
.
Работает на кэш маршрутизации ядра вместо таблицы маршрутизации переадресации информационной базы (FIB).
Не ясно; ip route show cache сбрасывает кэш маршрутизации.
route -e или -ee
.
Использует для отображения формат netstat -r таблицы маршрутизации. -ee сгенерирует очень длинную строку со всеми параметрами из таблицы маршрутизации.
ip route show
route -F или fib
.
Работает на Forwarding Information Base (FIB) таблицы маршрутизации (поведение по умолчанию).
Не ясно
route -h или help
.
Напечатать справку.
ip route help
route -n
.
Показывает числовые IP адреса и обходит преобразование имени хоста.
Не ясно
route -v или verbose
.
Включает многословный вывод команды.
ip -s route
route -V или version
.
Показывает версию команд net-tools и route.
ip -V
route add или del
.
Добавление или удаление маршрута в таблицу маршрутизации.
ip route via
route  dev
.
Связывает маршрут с конкретным устройством. Если dev  — это последняя опция в командной строке, то слово dev можно опустить.
ip route  dev
route gw
.
Маршрутизирует пакеты через указанный IP адрес шлюза.
ip route add default via
route -host
.
Указывает, что целью является хост (не сеть).
Не ясно
route -irtt
.
Устанавливает начальное точное время прохождения (IRTT) для TCP подключений через этот маршрут в  миллисекундах (1-12000). Это, как правило, используется только на сетях AX.25. Если пропустить RFC 1122, то используется значение по умолчанию в 300ms.
Не ясно; ip route rtt  устанавливает оценку RTT; rttvar  устанавливает первоначальную оценку дисперсии RTT.
route -net
.
Указывает, что целью является сеть (не хост).
Не ясно
route   netmask
.
Устанавливает маску  подсети.
Не ясно
route metric
.
Устанавливает поле показателя в таблице маршрутизации (используется демонами маршрутизации) к значению .
ip route  metric  orpreference
route  mod, dyn, или reinstate
.
Устанавливает динамический или измененный маршрут. Эти флаги для диагностических целей, и, как правило, только устанавливаются демонами маршрутизации.
Не ясно
route mss
.
Установка максимального размера сегмента Maximum Segment Size (MSS) TCP на указанное количество байтов  для подключений через этот маршрут.
ip route advmss  (the MSS to advertise to these destinations when establishing TCP connections).
route reject
.
Устанавливает блокирующий маршрут, который принудительно приведёт к неудаче поиск маршрута. Это используется для маскировки сетей перед использованием маршрута по умолчанию. Это не предназначено для обеспечения функциональности файервола. 
ip route add prohibit
route window
.
Установить размер окна TCP для соединений по этому маршруту до значения  байт. Это, как правило, используется только на сетях AX.25 и с драйверами, которые не могут справиться с фреймами back-to-back.
ip route window

Ниже несколько примеров синтаксиса команды ip route.

ip route add 10.23.30.0/24 via 192.168.8.50

ip route del 10.28.0.0/16 via 192.168.10.50 dev eth0

ip route chg default via 192.168.25.110 dev eth1

ip route get  (показывает интерфейс и шлюз, которые использовались бы для достижения удалённого хоста. Эта команда будет особенно полезной при решении проблем с роутингом на хостах с большими таблицами роутинга и/или с множеством сетевых интерфейсов).

Основные возможности IProute2 в Linux

Iproute2 — это сетевой пакет служебных программ, который по умолчанию используется сегодня в большинстве операционных систем на базе Linux, таких как Debian, Ubuntu, RedHat и многие другие настольные и серверные дистрибутивы. Этот пакет включает в себя очень полный набор инструментов, которые позволят нам детально настраивать и управлять сетевыми интерфейсами. Этот пакет полностью заменяет функции ifconfig, route и arp под одной и той же командой «ip», чтобы пользователям было проще использовать этот мощный инструмент. Конечно, у нас не только те же функции, что и всегда, но и в iproute2 добавлены очень важные функции.

IProute2 — гораздо более полный и современный инструмент, чем ifconfig, поэтому его рекомендуется использовать при управлении различными аспектами нашей сети. С IP мы можем выполнять те же действия, что и с ifconfig, и, будучи гораздо более полным набором, мы можем настроить больше параметров, которые ifconfig не позволит нам.

QoS (качество обслуживания)

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

Балансировка нагрузки и IP-туннели

Этот инструмент позволяет назначать веса каждому из сетевых интерфейсов, которые у нас есть на сервере, поэтому мы можем выполнять балансировку нагрузки на основе разных алгоритмов, что идеально подходит для балансировки трафика между несколькими интерфейсами и не сворачивания одного из них. iproute2 также позволяет нам создавать туннели, которые инкапсулируют пакеты в формате IPv4 и отправляются через инфраструктуру IP.

Несколько таблиц маршрутизации

iproute2 позволит нам создать несколько таблиц маршрутизации в операционной системе, мы сможем настроить основную таблицу маршрутизации, а затем создать разные таблицы маршрутизации для эффективной маршрутизации всего трафика. Конечно, в каждой таблице маршрутизации мы можем определить другой шлюз по умолчанию (шлюз). Это идеально, если у нас есть несколько сетевых интерфейсов на сервере, и мы хотим, чтобы трафик, который проходит через один интерфейс, проходил через тот же интерфейс, хотя он также может выходить через другой интерфейс, все зависит от того, как вы настроили маршрутизацию. на вашем сервере. Без сомнения, эта функциональность является одной из самых важных, которые интегрирует iproute2, поскольку она дает нам большую гибкость.

QinQ

В строгом смысле 802.1ad QinQ не является туннелем, но преследует сходную цель — мультиплексирование пользовательских VLAN в одном 802.1q VLAN. Этот протокол нередко применяется провайдерами для предоставления клиентам виртуальных выделенных линий вместо MPLS, если задача только в том, чтобы пробросить несколько клиентских VLAN с одной точки сети с другую.

В отличие от всех описанных протоколов, это протокол исключительно канального уровня и требует поддержки со стороны коммутаторов, которая присутствует не во всех моделях и версиях ОС. Также разные коммутаторы могут требовать разного протокола для провайдерских кадров: либо 802.1ad по стандарту (протокол Ethernet 0x88A8), либо 802.1q (протокол 0x8100).

Некоторые коммутаторы поддерживают QinQ странным образом. К примеру, я видел модели Dell PowerEdge, которые при включении QinQ на одном порте отключали обычный 802.1q VLAN на всех остальных, с очевидными последствиями для пользователей. Всегда проверяй настройки на стенде. Но если все нормально поддерживается, протокол прекрасно решает свою задачу.

Чтобы создать виртуальную выделенную линию, нам надо создать один внешний (провайдерский) VLAN и один или более внутренних (клиентских). Терминировать провайдерские туннели вместе с клиентскими на одном маршрутизаторе приходится не так часто, но иногда бывает нужно.

Создаем провайдерский:

1
2

$ip link add name eth0.10link eth0 type vlan proto802.1adid10

$ip link set dev eth0.10up

Интерфейсы VLAN, так же как и туннели, создаются выключенными, и нужно не забывать их поднимать командой
ip link set…up. Если коммутаторы требуют 802.1q в качестве протокола внешнего VLAN,
proto802.1ad нужно поменять на
proto802.1q.

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

1
2
3
4
5

$ip link add name eth0.10.20link eth0.10type vlan proto802.1qid20

$ip link set dev eth0.10.20up

$ip link add name eth0.10.25link eth0.10type vlan proto802.1qid25

$ip link set dev eth0.10.25up

Присвоить клиентским VLAN адреса можно как обычно — командой
ip address add. Присваивать адрес провайдерскому можно так же, но чаще всего не требуется.

На этом все. Надеюсь, эти знания помогут вам в построении виртуальных сетей и настройки iproute2.

Управление маршрутизацией с помощью iproute2

Из статьи Основные понятия сетей мы знаем, что если текущему узлу необходимо куда-либо отправить IP пакет, то сетевая подсистема ядра использует таблицу маршрутизации. Если пакет отправляется в ту же подсеть, которой принадлежит хост, то с помощью ARP определяется физический адрес хоста назначения и пакет отправляется напрямую хосту назначения. Если адрес назначения принадлежит не «локальной сети», то пакет отправляется на шлюз (читай — направляется по маршруту), который указан в таблице маршрутизации для сети, которой принадлежит хост назначения. При этом, выбирается та сеть, в которой адрес сети наиболее заполнен (читай — меньше хостов в подсети). Если для хоста назначения не найден маршрут, то пакет отправляется на «шлюз по умолчанию». Все шлюзы должны находиться в той же подсети, что и исходный хост.

Допустим, в локальной сети есть некоторый хост с адресом 192.168.1.100/24, а так же есть хост 192.168.1.1, который является шлюзом в глобальную сеть, а так же есть хост с адресом 192.168.1.2, который является связующим маршрутизатором с сетью 192.168.24.0/24. Для того, чтобы хост с адресом 192.168.1.100/24 имел доступ в сеть Интернет и к локальной сети 192.168.24.0/24, необходимо внести в таблицу маршрутизации соответствующие записи, например с помощью команды ip route add:

# ip route add default via 192.168.1.1
# ip route add 192.168.24.0/24 via 192.168.1.2
# ip route show
192.168.1.0/24 dev eth1proto kernelscope linksrc 192.168.1.100
192.168.24.0/24 via 192.168.1.2 dev eth1
default via 192.168.1.1 dev eth

Первая команда добавляет маршрут по умолчанию (default) через узел 192.168.1.1 (параметр via ). Вторая команда устанавливает маршрут на сеть 192.168.24.0/24 через узел 192.168.1.2.

Для вывода на экран содержимого таблицы маршрутизации используется команда ip route show. В данном случае в таблице маршрутизации три записи: первая о том, что сеть 192.168.1.0/24 доступна непосредственно на интерфейсе eth1 (запись добавляется автоматически), и две записи, добавленные пользователем: альтернативный маршрут и маршрут по умолчанию.

Добавление постоянного статического маршрута при инициализации сети

О настройке сети через конфигурационные файлы я рассказывал в статье  Настройка сети в Linux, диагностика и мониторинг, в сегодняшней статье я немного дополню эту информацию. С помощью файла /etc/network/interfaces есть возможность задать постоянные маршрута при поднятии интерфейса и удаление маршрута при выключении интерфейса. Это делается с помощью параметра up и down соответственно. Нижеприведенная конфигурация позволяет задать маршрут до сети 192.168.100.0/24 через шлюз 192.168.1.1:

iface eth1 inet static
address 192.168.1.100
netmask 255.255.255.0
up ip route add 192.168.100.0/24 via 192.168.1.1
down ip route del 192.168.100.0/24
gateway 192.168.1.3

Выводы

На этом, данную заметку заканчиваю. Подведу краткие итоги. Для управления физическими интерфейсами применяется команда ip link из пакета iproute. Для настройки свойств физического подключения (скорость, технология, тип дуплекса используется команда ethtool. Для того, чтобы хост мог взаимодействовать с другими узлами подсети в рамках локального сегмента (широковещательного домена) на нем должен быть установлен IP-адрес и определена маска подсети. Для управления IP-адресами в Linux можно использовать команду ip addr. В локальной сети данный узел для определения физических адресов(MAC) по IP — адресам других узлов использует протокол ARP и локальный ARP -кэш (таблица). Управление ARP -таблицей осуществляется командой ip neigh. Для взаимодействия с удаленными подсетями на данном узле необходимо определить шлюз по умолчанию или/и альтернативные шлюзы. Все шлюзы должны находиться в той же подсети, что и исходный узел. Управление таблицей маршрутизации на узле может осуществляться командой ip route. У параметров команд пакета iproute2 есть сокращенный синтаксис, например, ip link show eth0 можно записать как ip l sh eth0.

Управление физическими параметрами интерфейса

Физические параметры (скорость, технология Ethernet, тип дуплекса) сетевого подключения зависят от используемого оборудования и обычно настраиваются автоматически при подключении компьютера к сети. Но иногда из- за несогласованной работы оборудования и драйверов адаптера параметры необходимо выставить вручную, используя утилиту ethtool. Данная утилита включена в стандартные репозитории Debian и . Пример использования утилиты

iproute:~# ethtool eth2
Settings for eth2:
Supported ports: 
Supported link modes:10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes:10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: umbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: no
iproute:~# ethtool -i eth2
driver: e1000
version: 7.3.21-k5-NAPI
firmware-version: N/A
bus-info: 0000:00:08.0

Команды «IP» для настройки IP-адресации

В этой статье мы собираемся указать основные команды, которые мы можем использовать при просмотре и настройке IP-адресации, мы никогда не должны использовать команду «ifconfig», но мы собираемся указать «перевод», чтобы вы могли сравнить обе команды. .

Показать сетевые устройства и их настройки

С помощью команды «ifconfig» мы могли подробно просмотреть все интерфейсы и конфигурацию IP-адресации.

С командой ip у нас есть две похожие команды, одна из них покажет нам всю информацию на уровне IP-адресации (ip addr show), а другая покажет нам статус физического интерфейса (ip link show):

Отключить сетевой интерфейс

Как видите, команды почти такие же, но необходимо использовать «ip link», поскольку мы имеем в виду сетевую карту.

Чтобы запустить справку «ip link» и увидеть все команды, которые мы можем выполнить, просто введите:

Удалите IP-адрес из интерфейса.

Ifconfig не разрешает это напрямую, но IP-адрес 0.0.0.0 должен быть настроен

В случае ip это так же просто, как заменить «add» для настройки IP, на «del», чтобы удалить его (удалить).

Добавить виртуальный интерфейс (псевдоним)

В случае ifconfig это можно сделать так:

В случае ip нам просто нужно указать обычный IP, но с «label ens33: 1» или любым другим псевдонимом, который мы хотим.

Чтобы запустить справку «ip addr» и увидеть все команды, которые мы можем выполнить, просто введите:

Добавить запись в таблицу ARP

В случае «ifconfig» это делается не с помощью этой команды, а с помощью команды «arp», которая теперь исчезла:

В случае iproute2 мы должны использовать объект «neigh», как вы можете видеть:

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

Чтобы запустить справку «ip neigh» и увидеть все команды, которые мы можем выполнить, просто введите:

Как вы видели, возможности iproute2 с ip link, ip addr и ip neigh почти безграничны, кроме того, синтаксис очень интуитивно понятен и очень похож на маршрутизаторы Cisco, которые так хорошо известны в мире сетей.

Iptunnel

iptunnel ip tunnel a или addip tunnel chg или changeip tunnel d или delip tunnel ls или show
iptunnel add  remote local ip tunnel add remote local
iptunnel -V или version Не ясно

Синтаксис между iptunnel и ip tunnel очень схож, это показывают и примеры ниже.

 add ipip-tunl1 mode ipip remote 83.240.67.86 (ipip-tunl1 - это имя туннеля, 83.240.67.86 - это IP адрес удалённой точки).

 add ipi-tunl2 mode ipip remote 104.137.4.160 local 104.137.4.150 ttl 1

 add gre-tunl1 mode gre remote 192.168.22.17 local 192.168.10.21 ttl 255

Глубже о создании туннелей с помощью iproute2 вы можете познакомиться здесь.

Usage

Listing available interfaces

Either ip link (shorthand) or ip link show (longhand) work for displaying the interface links:

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> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:22:68:13:da:7d brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:1e:65:6b:ef:ca brd ff:ff:ff:ff:ff:ff

Showing IP addresses

Either ip addr (shorthand) or ip address show (longhand) work for displaying the interfaces with assigned IP addresses:

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
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:22:68:13:da:7d brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:1e:65:6b:ef:ca brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.10/24 brd 192.0.2.255 scope global wlan0
       valid_lft forever preferred_lft forever

Configuring an IP address on an interface

Using the IPv4 protocol:

Adding an IP address to the eth0 interface:

Removing an IP address from the wlan0 interface:

Using the IPv6 protocol:

Add IPv6 address to wlan0 interface

Remove IPv6 address from eth0 interface

Using the IPv4 protocol:

Using IPv6 protocol:

Showing the IP routing table

Showing the IPv4 routing table:

default via 192.0.2.1 dev eth0  metric 2 
127.0.0.0/8 via 127.0.0.1 dev lo 
192.0.2.0/24 dev eth0  proto kernel  scope link  src 192.0.2.11

Showing the IPv6 routing table:

2001:db8::10/64 dev wlan0  proto kernel  metric 2003  mtu 1492
fe80::/64 dev wlan0  proto kernel  metric 256  pref medium
ff00::/8 dev wlan0  metric 256 
default via fe80::1 dev wlan0  metric 2003  mtu 1492

Выбор IP-адреса для исходящих соединений

Выбор локального адреса для исходящих соединений в большинстве случаев системой осуществляется автоматически, исходя из имеющихся IP-адресов интерфейсов и таблиц маршрутизации. Во многих случаях сетевые сервисы (веб-сервер, почтовый сервер и др.) позволяют указывать исходный адрес с помощью конфигурационных файлов. Давайте рассмотрим пример. Пусть система имеет два интерфейса eth0(192.168.1.1/24) и eth1(192.168.56.102/24):

# ip addr show
1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
        state UP qlen 1000 link/ether 08:00:27:23:22:97 brd ff:ff:ff:ff:ff:ff
        inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
        inet6 fe80::a00:27ff:fe23:2297/64 scope link
        valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
        state UP qlen 1000 link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff
        inet 192.168.56.102/24 brd 192.168.56.255 scope global eth1
        inet6 fe80::a00:27ff:fefd:e5aa/64 scope link
        valid_lft forever preferred_lft forever

Маршрут по умолчанию у данной системы — 192.168.56.1:

# ip route show
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
192.168.56.0/24 dev eth1 proto kernel scope link src 192.168.56.102
default via 192.168.56.1 dev eth1

При такой конфигурации для исходящих соединений будет использоваться интерфейс eth1 и IP-адрес 192.168.56.102 (кроме соединений с узлами сети 192.168.1.0/24 — eth0 и IP-адрес 192.168.1.1). Ниже показан дамп сетевого пакета, отправленного командой ping -c 1 192.168.3.4:

# tcpdump -ne -i eth1 host 192.168.3.4
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode  listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
 10:18:18.924084 08:00:27:fd:e5:aa > 0a:00:27:00:00:00, ethertype IPv4 (0x0800),
 length 98: 192.168.56.102 > 192.168.3.4: ICMP echo request, id 960, seq 1, length 64

Однако, если добавить альтернативный маршрут для сети 192.168.3.0/24 через некоторый шлюз 192.168.1.254:

# ip route add 192.168.3.0/24 via 192.168.1.254

то, для пакетов, предназначенных узлу 192.168.3.4, будет использоваться интерфейс eth0 и исходящий адрес 192.168.1.1 (показан дамп сетевого пакета):

# tcpdump -ne -i eth0 host 192.168.3.4
 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
 10:23:33.393706 08:00:27:23:22:97 > 00:00:00:00:00:aa, ethertype IPv4 (0x0800),
 length 98: 192.168.1.1 > 192.168.3.4: ICMP echo request, id 968, seq 1, length 64

Синтаксис команды ip route позволяет повлиять на выбор локального IP-адреса при соединении с удаленными системами. Для этого служит параметр src с указанием предпочитаемого IP-адреса (должен быть установлен на сетевом интерфейсе компьютера) для отправки пакетов на направление, определяемое в команде префиксом маршрутизации. Так, для указанной ниже конфигурации будет использоваться исходящий адрес 192.168.56.102 (кроме взаимодействия с узлами сети 192.168.1.0/24):

# ip addr show eth1
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
         link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff
         inet 192.168.56.102/24 brd 192.168.56.255 scope global eth1
         inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1:1
         inet6 fe80::a00:27ff:fefd:e5aa/64 scope link
         valid_lft forever preferred_lft forever
# ip route show
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10
192.168.56.0/24 dev eth1 proto kernel scope link src 192.168.56.102
default via 192.168.56.1 dev eth1

Для того, чтобы использовать исходный адрес 192.168.1.10 для соединения с узлами сети 192.168.3.0/24 следует использовать команду:

# ip route add 192.168.3.0/24 via 192.168.56.1 src 192.168.1.10 dev eth1:1

Таблица маршрутизации при этом будет иметь вид:

# ip route show
192.168.3.0/24 via 192.168.56.1 dev eth1 src 192.168.1.10
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10
192.168.56.0/24 dev eth1 proto kernel scope link src 192.168.56.102
default via 192.168.56.1 dev eth1
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: