Описание проблемы:
У меня довольно сложная проблема, когда я не могу понять, как эффективно решить ее; Предположим, есть следующая настройка:
Есть 1 Linux-машина, подключенная к 3 сетям, назовем их A, B и C.
Машина linux может получать доступ в Интернет через сеть A. В этой сети есть частный IP-адрес, но в ней НЕТ NAT; например, любые другие машины, которые маршрутизируются через эту сеть и имеют публичный IP, выданный им, могут подключаться к Интернету через него, но данный компьютер не может этого сделать.
Сеть B является общедоступной сетью IP; набор из нескольких общедоступных сетей. По умолчанию пакеты из B направляются обратно в B, а для всех других пунктов назначения, не входящих в B, маршрутизируются через A.
Сеть C, как и A, также является сетью, в которой у машины есть частный адрес. Однако, здесь NAT включен. Сеть C может использоваться для связи с Интернетом, но устройствам в сети B не разрешается маршрутизировать через C, они должны маршрутизировать через A.
В настоящее время машина Linux не может общаться с Интернетом. Я хочу, чтобы он мог это сделать (например, пинг www.stackoverflow.com не возвращать тайм-аут).
Как указать linux использовать другой шлюз для своего собственного трафика и только для своего собственного трафика (источник или назначение == localhost)?
Важный
Я не хочу направлять весь трафик в интернет только через одну сеть. Трафик, приходящий / уходящий в Интернет, должен использовать две сети, в зависимости от источника: все, от машины linux через одну сеть (C), все, что он маршрутизирует (что не входит в один из его локальных диапазонов), он маршрутизируется через другой (А).
Предварительное решение
Во-первых, я подумал просто добавить 'from/to localhost' в таблицу ip rule
, но это не разрешено. Какой самый простой способ разрешить этому маршрутизатору использовать другой маршрутизатор в сети C в качестве шлюза, но только из трафика, исходящего от самой машины?
По сути, я хотел бы получить что-то, что будет эквивалентно приведенному ниже примеру, если это действительно будет работать наивным, интуитивным способом:
0: from all lookup local
32000: from localhost lookup myroute
32100: from all lookup main
32767: from all lookup default