Вопрос или проблема
Я создал виртуальный интерфейс и хотел бы использовать другой шлюз по умолчанию для пакетов, покидающих мои машины через этот виртуальный интерфейс. Есть идеи, как я могу этого добиться? Я даже не знаю, могу ли я это сделать с помощью netplan
, route
или мне нужно использовать iptables
Пример для пакетов, покидающих мою машину с:
eth0 (192.168.1.129) -> шлюз 192.168.1.1
eth0:0 (192.168.1.130) -> шлюз 192.168.1.2
Мой /etc/netplan/50-cloud-init.yaml
в настоящее время выглядит так:
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.129/24
- 192.168.1.130/24:
label: eth0:0
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
routes:
- to: default
via: 192.168.1.1
Я уже пытался добавить новый маршрут, но получаю ошибку RTNETLINK answers: File exists
:
sudo ip route add 0.0.0.0/0 via 192.168.1.160 dev eth0:0
Однако в данный момент такой маршрут не существует:
$ sudo route -n
Таблица маршрутизации ядра IP
Направление Шлюз Маска Флаги Метрика Ссылается Использование Интерфейс
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
10.0.20.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0
10.0.51.0 0.0.0.0 255.255.255.0 U 0 0 0 tap1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Ответ или решение
Создание различных шлюзов для разных виртуальных интерфейсов — это задача, которая может возникнуть в сетевой конфигурации, например, когда требуется маршрутизировать трафик через различные маршрутизаторы в зависимости от источника трафика. В данном случае у Вас есть один физический интерфейс eth0
, но он имеет два IP-адреса, и Вы хотите использовать разные шлюзы для каждого адреса.
Теоретические основы
Сетевые интерфейсы в Linux можно настраивать с использованием таких инструментов, как netplan
, iproute2
и iptables
. К основным концепциям, которые Вам понадобятся, относятся:
-
Таблицы маршрутизации: это наборы маршрутов, которые ваш сетевой стек использует для принятия решений о том, куда отправить пакеты. Обычно используется одна таблица маршрутизации (таблица
main
), но в Linux можно создавать и использовать дополнительные таблицы. -
Политическая маршрутизация (
Policy Routing
): позволяет выбрать таблицу маршрутизации на основе определенных критериев, например, исходного адреса, порта, или типа нагрузки. -
Инструмент
iproute2
: предоставляет более гибкие средства для управления сетевыми интерфейсами и маршрутизацией по сравнению с устаревшей командойroute
.
Пример решения
Особенностью применения различных шлюзов для одного физического интерфейса с несколькими IP-адресами является использование отдельных таблиц маршрутизации. Для реализации этого шага вам следует использовать ip
инструмент для настройки. Вот подробный план действий:
1. Создание дополнительных таблиц маршрутизации
Сначала, добавьте дополнительную таблицу маршрутизации в файл /etc/iproute2/rt_tables
. Это делается, добавлением две новые строки:
1 eth0_main
2 eth0_second
2. Настройка правил политической маршрутизации
Используйте команду ip rule
, чтобы направить трафик из исходного IP через отдельные таблицы маршрутизации:
sudo ip rule add from 192.168.1.129 lookup eth0_main
sudo ip rule add from 192.168.1.130 lookup eth0_second
3. Настройка таблиц маршрутизации
Теперь настройте маршруты в этих таблицах:
sudo ip route add default via 192.168.1.1 dev eth0 table eth0_main
sudo ip route add default via 192.168.1.2 dev eth0 table eth0_second
Применение изменений
Чтобы изменения сохранились после перезагрузки, вы можете добавить их в соответствующие конфигурационные файлы системы или в сценарии запуска. Однако большинство современных дистрибутивов используют netplan
или NetworkManager
для таких задач.
Применение на практике
- Управление конфигурацией через
netplan
netplan
, как ваш текущий инструмент, может не поддерживать необходимые функции политической маршрутизации во всех версиях. В таком случае, исользуйте netplan
для базовой конфигурации интерфейсов, а затем вы можете использовать системные параметры (например, rc.local
) для применения специфической маршрутизации через iproute2
.
Пример:
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.129/24
- 192.168.1.130/24
gateway4: 192.168.1.1 # базовый шлюз, так как netplan не распознает политическую маршрутизацию
- Скрипты и автоматизация
Создайте скрипт для применения конфигурации после каждого перезапуска сети:
Создайте файл /etc/network/if-up.d/routing
и добавьте в него следующее:
#!/bin/bash
ip rule add from 192.168.1.129 lookup eth0_main
ip rule add from 192.168.1.130 lookup eth0_second
ip route add default via 192.168.1.1 dev eth0 table eth0_main
ip route add default via 192.168.1.2 dev eth0 table eth0_second
Не забудьте сделать скрипт исполняемым:
sudo chmod +x /etc/network/if-up.d/routing
Итог
Ваша цель – конфигурирование разных шлюзов для разных IP-адресов на одном интерфейсе – достижима путем настройки политической маршрутизации, для чего используется инструментарий iproute2
, как показано выше. Этот метод позволяет эффективно распределять маршруты на основе метаданных, которые удовлетворяют вашим требованиям, и обеспечивать надежную работу сети с необходимыми параметрами.
В случае сложностей всегда полезно проверять команды и их влияние через такие утилиты, как ip rule show
и ip route show table <table_name>
, чтобы убедиться в корректности заданной конфигурации.