Я сам нашел решение для этого: маршрутизация для нескольких каналов связи / провайдеров
Обычной конфигурацией является следующая, в которой есть два провайдера, которые подключают локальную сеть (или даже одну машину) к большому Интернету.
________
+------------+ /
| | |
+-------------+ Provider 1 +-------
__ | | | /
___/ \_ +------+-------+ +------------+ |
_/ \__ | if1 | /
/ \ | | |
| Local network -----+ Linux router | | Internet
\_ __/ | | |
\__ __/ | if2 | \
\___/ +------+-------+ +------------+ |
| | | \
+-------------+ Provider 2 +-------
| | |
+------------+ \________
как направить ответы на пакеты, приходящие через определенного поставщика, скажем, провайдера 1, снова вернуться через того же провайдера.
Давайте сначала установим несколько символических имен. Пусть $ IF1 будет именем первого интерфейса (if1 на рисунке выше), а $ IF2 - именем второго интерфейса. Затем пусть $ IP1 будет IP-адресом, связанным с $ IF1, а $ IP2 - IP-адресом, связанным с $ IF2. Далее, пусть $ P1 будет IP-адресом шлюза у провайдера 1, а $ P2 - IP-адрес шлюза у провайдера 2. Наконец, пусть $ P1_NET будет IP-сетью, в которой находится $ P1, а $ P2_NET - IP-сетью, в которой находится $ P2.
Один создает две дополнительные таблицы маршрутизации, скажем, T1 и T2. Они добавлены в /etc /iproute2 /rt_tables. Затем вы настраиваете маршрутизацию в этих таблицах следующим образом:
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
Ничего особенного, просто создайте маршрут к шлюзу и создайте маршрут по умолчанию через этот шлюз, как вы это сделали бы в случае единственного вышестоящего поставщика, но поместили маршруты в отдельную таблицу для каждого поставщика. Обратите внимание, что сетевого маршрута достаточно, так как он говорит вам, как найти любой хост в этой сети, включая шлюз, как указано выше.
Далее вы настраиваете основную таблицу маршрутизации. Хорошая идея направить вещи к непосредственному соседу через интерфейс, связанный с этим соседом. Обратите внимание на аргументы `src ', они гарантируют, что выбран правильный исходящий IP-адрес.
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
Затем, ваши предпочтения для маршрута по умолчанию: IP-маршрут добавить по умолчанию через $ P1
Далее вы устанавливаете правила маршрутизации. Они на самом деле выбирают, с какой таблицей маршрутизации идти. Вы хотите убедиться, что вы маршрутизируете данный интерфейс, если у вас уже есть соответствующий адрес источника: ip rule add из таблицы $ IP1 T1 ip rule add из таблицы $ IP2 T2