Да, это может быть сделано. Вам нужна policy routing
, т.е. возможность обрабатывать две разные таблицы маршрутизации одновременно. Причина в том, что вам нужно иметь два шлюза одновременно, один для Squid, а другой для остальных приложений. В ОС не разрешено использовать два шлюза, единственным исключением является маршрутизация политик в ядре Linux.
Вы найдете очень хорошее и очень краткое объяснение политики (иногда также называемой источником) маршрутизации в ответе Дэвида Шварца на вопрос на дочернем сайте (Unix и Linux).
Вам нужно настроить VPN так, чтобы его таблица маршрутизации была альтернативной таблицей маршрутизации. Детали зависят от типа VPN, который вы используете.
Теперь, предположим, что виртуальный интерфейс VPN называется tun0
, с IP-адресом 10.0.0.2
, вам понадобится правило, которое использует вторую таблицу маршрутизации (назовем ее table2
) для приложений, начиная с 10.0.0.2
:
ip rule add from 10.0.0.2 table table2
и вам также нужно убедиться, что Squid
привязывается к 10.0.0.2
качестве его исходящего адреса: для этого вам нужна директива
tcp_outgoing_address 10.0.0.2