2010-05-04 2 views
0

Итак, у меня есть маршрутизатор FreeBSD, работающий с PF и Squid, и у него есть три сетевых интерфейса: два подключены к провайдерам восходящего потока (em0 и em1 соответственно) и один для LAN (re0), что мы обслуживать. Существует некоторая балансировка нагрузки, настроенная с помощью PF. В основном, он направляет весь трафик на порты 1-1024 через один интерфейс (em0) и все остальное через другой (em1).PF, шлюзы с балансировкой нагрузки и Squid

Теперь у меня есть прокси-сервер Squid, который также работает на ящике, который прозрачно перенаправляет любой HTTP-запрос из локальной сети на порт 3128 в 127.0.0.1. Поскольку Squid перенаправляет этот запрос на внешний HTTP, он должен следовать правилу балансировки нагрузки через em0, нет? Проблема заключается в том, что когда мы ее протестировали (при просмотре с компьютера в локальной сети до http://whatismyip.com, он сообщает об внешнем IP-интерфейсе интерфейса em1! Когда мы выключаем Squid, внешний IP em0 сообщается, как и ожидалось.

Как мне сделать Squid себя с правилом балансировки нагрузки, которую мы создали

Вот соответствующие настройки в /etc/pf.conf, что у меня есть:

ext_if1="em1" # DSL 
ext_if2="em0" # T1 
int_if="re0" 

ext_gw1="x.x.x.1" 
ext_gw2="y.y.y.1" 

int_addr="10.0.0.1" 
int_net="10.0.0.0/16" 

dsl_ports = "1024:65535" 
t1_ports = "1:1023" 

... 

squid=3128 
rdr on $int_if inet proto tcp from $int_net \ 
     to any port 80 -> 127.0.0.1 port $squid 
pass in quick on $int_if route-to lo0 inet proto tcp \ 
     from $int_net to 127.0.0.1 port $squid keep state 

... 

# load balancing 
pass in on $int_if route-to ($ext_if1 $ext_gw1) \ 
     proto tcp from $int_net to any port $dsl_ports keep state 
pass in on $int_if route-to ($ext_if1 $ext_gw1) \ 
     proto udp from $int_net to any port $dsl_ports 

pass in on $int_if route-to ($ext_if2 $ext_gw2) \ 
     proto tcp from $int_net to any port $t1_ports keep state 
pass in on $int_if route-to ($ext_if2 $ext_gw2) \ 
     proto udp from $int_net to any port $t1_ports 

pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any 
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any 

Я попытался добавив следующее правило, но ничего не сделал:

pass in on $int_if route-to ($ext_if2 $ext_gw2) \ 
     proto tcp from 127.0.0.1 to any port $t1_ports keep state 

Спасибо!

+0

После прочесывания архивов в сети, ближайшая вещь, которую я смог найти, - это [неразрешенное обсуждение] (http://www.mail-archive.com/[email protected]/msg05744.html). – Santa

ответ

1

Если вы хотите, чтобы все исходящие запросы squid переходили на определенный IP-адрес на определенном интерфейсе, вы должны использовать параметр «tcp_outgoing_address» в squid.conf для указания IP-адреса на em0.

Смежные вопросы