LINUX.ORG.RU
ФорумAdmin

[squid] tcp_outgoing_address + dhcp

 


0

0

Возникла такая проблема, на шлюзе со сквидом имеется n внешних интерфейсов, получающих адреса по dhcp, необходимо трафик с разных диапазонов адресов локалки раскидывать по разным внешним интерфейсам.

И ещё вопрос, как сделать так, чтобы шлюз по умолчанию приходящий по dhcp, записывался не в общесистемную таблицу маршрутов, а в отдельную для каждого провайдера/интерфейса?

Я не совсем понял первую часть вопроса, если у вас заранее известно, с какого диапазона ip-адресов на какой интерфес отправлять трафик, то описывайте в конфиге acl с этими адресами, а потом для этого acl делайте tcp_outgoing_address. Чтобы не править конфигу squid'а на каждую новую выдачу ip-адреса, указывайте «левые» ip-адреса (только не забудьте прописать их на интерфейсы), для этих адресов «ip rule» и «iptables -t nat -j SNAT».

Какой dhcp-клиент?

mky ★★★★★
()
Ответ на: комментарий от mky

dhclient, пакет dhcp3-client, дистрибутив Debian Lenny.

а как задать "левый" адрес для ppp интерфейса (скайлинковский модем, настроен через pppd, pppN создаётся только при установлении соединения)?

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от Lonli-Lokli

Я в ppp не понимаю нифига, но там разве нет хуков, вызываемых при поднятии интерфейса?

nnz ★★★★
()
Ответ на: комментарий от Lonli-Lokli

Если у вас все dhcp связаны с ppp-интерфейсами, то, ИМХО, можно отказатся в настройке от опции routers, и тогда маршруты по умолчанию прописываться не будут. Маршруты прописывать отдельным скриптом, все равно если маршрут через ppp-интерфейс, то там не нужен ip-адрес.

«Левые» адреса задаем для сетёвки или для dummy-интерферса. Допустим, «ip addr add 192.168.168.33 dev eth0», и «ip rule add from 192.168.168.33 table 33»

В эту таблицу маршрутизации добавляем «ip route add unreachable default metric 10 table 33», чтобы когда интрефейса нет, squid не ходил по другим таблицам/маршрутам.

потом в конфиге squid указываем tcp_outgoing_address 192.168.168.1, а в iptables скриптом указываем (и правим при необходимости), что все, исходящие с этого адреса SNAT'ить. Для удобства правки iptables из скрипта выносим SNAT-правило в отдельную цепочку, чтобы можно быдо делать «iptables -F „ИМЯ_ЦЕПОЧКИ“».

Если же у вас маршруты по умолчанию пишутся и для Ethernet-интерфейсов, то там надо изучать (но не править) dhclient-script, на предмет того, как можно отключить это через dhclient-enter-hooks/dhclient-exit-hooks ...

mky ★★★★★
()
Ответ на: комментарий от Lonli-Lokli

Если вам нужно, чтобы с определённого адреса все пакеты шли через ppp-интерфейс или не шли вобще, то этот маршрут вам нужен. То есть с помощью ip rule вы отправляете нужные пакеты в таблицу 33. Когда есть ppp-интерфейс и в этой таблице прописан маршрут по умолчанию, то пакеты уходят по нему. Когда ppp-интерфейс падает, то из всех таблиц удаляются все связанные с ним маршруты.

Если будет unreachable маршрут по умолчанию в таблице 33 с меньшей метрикой, то ядро в отсутствии ppp-интерфейса будет сообщать, что нет маршрута, а иначе пакет пойдет по другим таблицам маршрутизации и может найдет себе другой default маршрут.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.