Перенаправить определенный трафик на другой шлюз

Перенаправить определенный трафик на другой шлюз

У меня есть два шлюза с разными ISP, один из них определен как шлюз по умолчанию для пользователя LAN, а другой ISP используется как шлюз по умолчанию для трафика Servers и VPN. Это делается с помощью обычных таблиц маршрутизации, настроенных с помощью DHCP.

Теперь я хочу, чтобы Google Drive и другой программный трафик, установленный на ноутбуках пользователей локальной сети, который использует много загрузок, всегда использовал другого провайдера, который не определен как их gw по умолчанию. Как мне этого добиться??

Мои первые мысли — использовать IPTABLES или Squid.

Я пытался с этим

iptables -t nat -A PREROUTING -d GOOGLE_IP -j DNAT --to-destination MY_SECOND_ISP
iptables -t nat -A POSTROUTING -s MY_SECOND_ISP -j SNAT --to-source GOOGLE_IP
iptables -t nat -A POSTROUTING -s MY_SECOND_ISP  -j MASQUERADE

но это не работает. Когда я тестирую, трафик идет на gw по умолчанию

Есть идеи, как это сделать с помощью iptables, shorewall или squid?

решение1

Предположим, что IP-адрес локальной сети GW по умолчанию (GW1) — 192.168.1.1, а IP-адрес локальной сети GW по умолчанию (GW2) — 192.168.1.2, т. е. локальная сеть видит оба маршрутизатора в одном сегменте.

Вы можете настроить статический маршрут на GW1, который направляет трафик, назначением которого является GOOGLE_IP, на IP-адрес локальной сети следующего перехода GW2.

Если GW1 — Cisco: ip route GOOGLE_IP 255.255.255.255 GW2_LAN_IP

Если GW1 — Linux: ip route add GOOGLE_IP/32 gw GW2_LAN_IP

Таким образом, когда любой хост в локальной сети отправляет трафик на GOOGLE_IP, трафик будет поступать на GW1.

Затем статический маршрут на GW1 перенаправит трафик на GW2.

Затем GW2 перенаправит трафик из своего интерфейса WAN.

Обратный трафик, поступающий из Интернета в GW2, будет перенаправлен в локальную сеть и достигнет хостов.

Таким образом, вы создаете маршрут один раз на GW1, чтобы он работал для всех хостов локальной сети.

решение2

Поскольку такие сервисы, как Google Drive, находятся в облаке и их IP-адреса могут измениться в любой момент, я считаю, что ваш подход рано или поздно перестанет работать.

Есть еще один способ дифференцировать трафик нужных вам приложений, используя маркировку DSCP на уровне гостевой ОС.

Метки DSCP будут «прикреплены» к самим пакетам, чтобы вы могли сопоставить эти пакеты с iptables на вашем маршрутизаторе и направить их через VPN или любой другой шлюз по вашему выбору.

Таким образом, вы говорите, что, например, googledrive.exe (или любое другое приложение) всегда будет маршрутизироваться через VPN, независимо от того, к какому серверу оно пытается подключиться.

Вот несколько инструкций по установке пользовательских меток DSCP с помощью Windows. https://support.timso.com/index.php?/Knowledgebase/Article/View/24/3/windows-7-and-implementing-qos

Вы можете сопоставить метки dscp с помощью опции --dscp match в iptables.
http://www.iptables.info/en/iptables-matches.html#DSCPMATCH

Конечно, все вышеперечисленное не отвечает на ваш первоначальный вопрос. Вам все равно нужно будет заставить работать маршрутизацию политик.

Связанный контент