Как уже упоминал пользователь Ferenc, маршрутизация на основе политик, вероятно, является лучшим решением.
Взгляните на ip rule
, обычно это выглядит так:
# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Это отсортированный список приоритетов правил, за которым следует спецификация правила. local
, main
и default
— это таблицы маршрутизации, на которые стоит обратить внимание. Чтобы увидеть конкретную таблицу маршрутизации, запустите ip route show table <table>
или короче ip r s t <table>
.
Для маршрутизации разных исходных IP-адресов к разным целям или через разные устройства нам потребуются отдельные таблицы маршрутизации и правила маршрутизации для перехода к этим таблицам.
Предположим, нам нужен специальный маршрут для IP 10.0.0.42 и специальный маршрут для сети 10.0.0.128/25. Нам нужно создать два дополнительных правила и две дополнительные таблицы , порядок не имеет значения. Давайте создадим правила. Пример:
# ip rule add from 10.0.0.42 lookup 300 prio 5
# ip rule add from 10.0.0.128/25 lookup 301 prio 6
Давайте посмотрим на них:
# ip rule
0: from all lookup local
5: from 10.0.0.42 lookup 300
6: from 10.0.0.128/25 lookup 301
32766: from all lookup main
32767: from all lookup default
300
и 301
— это наши имена таблиц (таблицы обычно представляют собой просто числа, но им также можно давать имена, добавляя их к/etc/iproute2/rt_tables
). Остальное должно быть -самоочевидным.
Теперь нам нужно заполнить эти таблицы. Пример:
# ip route add default via 10.0.0.1 dev eth1 table 300
# ip route add 192.168.178.0/24 dev eth2 table 301
Давайте посмотрим на них:
# ip route show table 300
default via 10.0.0.1 dev eth1 scope link
# ip route show table 301
192.168.178.0/24 dev eth2 scope link
Как видите, можно добавить любой понравившийся маршрут. Система с адреса 10.0.0.42 теперь будет маршрутизироваться через 10.0.0.1 через eth1. Системы из сети 10.0.0.128/25 теперь будут маршрутизироваться через eth2 , если их адрес назначения находится внутри сети 192.168.178.0/24.
Если ни один маршрут не совпадает с вашими специальными таблицами маршрутизации, оценивается следующее правило маршрутизации. Например, если системы из сети 10.0.0.128/25 не хотят выполнять маршрутизацию к 192.168.178.0/24, они возвращаются к основной таблице.
Если вы хотите удалить какое-либо правило, просто замените add
на del
.Таблицы маршрутизации будут существовать до тех пор, пока вы не удалите все их маршруты, т.е. запустив ip route flush table <table>
. Если вы хотите увидеть все правила маршрутизации, просто запустите ip route show table all
.
Правила маршрутизации очень гибкие, вы можете использовать различные другие селекторы, такие как входящие/исходящие интерфейсы, исходные/целевые порты и протоколы. Подробности см. в man ip rule
.
Будьте осторожны, чтобы не заблокировать себя при редактировании маршрутов и правил через SSH.
Процессу сервера будет отправлен сигнал SIGTERM
с ожиданием завершения процесса. Сам процесс должен поймать сигнал и сделать все необходимое для корректного выхода. т.е. сам процесс должен позаботиться об удалении файлов, закрытии открытых сетевых подключений и т. д.
Если процесс не завершается в течение установленного времени ожидания, он принудительно завершается сигналом SIGKILL
. Значение таймаута по умолчанию составляет 90 секунд.