Запускаем в CentOS 7 одновременно несколько экземпляров Squid, связанных с интерфейсами из различных подсетей
сохраняем общую для обоих экземпляров конфигурацию в файл /etc/squid/main.conf
сохраняем конфигурацию первого экземпляра в файл /etc/squid/squid1.conf
visible_hostname proxy1
http_port 192.168.100.254:3128
tcp_outgoing_address 192.168.100.254
udp_outgoing_address 192.168.100.254
pid_filename /var/run/squid/squid1.pid
coredump_dir /var/spool/squid/squid1
access_log /var/log/squid/access_squid1.log
cache_log /var/log/squid/cache_squid1.log
include /etc/squid/main.conf
сохраняем конфигурацию второго экземпляра в файл /etc/squid/squid2.conf
visible_hostname proxy2
http_port 192.168.200.254:3128
tcp_outgoing_address 192.168.200.254
udp_outgoing_address 192.168.200.254
pid_filename /var/run/squid/squid2.pid
coredump_dir /var/spool/squid/squid2
access_log /var/log/squid/access_squid2.log
cache_log /var/log/squid/cache_squid2.log
include /etc/squid/main.conf
создаем необходимые папки
mkdir /var/spool/squid/{squid1,squid2}
chown squid:squid /var/spool/squid/*
chmod 750 /var/spool/squid/*
создаем unit-файл /usr/lib/systemd/system/squid1.service для первого экземпляра
[Unit]
Description=Squid caching proxy (squid1)
After=syslog.target network.target nss-lookup.target
[Service]
Type=forking
LimitNOFILE=16384
ExecStart=/usr/sbin/squid -n squid1 -f /etc/squid/squid1.conf
ExecReload=/usr/sbin/squid -n squid1 -k reconfigure -f /etc/squid/squid1.conf
ExecStop=/usr/sbin/squid -n squid1 -k shutdown -f /etc/squid/squid1.conf
TimeoutSec=0
[Install]
WantedBy=multi-user.target
создаем unit-файл /usr/lib/systemd/system/squid2.service для второго экземпляра
[Unit]
Description=Squid caching proxy (squid2)
After=syslog.target network.target nss-lookup.target
[Service]
Type=forking
LimitNOFILE=16384
ExecStart=/usr/sbin/squid -n squid2 -f /etc/squid/squid2.conf
ExecReload=/usr/sbin/squid -n squid2 -k reconfigure -f /etc/squid/squid2.conf
ExecStop=/usr/sbin/squid -n squid2 -k shutdown -f /etc/squid/squid2.conf
TimeoutSec=0
[Install]
WantedBy=multi-user.target
создаем файл /etc/sysconfig/network-scripts/rule-lo с дополнительными правилами маршрутизации
priority 10100 from 192.168.100.254 table 100
priority 10200 from 192.168.200.254 table 200
создаем файл /etc/sysconfig/network-scripts/route-lo с дополнительными маршрутами
default via 192.168.100.1 table 100
default via 192.168.200.1 table 200
перезагружаемся
Спасибо.
Однако у сквида есть возможность крутить столько сетей, сколько надо и на единственном интерфейсе
В squid'е есть директива tcp_outgoing_address вот с помощью неё и можно указать исходящий адрес для конкретного адреса
acl ACL_NAME src 192.168.100.1 10.0.3.0/24
tcp_outgoing_address GATEWAY_IP ACL_NAME
Перечисляем клиентов: хосты или сети
acl acl_wan2 src 192.168.1.5 192.168.1.20 192.168.1.21 192.168.1.23 192.168.1.24
Указываем шлюз
tcp_outgoing_address 5.255.255.5 acl_wan2
где 5.255.255.5 - это внешний IP адрес от провайдера (соединение
предварительно настроено)
ЗЫ. Пользую сквид на pfsense \ opnsense
Согласен, в случаях с одним интерфейсом направить трафик с определенных адресов можно директивой tcp_outgoing_address. Однако, если нужно использовать интерфейсы из различных подсетей, то без дополнительных правил и таблиц маршрутизации трафик будет уходить только с одного интерфейса, вне зависимости от используемых в директиве tcp_outgoing_address адресов, поскольку для шлюзов по умолчанию в основную таблицу маршрутизации добавляются различные маршруты с различными метриками
Конфигурация с несколькими интерфейсами может понадобиться тогда, когда Squid функционирует не на маршрутизаторе, но подключен к подсетям, глобальный трафик которых уходит различными маршрутами, например, напрямую через Интернет-провайдера и через VPN-соединение