Squid 2 chans
Материал из Ksimute
Коробанов Сергей
Октябрь 21, 2003
Понадобилось мне поднимать прокси сервер squid с балансировкой нагрузки между двумя каналами. Толкового HowTo не нашел. После прочтения mailng list на http://www.squid-cache.org/ и общения с коллегами, родилось следующее решение его и предоставлю на суд общественности.
Содержание |
Исходная задача
2 канала к провайдеру.
Машина со squid
(proxy)
ip:192.168.250.67, 192.168.250.72
шлюз 192.168.250.65
250.67 роутится через одного провайдера.
250.72 через другого.
Дистрибутив gentoo (что неважно). Работает Squid Cache: Version 2.5.STABLE1 На машине поднимается 3 сквида 1,2 parent proxy 3 кэширующий.
делаем 2 дополнительных конфига.
squid1.conf,squid2.conf
Изменения в squid1.conf
http_port 3129 icp_port 3131 cache_dir ufs /var/cache/squid1 100 16 256 cache_access_log /var/log/squid1/access.log cache_log /var/log/squid1/cache.log cache_store_log /var/log/squid1/store.log pid_filename /var/run/squid1.pid tcp_outgoing_address 192.168.250.67 coredump_dir /var/cache/squid1 acl all_url urlpath_regex . no_cache deny all_url
Изменения в squid2.conf
http_port 3127 icp_port 3129 cache_dir ufs /var/cache/squid2 100 16 256 cache_access_log /var/log/squid2/access.log cache_log /var/log/squid2/cache.log cache_store_log /var/log/squid2/store.log pid_filename /var/run/squid2.pid tcp_outgoing_address 192.168.250.72 coredump_dir /var/cache/squid2 acl all_url urlpath_regex . no_cache deny all_url
изменения в squid.conf
cache_peer 127.0.0.1 parent 3127 3129 round-robin cache_peer 127.0.0.1 parent 3129 3131 round-robin
Создаем необходимые папки,
/var/log/squid1 /var/log/squid2 /var/cache/squid1 /var/cache/squid2
Squid мoжно настроить не кэшировать что и делается строчками
acl all_url urlpath_regex . no_cache deny all_url
но без папок он работать не будет. Раздаем права. owner squid group squid.
стартуем сквиды
1. Cоздаем swap directories
squid -z -f /etc/squid/suid1.conf squid -z -f /etc/squid/squid2.conf squid -z
2. Стартуем сквиды
squid -f /etc/squid/suid1.conf squid -f /etc/squid/squid2.conf
squid прописываю на своем хосте
(192.168.250.70) в браузере proxy 192.168.250.67
смотрим в tcpdump на r1-mj (шлюз)
заходим на lrn.ru
Видим на одном интерфейсе
r1-mj:~# tcpdump -i eth2 host 192.168.250.72 tcpdump: listening on eth2 19:13:09.933638 192.168.250.72.38451 > linux.ru.net.www: S 4283721038:4283721038(0) win 5840 <mss 1460,sackOK,timestamp 2262363[|tcp]> (DF) [tos 0xf6] 19:13:09.950518 arp who-has 192.168.250.72 tell 192.168.250.65 19:13:09.950703 arp reply 192.168.250.72 is-at 0:10:dc:f2:54:b5 19:13:09.950722 linux.ru.net.www > 192.168.250.72.38451: S 2074568879:2074568879(0) ack 4283721039 win 32120 <mss 1460,nop,nop,sackOK,nop,wscale 0> (DF) [tos 0xf6] 19:13:09.950935 192.168.250.72.38451 > linux.ru.net.www: . ack 1 in 5840 (DF) [tos 0xf6] 19:13:09.951568 192.168.250.72.38451 > linux.ru.net.www: P 1:684(683) ack 1 win 5840 (DF) [tos 0xf6] 19:13:09.981105 linux.ru.net.www > 192.168.250.72.38451: . ack 684 win 31437 (DF) [tos 0xf6] 19:13:15.333050 linux.ru.net.www > 192.168.250.72.38451: P 1:1461(1460) ack 684 win 32120 (DF) [tos 0xf6] 19:13:15.333935 192.168.250.72.38451 > linux.ru.net.www: . ack 1461 win 8760 (DF) [tos 0xf6]
Видим на втором интерфейсе
r1-mj:~# tcpdump -i eth2 host 192.168.250.67 tcpdump: listening on eth2 19:13:15.925545 ns0.trancom.ru.domain > 192.168.250.67.32902: 2 2/6/0 (178) (DF) [tos 0xf6] 19:13:15.925917 192.168.250.67.38452 > 194.67.45.100.www: S 5220073:5220073(0) win 5840 <mss 1460,sackOK,timestamp 2262962[|tcp]> (DF) [tos 0xf6] 19:13:15.926038 ns0.trancom.ru.domain > 192.168.250.67.32902: 3 1/2/0 (91) (DF) [tos 0xf6] 19:13:15.926316 192.168.250.67.38453 > counter.rambler.ru.www: S 4293433428:4293433428(0) win 5840 <mss 1460,sackOK,timestamp 2262962[|tcp]> (DF) [tos 0xf6] 19:13:15.926987 ns0.trancom.ru.domain > 192.168.250.67.32902: 4 1/2/2 (128) (DF) [tos 0xf6] 19:13:15.927285 192.168.250.67.38454 > linux.ru.net.www: S 3373178:3373178(0) win 5840 <mss 1460,sackOK,timestamp 2262962[|tcp]> (DF) [tos 0xf6] 19:13:15.393655 linux.ru.net.www > 192.168.250.72.38451: P 1461:2921(1460) ack 684 win 32120 (DF) [tos 0
Работает round-robin!
Дальше добавляем старт сквидов в init
скрипты, настраиваем source routing на маршрутизаторе, секурим ACL и
наслаждаемся работой через 2 канала.
Предложения и дополнения
Буду рад и благодарен. Присылайте на
ksi_korobanov@mail.ru
Благодарности
Спасибо bass c #lrn сказал куда копать. :)