Добрый день!
Ситуация такая:
Ось FreeBSD 7.0
Есть два канала, первый dial-up, второй спутниковый канал поднятый на mpd через dial-up.
По дефолту стоит маршрут dial-up.
В итоге два интерфейса:
tun0 - dialup 192.168.2.155 --> 192.168.2.254
ng0 - тарелка. 172.27.20.44 --> 82.211.176.1
Задача следующая:
Конкретные сайты пускать через спутниковый канал, а всё остальное через дефолтный маршрут.
Squid настроен следующим образом:
acl sky url_regex rambler.ru yandex.ru ... ...
tcp_outgoing_address 82.211.176.1 sky
Те сайты которые не попадают под правило sky, открываются без проблем, стоит обратиться к сайтам из правила sky, выскакивает ошибка:
---------------------------------------------
ERROR
The requested URL could not be retrievedWhile trying to retrieve the URL: http://www.rambler.ru/
The following error was encountered:
Socket FailureThe system returned:
(49) Can't assign requested addressSquid is unable to create a TCP socket, presumably due to excessive load. Please retry your request.
---------------------------------------------
В логах сквида пишется:
commBind: Cannot bind socket FD 26 to 82.211.176.1:0 (49) Can't assign requested address
Перерыл инет пока не нашёл способа обойти это.
Короче сквид может забиндиться только на локальный адрес, который присутствует в системе.
Есть идея, но не знаю пока как её реализовать:
Поднять какойто виртуальный интерфейс и сделать, что то типа диверта на 82.211.176.1 который висит на ng0, а в сквиде указать на виртуальный айпи этого интерфеса.
Или есть какоето другое решение этой проблемы?
Заранее благодарен!!!
может route попробуете
route add ip_rambler ip_tarelka
Вариант с route работает, но он слишком громозкий, не реально вычислить все айпишники сайтов, которые мне нужны, и потом у сайтов могут меняться айпишники.
У меня возникла идея по поводу vlan.
Поднимаем виртуальный интерфейс vlan0, присвиваем ему например 192.168.10.1
ifconfig vlan0 create
ifconfig vlan0 192.168.10.1
В сквиде в параметре tcp_outgoing_address ставим этот ip:
tcp_outgoing_address 192.168.10.1
Вопрос: теперь как перенаправлять все запросы с этого адреса на ng0, айпишник сервера, который смотрит на тарелку, описание конфигурации выше.
И чтобы они корректно возвращались до клиента.
Жду Ваших предложений.
Заранее благодарен!
>У меня возникла идея по поводу vlan.
>Поднимаем виртуальный интерфейс vlan0, присвиваем ему например 192.168.10.1
>ifconfig vlan0 create
>ifconfig vlan0 192.168.10.1
>В сквиде в параметре tcp_outgoing_address ставим этот ip:
>tcp_outgoing_address 192.168.10.1
>Вопрос: теперь как перенаправлять все запросы с этого адреса на ng0создать таблицу маршрутизации iproute2
возникла похожая проблема - пока не решил...
Если сделать что-то вроде
ipfw add count log from 82.211.176.1 to any out via tun0
И заглянуть в лог думаю проблема станет яснее...
Как вариант мутить что-нибудь вроде (pf):
pass out route to ...
Стоп! А зачем, Вы пытаетесь назначить исходящим пакетам адрес своего шлюза???! А нука бегом читать МАНы !!!
(Если конечно я правильно понял
>tun0 - dialup 192.168.2.155 --> 192.168.2.254
>ng0 - тарелка. 172.27.20.44 --> 82.211.176.1)
Адрес второго шлюза я хочу назначать только определённым сайтам или ip.
Мне надо чтобы все сайты ходили через маршрут по умолчанию в системе, а определённые сайты или ip ходили через тарелку.
А черт с ним, не хотите читать как хотите ... вам же хуже
в сквиде:tcp_outgoing_address 172.27.20.44 sky
если после этого не заработет поднимаете pf загружаете туда среди прочих правило:
pass out route-to ng0 82.211.176.1 inet from 172.27.20.44
при условии что 82.211.176.1 это адрес шлюза, а 172.27.20.44 это ваш локальный адрес, если иначе то наоборот.
Когда я прописал правило в pf он у меня сказал что syntax error и указал именно на ту строчку где pass out route-to ng0 82.211.176.1 inet from 172.27.20.44