iptables + squid (раздача трафика между разными провайдерами)
Модераторы: SLEDopit, Модераторы разделов
-
MIX2000
- Сообщения: 58
- ОС: Ubuntu
iptables + squid
Есть интернет-сервер Ubuntu 8.04 LTS Server Edition. Внутри локальной сети трафик раздается и учитывается с помощью squid 2.6 + sams 1.0.2. Здесь не все идеально, но вообщем терпеть можно. В интернет есть два интерфейса: 1й - прямой белый ip, второй соединен с пк под виндоус, с установленым на ней спутниковым по(SkyDSL). На этом спутниковым пк NAT не поднят, но есть какой-то SkyDSL-прокси. Последний я прописал в сквиде как родительский, так как спутниковый и-нет - безлимитный. С локальных компов подключаются к удаленным серверам БД по RDP через и-нет, к нашему серверу БД из интернета. То что RDP идет через первый интерфейс, так и надо(у спутникогого есть не приятная задержка). Но, по-моему, туда, иногда идет и http. В идеале надо сделать так, что-бы все, кроме rdp шло через спутник. Понимаю, что без NAT на спутниковом не обойтись, но хотябы запретить http-трафик на 1 интерфейс. Немного знаю как работать с iptables, но сильно смущает одна вещь: пакеты идущие через squid(прозрачный) прохожят цепочку forward или input, output?
-
skor
- Сообщения: 419
- ОС: RTFM-OS v127.0.0.1
-
MIX2000
- Сообщения: 58
- ОС: Ubuntu
Re: iptables + squid
input/output, т.к. пакеты принимаются и передаются процессом на данном компьютере
Но как они попадают в input, если в случае прозрачного прокси (как у меня) в nat prerouting меняется лишь их порт, но не адрес получателя? Если сквид не влияет на маршрутизацию на этом этапе, пакеты должны пойти транзитом, просто на другой порт.
-
MIX2000
- Сообщения: 58
- ОС: Ubuntu
Re: iptables + squid
Ксати, вот еще одна проблема, заставившая меня усомнится в правильности понимания совместной работы iptables и squid: Если я прописываю в filter output сбрасывать все tcp пакеты исходящие на мой первый интерфейс(прямой), интернет начинает жутко тормозить... но почему? Ведь squid отправляет пакеты на родительский прокси через второй интерфейс!
-
skor
- Сообщения: 419
- ОС: RTFM-OS v127.0.0.1
Re: iptables + squid
MIX2000 писал(а): ↑29.08.2008 14:35input/output, т.к. пакеты принимаются и передаются процессом на данном компьютере
Но как они попадают в input, если в случае прозрачного прокси (как у меня) в nat prerouting меняется лишь их порт, но не адрес получателя? Если сквид не влияет на маршрутизацию на этом этапе, пакеты должны пойти транзитом, просто на другой порт.
В NAT PREROUTING пакет попадает до того как принимается решение о назначении этого пакета (пакет для этого компьютера или нет).
Вот здесь расписан маршрут пакетов http://iptables-tutorial.frozentux.net/chunkyhtml/c962.html
Решение о том куда будет идти пакет принимается на 5-ом шаге. А вы переписываете адрес назначения и порт на 4-ом шаге.
-
skor
- Сообщения: 419
- ОС: RTFM-OS v127.0.0.1
Re: iptables + squid
Скорее всего сквид пытается вначале обратиться напрямую, а потом уже к вышестоящему кешу.MIX2000 писал(а): ↑29.08.2008 14:45Ксати, вот еще одна проблема, заставившая меня усомнится в правильности понимания совместной работы iptables и squid: Если я прописываю в filter output сбрасывать все tcp пакеты исходящие на мой первый интерфейс(прямой), интернет начинает жутко тормозить... но почему? Ведь squid отправляет пакеты на родительский прокси через второй интерфейс!
Если через сквид должны ходить только через спутник, то пропишите в сквиде tcp_outgoing_address, и для этого адреса с помощью ip route и ip rule пропишите маршрут в сторону виндовой машины.
UPDATE
Или можно вместо ip rule/route попробовать воспользоваться iptables с соответствующим патчем
-
MIX2000
- Сообщения: 58
- ОС: Ubuntu
Re: iptables + squid
Может я что-то не так сделал... В NAT PREROUTING у меня прописано перенапавлять пакеты на порт 3128, но адрес назначения остается тем же, то есть адресом удаленного хоста, но не адресом моего шлюза, или нет? Если все-таки остается, то по логики, на шаге 5 должно быть решено отправлять в forward.
-
skor
- Сообщения: 419
- ОС: RTFM-OS v127.0.0.1
Re: iptables + squid
REDIRECT как раз и "заворачивает" пакеты на локальную машину.
Вы все правильно сделали. Оно именно так и работает.
Клиент посылает запрос удаленному серверу.
Вы заворачиваете этот запрос на свой прокси.
Прокси делает запрос к удаленному серверу и отдает результат клиенту.
Для клиента выглядит так как будто он общался с "настоящим" удаленным сервером.
Вы все правильно сделали. Оно именно так и работает.
Клиент посылает запрос удаленному серверу.
Вы заворачиваете этот запрос на свой прокси.
Прокси делает запрос к удаленному серверу и отдает результат клиенту.
Для клиента выглядит так как будто он общался с "настоящим" удаленным сервером.
-
MIX2000
- Сообщения: 58
- ОС: Ubuntu
Re: iptables + squid
Спасибо. С этим я, кажется понял. Если перенапавлять http-пакеты на спутеиковую машину предварительно изменив порт, на порт SkyDSL-прокси, то последняя их поймает и направит куда надо, без NATа? Или NAT на спутниковой вин машине все-таки нужен?
-
MIX2000
- Сообщения: 58
- ОС: Ubuntu
Re: iptables + squid
skor писал(а): ↑29.08.2008 16:37REDIRECT как раз и "заворачивает" пакеты на локальную машину.
Вы все правильно сделали. Оно именно так и работает.
Клиент посылает запрос удаленному серверу.
Вы заворачиваете этот запрос на свой прокси.
Прокси делает запрос к удаленному серверу и отдает результат клиенту.
Для клиента выглядит так как будто он общался с "настоящим" удаленным сервером.
Понял. То-есть REDIRECT заворачивает на порт 3128, а этого достаточно чтобы адресом назначения стала локальная машина. Понятно не сразу, но работает именно так.
-
skor
- Сообщения: 419
- ОС: RTFM-OS v127.0.0.1
Re: iptables + squid
Хм... нет скорее всего это не сработает (я забыл что у Вас там вторая прокся).
Получается надо "закручивать гайки" на сквиде, чтоб он ходил только через вышестоящую проксю (у него там какая-то своя очень замудренная логика куда и когда ходить).
Попробуйте это http://www.squid-cache.org/Versions/v2/2.6...ver_direct.html
Нет он именно меняет адрес назначения, но только на локальный (а то что порт еще можно поменять, так это опция и на "чужой" адрес с помощью REDIRECT`а не перенаправишь).
В описании REDIRECT`а так и написано:
It redirects the packet to the machine itself by changing the destination IP to the primary address of the incoming interface (locally-generated packets are mapped to the 127.0.0.1 address).
-
MIX2000
- Сообщения: 58
- ОС: Ubuntu
Re: iptables + squid
Спасибо skor. Как действовать знаю, когда реализую замысел, напишу как, в подробностях. Вообще, надо было в заголовке указать про спутниковый и-нет, ведь это из-за него все проблемы...
-
MIX2000
- Сообщения: 58
- ОС: Ubuntu
Re: iptables + squid
Добавил в squid.conf две строки:
always_direct allow acl пакетов, которые не должны идти через родительский кеш
never_direct allow all
Теперь почти весь http-трафик идет через спутник.
always_direct allow acl пакетов, которые не должны идти через родительский кеш
never_direct allow all
Теперь почти весь http-трафик идет через спутник.