У меня есть сервер debian с одним входящим интерфейсом (eth1) и тремя модемами (modem1, modem2, modem3). На этом сервере есть экземпляр squid, который прослушивает три последовательных порта (точнее, 3128, 3129, 3130).
Мне удалось настроить маршрутизацию всех пакетов, поступающих с eth1, на один из модемов, но мне нужно маршрутизировать пакеты в зависимости от того, к какому порту подключен клиент. Например, если клиент использует 192.168.138.2:3128 в качестве прокси, то маршрутизируйте свои пакеты через 192.168.6.1, который является IP-адресом модема 1. Является ли это возможным?
Мне не требуется пошаговое решение, я буду доволен только термином для Google или чем-то в этом роде, потому что сейчас я просто застрял.
Вам нужна маршрутизация на основе политик. Видеть man ip-rule
.
ip rule add dport 3128 table 100
ip rule add dport 3129 table 101
ip rule add dport 3130 table 102
Теперь вы можете создавать разные таблицы маршрутизации
ip route add default via 192.168.6.1 table 100
ip route add default via 192.168.6.2 table 102
ip route add default via 192.168.6.3 table 102
Номера таблиц более или менее произвольны, если вы не используете заранее определенные числа.
Все успел сделать. Пример всего 2 интерфейса
acl ip1 myport 3128
acl ip2 myport 3129
# 192.168.6.2 - address that first modem gave us
tcp_outgoing_address 192.168.6.2 ip1
tcp_outgoing_address 192.168.7.2 ip2
echo "201 out1" >> /etc/iproute2/rt_tables
echo "202 out2" >> /etc/iproute2/rt_tables
ip route add 192.168.6.0/24 dev enp2s0u1u3 src 192.168.6.2 table out1
ip route add default via 192.168.6.1 table out1
и то же самое для другого интерфейса
sudo ip rule add from 192.168.6.2 table out1
sudo ip rule add from 192.168.7.2 table out2
Теперь все работает как положено.