На шлюзе локальной сети (UbuntuServer) настроена маршрутизация через 2-х провайдеров. Всё работает отлично. Получается запустить часть локальной сети через одного провайдера, а часть через другого. Но есть маленький вопрос:
Два провайдера. Две таблицы маршрутизации (не считая тех, что по-умолчанию). Несколько правил маршрутизации.
В каждой из таблиц есть маршрут:
Код:
127.0.0.0/8 dev lo scope link realm 6
iptables маркерует все пакеты из сети 127.0.0.0/8. Есть правило, по которому все пакеты с меткой, а соответственно из сети, 127.0.0.0/8 маршрутизировать только по одной таблице маршрутизации.
Но работает это всё как-то не так как хотелось бы. Если в таблице маршрутизации main удалить маршрут по-умолчанию, то локальные приложения перестают выходить в интернет.
Мне нужно заворачивать пакеты с локальной машины в нужную мне таблицу маршрутизации и соответственно выпускать в мир через определённого провайдера. Скажите пожалуйста как это сделать доступными средствами.
ip rule add from адрес_машины table таблица_нужного_провайдера
Какой из адресов машины вписывать? 127.0.0.1? 192.168.0.10? <внешний_адрес_первого_провайдера>? <внешний_адрес_второго_провайдера>?
P.S. ip rule просматривает метки, выставленные в iptables
Код:
:~$ ip rule
0: from all lookup local
32751: from all fwmark 0x71 lookup inet_don
32752: from all fwmark 0x70 lookup inet_don
32753: from all fwmark 0x6f lookup inet_don
32754: from all fwmark 0x6e lookup inet_don
32755: from all fwmark 0x6d lookup inet_don
32756: from all fwmark 0x6c lookup inet_don
32757: from all fwmark 0x6b lookup inet_don
32758: from all fwmark 0x6a lookup inet_don
32759: from all fwmark 0x69 lookup inet_don
32760: from all fwmark 0x68 lookup inet_don
32761: from all fwmark 0x67 lookup inet_don
32762: from all fwmark 0x66 lookup inet_don
32763: from all fwmark 0x65 lookup inet_don
32764: from <внешний_адрес_второго_провайдера> lookup inet_enforta
32765: from <внешний_адрес_первого_провайдера> lookup inet_don
32766: from all lookup main
32767: from all lookup default
Какой из адресов машины вписывать? 127.0.0.1? 192.168.0.10? <внешний_адрес_первого_провайдера>? <внешний_адрес_второго_провайдера>?
Хм. А какую машину надо завернуть на провайдера нужного? Если любую машину в локальной сети - то таким способом, как я сказал(указать ее адрес в локальной сети). А если машину которая все это маршрутизирует, то тут, наверное, лучше всего заворачивать указанием дефолтного маршрута через нужного прова в таблице машрутизации main.
Какой из адресов машины вписывать? 127.0.0.1? 192.168.0.10? <внешний_адрес_первого_провайдера>? <внешний_адрес_второго_провайдера>?
Хм. А какую машину надо завернуть на провайдера нужного? Если любую машину в локальной сети - то таким способом, как я сказал(указать ее адрес в локальной сети). А если машину которая все это маршрутизирует, то тут, наверное, лучше всего заворачивать указанием дефолтного маршрута через нужного прова в таблице машрутизации main.
Именно ту машину, которая занимается маршрутизацией. Но опять же если верить правилам, через все правила пройдёт пакет не попавший не под одно из них он всё равно передастся в интернет т.к. под правила таблицы main попадёт каждый пакет?
Какой из адресов машины вписывать? 127.0.0.1? 192.168.0.10? <внешний_адрес_первого_провайдера>? <внешний_адрес_второго_провайдера>?
Хм. А какую машину надо завернуть на провайдера нужного? Если любую машину в локальной сети - то таким способом, как я сказал(указать ее адрес в локальной сети). А если машину которая все это маршрутизирует, то тут, наверное, лучше всего заворачивать указанием дефолтного маршрута через нужного прова в таблице машрутизации main.
Именно ту машину, которая занимается маршрутизацией. Но опять же если верить правилам, через все правила пройдёт пакет не попавший не под одно из них он всё равно передастся в интернет т.к. под правила таблицы main попадёт каждый пакет?
в Вашем случае на main попадет каждый непомеченный пакет, кроме пакетов с адресов <внешний_адрес_первого_провайдера> и <внешний_адрес_второго_провайдера>.
А какой обратный адрес у пакета, сформированного на локальной машине? К примеру из локальной сети приходит пакет к службе прокси-сервера. У этого пакета обратный адрес - адрес компа локальной сети. Прокси-сервер формирует пакет и отправляет его в интернет. По идее у данного пакета должен быть обратный адрес того внешнего интерфейса через который он будет отправлен в интернет, что бы получатель этого пакета знал куда отправить ответ. Т.о. обратный адрес в пакете, отправленном с маршрутизатора, будет адрес внешнего интерфейса через который он ушёл. А этот адрес для маршрутизатора определяет таблица main. И если я не хочу, чтобы до таблицы не main дошли какие-нибудь посторонние пакеты, то мне в iptables нужно убивать все не промаркированные пакеты, идущие из локальной сети в интернет.
А какой обратный адрес у пакета, сформированного на локальной машине?
В зависимости от того, через провайдера пойдет инфа, такой и будет обратный адрес.
А вот решить, через какой пойти - тут поможет шлюз по умолчанию в таблице main.
К слову сказать в SQUID можно выбирать через какой внешний интерфейс отправлять запросы в мир. И эта настройка никак не зависит от маршрута по умолчанию в таблице main.