Таблица маршрутизации — таблица, состоящая из сетевых маршрутов и предназначенная для определения наилучшего пути передачи сетевого пакета. Каждая запись в таблице маршрутизации состоит, как правило, из таких полей:
- адрес сети или узла назначения, либо указание, что маршрут является маршрутом по умолчанию
- маску сети назначения (маска 255.255.255.255 позволяет указать единичный узел сети)
- шлюз, обозначающий адрес маршрутизатора в сети, на который необходимо отправить пакет, следующий до указанного адреса
- интерфейс, через который доступен шлюз (это может быть порядковый номер, GUID или символьное имя устройства)
- метрику — числовой показатель, задающий предпочтительность маршрута; чем меньше, тем предпочтительнее маршрут
Шлюз по умолчанию (default gateway) — адрес маршрутизатора, на который отправляется трафик, для которого невозможно определить маршрут, исходя из таблиц маршрутизации. Шлюз по умолчанию задаётся записью в таблице маршрутизации вида «сеть 0.0.0.0 с маской сети 0.0.0.0».
Просмотр маршрутов в Windows
Команда route
выводит на экран все содержимое таблицы IP-маршрутизации и позволяет изменять записи. Запущенная без параметров, команда route выводит справку:
Обработка таблиц сетевых маршрутов. ROUTE [-f] [-p] [-4|-6] <команда> [<назначение>] [MASK <маска_сети>] [<шлюз>] [METRIC <метрика>] [IF <интерфейс>] -f Очистка таблиц маршрутов от всех записей шлюзов. При указании одной из команд таблицы очищаются до выполнения команды. -p При использовании с командой ADD маршрут сохраняется после перезагрузок системы. По умолчанию маршруты не сохраняются при перезагрузке. Пропускается для остальных команд, всегда изменяющих соответствующие постоянные маршруты. -4 Принудительное использование протокола IPv4. -6 Принудительное использование протокола IPv6. <команда> Одна из следующих команд: PRINT Печать маршрута ADD Добавление маршрута DELETE Удаление маршрута CHANGE Изменение существующего маршрута <назначение> Задает узел. MASK Далее следует значение параметра "маска_сети". <маска_сети> Значение маски подсети для записи данного маршрута. Если этот параметр не задан, по умолчанию используется значение 255.255.255.255. <шлюз> Шлюз. <интерфейс> Номер интерфейса для указанного маршрута. METRIC Определение метрики, т. е. затрат для узла назначения. Проводится поиск всех символических имен узлов в файле сетевой базы данных NETWORKS. Проводится поиск символических имен шлюзов в файле базы данных имен узлов HOSTS. Для команд PRINT и DELETE можно указать узел или шлюз с помощью подстановочного знака либо опустить параметр "шлюз". Если узел содержит подстановочный знак "*" или "?", он используется в качестве шаблона и печатаются только соответствующие ему маршруты. Знак "*" соответствует любой строке, а "?" - любому знаку. Примеры: 157.*.1, 157.*, 127.*, *224*. Соответствие шаблону поддерживает только команда PRINT. Диагностические сообщения: Недопустимое значение MASK вызывает ошибку, если (УЗЕЛ МАСКА) != УЗЕЛ. Например> route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1 Добавление маршрута завершится ошибкой, так как указан недопустимый параметр маски. ( Узел & Маска) != Узел. Примеры: > route PRINT > route PRINT -4 > route PRINT -6 > route PRINT 157* . Печать только узлов, начинающихся со 157 > route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2 узел^ ^маска ^шлюз метрика^ ^ интерфейс^ Если IF не задан, то производится попытка найти лучший интерфейс для указанного шлюза. > route ADD 3ffe::/32 3ffe::1 > route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2 Параметр CHANGE используется только для изменения шлюза или метрики. > route DELETE 157.0.0.0 > route DELETE 3ffe::/32
Просмотр таблицы маршрутизации:
=========================================================================== Список интерфейсов 21.0a 00 27 00 00 15 . VirtualBox Host-Only Ethernet Adapter 5.0a 00 27 00 00 05 . VirtualBox Host-Only Ethernet Adapter #2 20.1c 1b 0d e6 14 bd . Realtek PCIe GbE Family Controller 1. Software Loopback Interface 1 =========================================================================== IPv4 таблица маршрута =========================================================================== Активные маршруты: Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика 0.0.0.0 0.0.0.0 192.168.110.1 192.168.110.2 35 127.0.0.0 255.0.0.0 On-link 127.0.0.1 331 127.0.0.1 255.255.255.255 On-link 127.0.0.1 331 127.255.255.255 255.255.255.255 On-link 127.0.0.1 331 172.28.128.0 255.255.255.0 On-link 172.28.128.1 281 172.28.128.1 255.255.255.255 On-link 172.28.128.1 281 172.28.128.255 255.255.255.255 On-link 172.28.128.1 281 192.168.53.0 255.255.255.0 On-link 192.168.53.1 281 192.168.53.1 255.255.255.255 On-link 192.168.53.1 281 192.168.53.255 255.255.255.255 On-link 192.168.53.1 281 192.168.110.0 255.255.255.0 On-link 192.168.110.2 291 192.168.110.2 255.255.255.255 On-link 192.168.110.2 291 192.168.110.255 255.255.255.255 On-link 192.168.110.2 291 224.0.0.0 240.0.0.0 On-link 127.0.0.1 331 224.0.0.0 240.0.0.0 On-link 172.28.128.1 281 224.0.0.0 240.0.0.0 On-link 192.168.53.1 281 224.0.0.0 240.0.0.0 On-link 192.168.110.2 291 255.255.255.255 255.255.255.255 On-link 127.0.0.1 331 255.255.255.255 255.255.255.255 On-link 172.28.128.1 281 255.255.255.255 255.255.255.255 On-link 192.168.53.1 281 255.255.255.255 255.255.255.255 On-link 192.168.110.2 291 =========================================================================== Постоянные маршруты: Отсутствует IPv6 таблица маршрута =========================================================================== Активные маршруты: Метрика Сетевой адрес Шлюз 1 331 ::1/128 On-link 20 291 fe80::/64 On-link 5 281 fe80::/64 On-link 21 281 fe80::/64 On-link 21 281 fe80::14e:9612:aea9:b378/128 On-link 5 281 fe80::61bb:3768:1294:4dc0/128 On-link 20 291 fe80::a872:bd46:b87d:7fac/128 On-link 1 331 ff00::/8 On-link 21 281 ff00::/8 On-link 5 281 ff00::/8 On-link 20 291 ff00::/8 On-link =========================================================================== Постоянные маршруты: Отсутствует
Команда tracert
предоставляет возможность определить маршрут, по которому проходит пакет до заданного узла:
Трассировка маршрута к ya.ru [87.250.250.242] с максимальным числом прыжков 30: 1 <1 мс <1 мс <1 мс 192.168.110.1 2 1 ms <1 мс <1 мс 78.107.125.69 3 1 ms 1 ms 1 ms stpert-bng1-local.msk.corbina.net [85.21.0.172] 4 1 ms 1 ms 1 ms 10.2.254.10 5 3 ms 3 ms 3 ms korova-bb-be5.corbina.net [195.14.54.195] 6 2 ms 2 ms 2 ms 85.21.224.96 7 2 ms 2 ms 2 ms 85.21.224.54 8 3 ms 2 ms 3 ms m9-br-be1.corbina.net [195.14.54.79] 9 7 ms 7 ms 12 ms corbina-gw.dante.yandex.net [83.102.145.178] 10 5 ms 4 ms 4 ms ya.ru [87.250.250.242] Трассировка завершена.
Просмотр маршрутов в Linux
Команда route
выводит на экран все содержимое таблицы IP-маршрутизации и позволяет изменять записи.
$ route --help
Использование: route [-nNvee] [-FC] [<AF>] Отобразить таблицу маршрутизации ядра route [-v] [-FC] {add|del|flush} . Изменить таблицу маршрутизации для AF. route {-h|--help} [<AF>] Детальное описание использование указанной AF. route {-V|--version} Отобразить версию/автора и выйти. -v, --verbose более детальный вывод -n, --numeric не преобразовывать адреса в имена -e, --extend отображать другую/больше информации -F, -fib отобразить информацию форвардинга базы (по умолчанию) -C, --cache отобразить кэш маршрутизации вместо FIB <AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet Список возможный адресных семейств (которые поддерживают маршрутизацию): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25) Просмотр таблицы маршрутизации:
Таблица маршрутизации ядра протокола IP Destination Gateway Genmask Flags Metric Ref Use Iface default _gateway 0.0.0.0 UG 100 0 0 enp0s3 link-local 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s3 192.168.110.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
Таблица маршрутизации ядра протокола IP Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.110.1 0.0.0.0 UG 100 0 0 enp0s3 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s3 192.168.110.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
Утилита traceroute
предоставляет возможность определить маршрут, по которому проходит пакет до заданного узла:
sudo apt install traceroute traceroute to ya.ru (87.250.250.242), 30 hops max, 60 byte packets 1 _gateway (192.168.110.1) 0.697 ms 0.607 ms 0.584 ms 2 78.107.125.69 (78.107.125.69) 2.050 ms 1.967 ms 1.777 ms 3 stpert-bng1-local.msk.corbina.net (85.21.0.172) 1.679 ms 1.605 ms 1.499 ms 4 10.2.254.10 (10.2.254.10) 2.215 ms 2.180 ms 2.167 ms 5 korova-bb-be5.corbina.net (195.14.54.195) 3.577 ms 3.544 ms 3.824 ms 6 85.21.224.96 (85.21.224.96) 2.645 ms 2.208 ms 2.149 ms 7 m9-crs-be13.corbina.net (85.21.224.54) 3.762 ms 3.207 ms 3.794 ms 8 m9-br-be3.corbina.net (195.14.62.85) 3.716 ms 3.639 ms m9-br-be1.corbina.net (195.14.54.79) 3.559 ms 9 corbina-gw.dante.yandex.net (83.102.145.178) 6.750 ms 11.716 ms 16.226 ms 10 ya.ru (87.250.250.242) 5.330 ms 8.678 ms 8.628 ms
Поиск:
Linux
• Windows
• Локальная сеть
• route
• Маска сети
• Шлюз
• Маршрут
• Таблица
• Адрес
• Команда
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
1. Описание команды ROUTE.
1.1. Формат командной строки:
C:\ ROUTE [-f] [-p] [-4|-6] command [destination] [MASK netmask] [gateway] [METRIC metric] [IF interface]
Подсказку по параметрам командной строки можно получить используя встроенную справку ( route /?).
- -f
— Очистка таблиц маршрутов от записей всех шлюзов. При указании одной из команд таблицы очищаются до выполнения команды. - -p
— При использовании с командой ADD задает сохранение маршрута при перезагрузке системы. По умолчанию маршруты не сохраняются при перезагрузке. Пропускается для остальных команд, изменяющих соответствующие постоянные маршруты. Этот параметр не поддерживается в Windows 95. - -4
— Обязательное использование протокола IPv4. - -6
— Обязательное использование протокола IPv6. - command
— Одна из следующих команд:- — PRINT
— Печать маршрута - — ADD
— Добавление маршрута - — DELETE
— Удаление маршрута - — CHANGE
— Изменение существующего маршрута
- — PRINT
- destination
— Адресуемый узел. - MASK
— Указывает, что следующий параметр интерпретируется как маска сети. - netmask
— Значение маски подсети для записи данного маршрута. Если этот параметр не задан, по умолчанию используется значение 255.255.255.255. - gateway
— Шлюз. - interface
— Номер интерфейса для указанного маршрута. - METRIC
— Определение метрики, т.е. цены для адресуемого узла. Чем ниже значение метрики, тем выше приоритет узла при построении маршрута.
Поиск всех символических имен узлов проводится в файле сетевой базы данных NETWORKS. Поиск символических имен шлюзов проводится в файле базы данных имен узлов HOSTS.
Для команд PRINT и DELETE можно указать узел и шлюз с помощью подстановочных знаков или опустить параметр «шлюз».
Если адресуемый узел содержит подстановочные знаки * или ?, он используется в качестве шаблона, и печатаются только соответствующие ему маршруты. Знак ‘*’ соответствует любой строке, а ‘?’ — одному знаку.
Примеры: 157.*.1, 157.*, 127.*, *224*.
Соответствие шаблону поддерживает только команда PRINT
.
Недопустимое значение MASK
вызывает ошибку, если (УЗЕЛ & МАСКА) != УЗЕЛ
.
Например добавление маршрута завершится ошибкой, поскольку указан недопустимый параметр маски. ( Узел & Маска) != Узел.
C:\ route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1 -
2. Примеры параметров:
2.1. отобразить таблицу маршрутов:
C:\ route PRINT
2.2. Отобразить таблицу маршрутов только для IPv4:
C:\ route PRINT -4
2.3. Отобразить таблицу маршрутов только для IPv6:
C:\ route PRINT -6
2.4. Отобразить таблицу маршрутов только для узлов, начинающихся со 157:
C:\ route PRINT 157*
Если сетевой интерфейс (IF) не задан, то производится попытка найти лучший интерфейс для указанного шлюза.
2.5. Добавить новый маршрут для узла с IPv6:
C:\ route ADD 3ffe::/32 3ffe::1
2.6. Изменить существующий маршрут для узла IPv4:
C:\ route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2
Параметр CHANGE используется только для изменения шлюза или метрики.
2.7. Удалить маршрут для IPv4:
C:\ route DELETE 157.0.0.0
2.8. Удалить маршрут для IPV6:
C:\ route DELETE 3ffe::/32
3. Примеры использования команды ROUTE.
3.1. Отобразить текущую таблицу маршрутов:
C:\ route print
Отобразиться следующая информация:
- Список интерфейсов
— отображаются идентификаторы ( ID ), физические ( MAC ) адреса и названия сетевых адаптеров. Например: - 24
— идентификатор интерфейса - 00 50 ba 5d 0c c4
— MAC-адрес сетевого адаптера - D-Link DFE-538TX 10/100 адаптер
— название сетевого адаптера. - Сетевой адрес (Network Destination)
— IP-адрес, адрес сети, или адрес 0.0.0.0
используемый для шлюза по умолчанию ( Default Gateway ). Это конечная точка маршрута - Маска сети ( Netmask )
— маска сети. - Адрес шлюза ( Gateway )
— IP-адрес шлюза, через который будет выполняться отправка пакета для достижения конечной точки. В Windows Vista / Windows 7 / 8 и более поздних версиях, для адресов, достижимых локально, в данной колонке отображается On-link
. Другими словами, значение On-link
в колонке «Шлюз» означает, что шлюз не используется, адрес назначения достижим напрямую, без маршрутизации. - Интерфейс ( Interface )
— IP-адрес сетевого интерфейса, через который выполняется доставка пакета конечной точке маршрута. - Метрика ( metric )
— значение метрики (1-9999). Метрика представляет собой числовое значение, позволяющее оптимизировать доставку пакета получателю, если конечная точка маршрута может быть достижима по нескольким разным маршрутам. Чем меньше значение метрики, тем выше приоритет маршрута.
3.2. Отобразить таблицу маршрутов только для адресов, начинающихся с 192:
C:\ route print 192.*
3.3. Установить в качестве шлюза по умолчанию (основного шлюза) адрес 192.168.1.1:
C:\ route add 0.0.0.0 mask 0.0.0.0 192.168.1.1
3.4. Добавить маршрут для подсети 10.0.0.0/255.0.0.0 и запомнить его в реестре:
C:\ route -p add 10.0.0.0 mask 255.0.0.0 10.0.0.1
Это постоянный статический маршрут. Если маршрут добавлен без использования параметра -p
то он сохраняется только до перезагрузки системы (до перезапуска сетевого системного программного обеспечения). Если же, при добавлении маршрута искользовался данный параметр, то информация о маршруте записывается в реестр Windows (раздел HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes ) и будет использоваться постоянно при активации сетевых интерфейсов.
3.5 Удалить маршрут для подсети 10.0.0.0/255.0.0.0:
C:\ route delete 10.0.0.0 mask 255.0.0.0
C:\ route add 10.10.10.10 192.168.1.158
3.7. Удалить маршрут созданный предыдущей командой:
C:\ route delete 10.10.10.10
3.8. Изменить адрес шлюза для существующего маршрута к сети 10.0.0.0/255.0.0.0
на значение 10.10.10.1
:
C:\ route change 10.0.0.0 mask 255.0.0.0 10.10.10.1
Допускается использование данной команды только для изменения адреса шлюза и метрики.
3.9. Очистить таблицу маршрутов:
C:\ route -f
После перезагрузки системы, или при перезапуске сетевых подключений таблица маршрутов будет восстановлена исходя из текущей сетевой конфигурации компьютера. При выполнении команды route -f
из таблицы удаляются все маршруты, которые удовлетворяют условиям:
- не относятся к петлевому интерфейсу ( интерфейсу с IP 127.0.0.1 и маской -255.0.0.0)
- не являются маршрутами для многоадресной (multicast) рассылки (IP 224.0.0.1 маска 255.0.0.0)
- не являются узловыми маршрутами (когда маска равна 255.255.255.255) .
При обработке таблицы маршрутов, статические маршруты имеют высший приоритет, по сравнению с маршрутом, использующим для достижения конечной точки шлюз по умолчанию.
Немного усложним конфигурацию сети из третьей части. У нашего компьютера теперь не два, а три сетевых интерфейса. Первый интерфейс имеет выход в интернет через сеть первого интернет-провайдера, второй интерфейс — через сеть второго интернет-провайдера. А третий интерфейс подключен к локальной сети 192.168.250.0/24
. И наш компьютер должен обеспечивать выход в интернет для всех компьютеров этой сети.

Настройка сети
На компьютере gateway
установлена ОС Ubuntu Server, настройка сети выполнена с использованием Netplan:
2 networkd 192.168.50.2/24 # маршрут по умолчанию для таблицы main, метрика 100 (основной) 0.0.0.0/0 192.168.50.2 192.168.50.1 100 # маршрут по умолчанию для таблицы primary (идентификатор 10) 0.0.0.0/0 192.168.50.1 10 # если отправитель 192.168.50.2, просматривать таблицу primary 192.168.50.2 10 31000 8.8.8.8 8.8.4.4 192.168.150.2/24 # маршрут по умолчанию для таблицы main, метрика 200 (резервный) 0.0.0.0/0 192.168.150.2 192.168.150.1 200 # маршрут по умолчанию для таблицы secondary (идентификатор 20) 0.0.0.0/0 192.168.150.1 20 # если отправитель 192.168.150.2, просматривать таблицу secondary 192.168.150.2 20 32000 8.8.8.8 8.8.4.4 192.168.250.1/24 8.8.8.8 8.8.4.4
После загрузки системы смотрим маршруты таблицы main
:
ip route show
default via 192.168.50.1 dev enp0s3 proto static src 192.168.50.2 metric 100
default via 192.168.150.1 dev enp0s8 proto static src 192.168.150.2 metric 200
192.168.50.0/24 dev enp0s3 proto kernel scope link src 192.168.50.2
192.168.150.0/24 dev enp0s8 proto kernel scope link src 192.168.150.2
192.168.250.0/24 dev enp0s9 proto kernel scope link src 192.168.250.1 Здесь два маршрута по умолчанию, но с разными значениями метрики — один маршрут основной (метрика 100), другой резервный (метрика 200).
Таблицы маршрутизации
ip rule show 0: from all lookup local 31000: from 192.168.50.2 lookup primary 32000: from 192.168.150.2 lookup secondary 32766: from all lookup main 32767: from all lookup default
Таблицы маршрутизации primary
и secondary
определены в файле /etc/iproute2/rt_tables
:
# предопределенные таблицы 255 local 254 main 253 default 0 unspec # добавляем новые таблицы 10 primary 20 secondary
Каждая из таблиц маршрутизации содержит маршрут по умолчанию:
ip route show table primary
default via 192.168.50.1 dev enp0s3 proto static ip route show table secondary
default via 192.168.150.1 dev enp0s8 proto static Переключение каналов
За переключение каналов отвечает скрипт /root/swicth-channel/swicth-channel.sh
:
#!/bin/sh
# Доступность этого хоста означает доступность основного канала
PING_HOST='8.8.8.8'
# Файл-флаг создается в момент переключении на резервный канал
LOCK_FILE='/root/switch-channel/switch-channel.lock'
# Будем записывать в журнал события переключения на другой канал
LOG_FILE='/root/switch-channel/switch-channel.log'
# Сетевой интерфейс, который смотрит в сеть первого интернет провайдера
IFACE_ONE='enp0s3'
# Сетевой интерфейс, который смотрит в сеть второго интернет провайдера
IFACE_TWO='enp0s8'
# IP-адрес первого сетевого интерфейса (первый интернет провайдер)
IP_IF_ONE='192.168.50.2'
# IP-адрес второго сетевого интерфейса (второй интернет провайдер)
IP_IF_TWO='192.168.150.2'
# IP-адрес шлюза первого интернет провайдера
IP_GW_ONE='192.168.50.1'
# IP-адрес шлюза второго интернет провайдера
IP_GW_TWO='192.168.150.1'
# Возможна такая ситуация, что компьютер был перезагружен в момент, когда работал
# резервный канал интернет. А за время перезагрузки восстановился основной канал
# интернет. В этом случае файл-флаг продолжит существовать и не позволит скрипту
# в дальнейшем переключаться на резервный канал.
if [ -f ${LOCK_FILE} ]; then # Получаем вывод команды ip route show, берем только первую строку, ищем в этой # строке подстроку ${IFACE_ONE}. Если такая подстрока найдена, значит работает # основной канал интернет — и нужно удалить файл-флаг. ip route show | head -1 | grep ${IFACE_ONE} if [ $? -eq 0 ]; then rm -f ${LOCK_FILE} fi
fi
# Пингуем проверочный хост через основной канал
ping -I ${IP_IF_ONE} -c1 -n ${PING_HOST} > /dev/null
# Если проверочный хост не доступен
if [ $? -ne 0 ]; then # Если нет файла-флага, значит мы сейчас на основном канале if [ ! -f ${LOCK_FILE} ]; then # Переключаемся на резервный канал (метрика основного маршрута 300, метрика резервного маршрута 200) ip route del default via ${IP_GW_ONE} dev ${IFACE_ONE} src ${IP_IF_ONE} proto static metric 100 ip route add default via ${IP_GW_ONE} dev ${IFACE_ONE} src ${IP_IF_ONE} proto static metric 300 # Создаём файл-флаг, что мы на резервном канале touch ${LOCK_FILE} # Делаем запись в файл журнала echo `date +'%Y/%m/%d %H:%M:%S'` Switching to secondary channel >> ${LOG_FILE} fi
else # Если проверочный хост доступен # Если есть файл-флаг, значит мы сейчас на резервном канале if [ -f ${LOCK_FILE} ]; then # Переключаемся на основной канал (метрика основного маршрута 100, метрика резервного маршрута 200) ip route del default via ${IP_GW_ONE} dev ${IFACE_ONE} src ${IP_IF_ONE} proto static metric 300 ip route add default via ${IP_GW_ONE} dev ${IFACE_ONE} src ${IP_IF_ONE} proto static metric 100 # Удаляем файл-флаг, мы опять на основном канале rm -f ${LOCK_FILE} # Делаем запись в файл журнала echo `date +'%Y/%m/%d %H:%M:%S'` Switching to primary channel >> ${LOG_FILE} fi
fi chmod +x /root/swicth-channel/swicth-channel.sh Этот скрипт будем запускать каждую минуту:
# проверка каналов выхода в интернет и переключение канала при необходимости
* * * * * root /root/switch-channel/switch-channel.sh Форвардинг пакетов
По умолчанию транзитный трафик отключен, так что редактируем файл /etc/sysctl.conf
:
net.ipv4.ip_forward=1

После этого настраиваем netfilter
с помощью утилиты iptables
:
iptables -P FORWARD DROP iptables -A FORWARD -i enp0s3 -o enp0s9 -d 192.168.250.0/24 -j ACCEPT iptables -A FORWARD -i enp0s8 -o enp0s9 -d 192.168.250.0/24 -j ACCEPT iptables -A FORWARD -i enp0s9 -o enp0s3 -s 192.168.250.0/24 -j ACCEPT iptables -A FORWARD -i enp0s9 -o enp0s8 -s 192.168.250.0/24 -j ACCEPT
И смотрим, что получилось:
iptables -L -v --line-numbers Chain INPUT (policy ACCEPT 181 packets, 43950 bytes) num pkts bytes target prot opt in out source destination Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- enp0s3 enp0s9 anywhere 192.168.250.0/24 2 0 0 ACCEPT all -- enp0s8 enp0s9 anywhere 192.168.250.0/24 3 0 0 ACCEPT all -- enp0s9 enp0s3 192.168.250.0/24 anywhere 4 0 0 ACCEPT all -- enp0s9 enp0s8 192.168.250.0/24 anywhere Chain OUTPUT (policy ACCEPT 227 packets, 30799 bytes) num pkts bytes target prot opt in out source destination
Мы разрешили ходить транзитным пакетам для нашего диапазона ip адресов, а всё остальное запретили.

Сохранение правил
Созданные с помощью утилиты iptables
правила пропадут при перезагрузке Так что их нужно сохранить и восстанавливать при перезагрузке. В этом нам поможет пакет iptables-persistent
:
sudo apt install iptables-persistent При установке пакета будет предложено сохранить текущие правила iptables
:
- в файл
/etc/iptables/rules.v4
для протокола IPv4 - в файл
/etc/iptables/rules.v6
для протокола IPv6

После установки пакета будет добавлена новая служба netfilter-persistent.service
, которая при загрузке системы будет восстанавливать созданные нами правила:
systemctl status netfilter-persistent.service
● netfilter-persistent.service - netfilter persistent configuration Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled) Active: active (exited) since Sat 2020-05-24 11:20:44 MSK; 2h 32min ago Process: 446 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS) Main PID: 446 (code=exited, status=0/SUCCESS)
май 24 11:20:43 gateway systemd[1]: Starting netfilter persistent configuration.
май 24 11:20:44 gateway systemd[1]: Started netfilter persistent configuration. Поднимаем web-сервер
Установим на машине web-server
пакет apache2
:
apt install apache2 С компьютера pc-1
проверим, что сервер работает:

Чтобы обеспечить доступ к web-серверу из интернета, выполняем на gateway1
команду (подробности здесь
):
iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 80 -j DNAT --to-destination 192.168.250.254 И сохраняем правила, чтобы они восстановилось после перезагрузки:
iptables-save > /etc/iptables/rules.v4 Проверяем, что web-сервер теперь доступен, набирая в адресной строке http://111.111.111.111/
:

Настройка pc-1 и pc-2
sudo nano /etc/netplan/01-network-manager-all.yaml # Настройка сети для компьютера pc-1 2 networkd 192.168.250.2/24 192.168.250.1 8.8.8.8 8.8.4.4 Служба NetworkManager
отключена, вместо нее за сеть отвечает служба systemd-networkd
:
systemctl stop NetworkManager.service systemctl disable NetworkManager.service systemctl start systemd-networkd.service systemctl enable systemd-networkd.service
sudo nano /etc/netplan/01-network-manager-all.yaml # Настройка сети для компьютера pc-2 2 networkd 192.168.250.3/24 192.168.250.1 8.8.8.8 8.8.4.4 Еще одна таблица маршрутизации
Давайте сделаем так, чтобы компьютер pc-2
выходил в интернет через резервный канал связи, т.е. через сеть второго провайдера. Для этого создадим еще одну таблицу маршрутизации (имена таблиц операционной системе не нужны, это исключительно для нашего удобства, чтобы обращаться не по номеру таблицы, а по говорящему имени):
# предопределенные таблицы 255 local 254 main 253 default 0 unspec # добавляем новые таблицы 10 primary 20 secondary 30 pc2-via-gw2
Теперь добавляем новое правило — какие таблицы просматривать при отправке пакета:
ip rule add from 192.168.250.3 table pc2-via-gw2 pref 30000 Смотрим список правил — какие таблицы будут просмотрены при отправке пакета:
ip rule show 0: from all lookup local 30000: from 192.168.250.3 lookup pc2-via-gw2 31000: from 192.168.50.2 lookup primary 32000: from 192.168.150.2 lookup secondary 32766: from all lookup main 32767: from all lookup default
Для таблицы pc2-via-gw2
зададим маршрут по умолчанию:
ip route add default via 192.168.150.1 dev enp0s8 table pc2-via-gw2 Убедимся, что маршрут по умолчанию для pc2-via-gw2
добавлен:
ip route show table pc2-via-gw2
default via 192.168.150.1 dev enp0s8 proto static Проверка маршрута для pc-2
Проверим, что компьютер pc-2
выходит в интернет через резервный канал связи:
traceroute -n ya.ru traceroute to ya.ru (87.250.250.242), 30 hops max, 60 byte packets 1 192.168.250.1 0.454 ms 0.384 ms 0.341 ms 2 192.168.150.1 1.177 ms 1.142 ms 1.091 ms . 9 87.250.250.242 10.984 ms 10.768 ms 10.716 ms
Удостоверимся, что компьютер pc-1
выходит в интернет через основной канал связи:
traceroute -n ya.ru traceroute to ya.ru (87.250.250.242), 30 hops max, 60 byte packets 1 192.168.250.1 0.329 ms 0.225 ms 0.172 ms 2 192.168.50.1 0.376 ms 0.326 ms 0.394 ms . 9 87.250.250.242 8.377 ms 10.626 ms 11.813 ms
Файл конфигурации сети
Созданные нами правило и маршрут по умолчанию для таблицы pc2-via-gw2
пропадут при перезагрузке gateway
, поэтому надо изменить файл конфигурации сети:
2 networkd 192.168.50.2/24 # маршрут по умолчанию для таблицы main, метрика 100 (основной) 0.0.0.0/0 192.168.50.2 192.168.50.1 100 # маршрут по умолчанию для таблицы primary (идентификатор 10) 0.0.0.0/0 192.168.50.1 10 # если отправитель 192.168.50.2, просматривать таблицу primary 192.168.50.2 10 31000 8.8.8.8 8.8.4.4 192.168.150.2/24 # маршрут по умолчанию для таблицы main, метрика 200 (резервный) 0.0.0.0/0 192.168.150.2 192.168.150.1 200 # маршрут по умолчанию для таблицы secondary (идентификатор 20) 0.0.0.0/0 192.168.150.1 20 # маршрут по умолчанию для таблицы pc2-via-gw2 (идентификатор 30) 0.0.0.0/0 192.168.150.1 30 # если отправитель 192.168.150.2, просматривать таблицу secondary 192.168.150.2 20 32000 # если отправитель 192.168.250.3, просматривать таблицу pc2-via-gw2 # (отправлять пакеты от компьютера pc-2 через второго провайдера) 192.168.250.3 30 30000 8.8.8.8 8.8.4.4 192.168.250.1/24 8.8.8.8 8.8.4.4
Дополнительно
Поиск:
Bash
• Linux
• Локальная сеть
• Маршрутизация
• Настройка
• Сетевой интерфейс
• Таблица




