Назад | Перейти на главную страницу

Маршрутизация пакетов на основе того, к какому порту подключен клиент

У меня есть сервер 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 интерфейса

  1. Создайте acl для каждого порта в squid.conf
acl ip1 myport 3128
acl ip2 myport 3129
  1. настроить tcp_outgoing_address для обоих acl
# 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
  1. создать таблицы маршрутизации для обоих интерфейсов
echo "201 out1" >> /etc/iproute2/rt_tables 
echo "202 out2" >> /etc/iproute2/rt_tables
  1. и настроить их
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

и то же самое для другого интерфейса

  1. добавить осмысленное правило, которого раньше не было
sudo ip rule add from 192.168.6.2 table out1
sudo ip rule add from 192.168.7.2 table out2

Теперь все работает как положено.