iptables + squid (раздача трафика между разными провайдерами)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

MIX2000
Сообщения: 58
ОС: Ubuntu

iptables + squid

Сообщение MIX2000 »

Есть интернет-сервер 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

Re: iptables + squid

Сообщение skor »

MIX2000 писал(а):
29.08.2008 13:33
пакеты идущие через squid(прозрачный) прохожят цепочку forward или input, output?
input/output, т.к. пакеты принимаются и передаются процессом на данном компьютере. Через forward проходят пакеты которые идут "транзитом" (обычный роутинг, NAT и т.д.)
Спасибо сказали:
MIX2000
Сообщения: 58
ОС: Ubuntu

Re: iptables + squid

Сообщение MIX2000 »

input/output, т.к. пакеты принимаются и передаются процессом на данном компьютере

Но как они попадают в input, если в случае прозрачного прокси (как у меня) в nat prerouting меняется лишь их порт, но не адрес получателя? Если сквид не влияет на маршрутизацию на этом этапе, пакеты должны пойти транзитом, просто на другой порт.
Спасибо сказали:
MIX2000
Сообщения: 58
ОС: Ubuntu

Re: iptables + squid

Сообщение MIX2000 »

Ксати, вот еще одна проблема, заставившая меня усомнится в правильности понимания совместной работы iptables и squid: Если я прописываю в filter output сбрасывать все tcp пакеты исходящие на мой первый интерфейс(прямой), интернет начинает жутко тормозить... но почему? Ведь squid отправляет пакеты на родительский прокси через второй интерфейс!
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: iptables + squid

Сообщение skor »

MIX2000 писал(а):
29.08.2008 14:35
input/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

Сообщение skor »

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

Сообщение MIX2000 »

skor писал(а):
29.08.2008 15:55
Решение о том куда будет идти пакет принимается на 5-ом шаге. А вы переписываете адрес назначения и порт на 4-ом шаге.


Может я что-то не так сделал... В NAT PREROUTING у меня прописано перенапавлять пакеты на порт 3128, но адрес назначения остается тем же, то есть адресом удаленного хоста, но не адресом моего шлюза, или нет? Если все-таки остается, то по логики, на шаге 5 должно быть решено отправлять в forward.
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: iptables + squid

Сообщение skor »

REDIRECT как раз и "заворачивает" пакеты на локальную машину.
Вы все правильно сделали. Оно именно так и работает.
Клиент посылает запрос удаленному серверу.
Вы заворачиваете этот запрос на свой прокси.
Прокси делает запрос к удаленному серверу и отдает результат клиенту.
Для клиента выглядит так как будто он общался с "настоящим" удаленным сервером.
Спасибо сказали:
MIX2000
Сообщения: 58
ОС: Ubuntu

Re: iptables + squid

Сообщение MIX2000 »

skor писал(а):
29.08.2008 16:04
Если через сквид должны ходить только через спутник, то пропишите в сквиде tcp_outgoing_address, и для этого адреса с помощью ip route и ip rule пропишите маршрут в сторону виндовой машины.

Спасибо. С этим я, кажется понял. Если перенапавлять http-пакеты на спутеиковую машину предварительно изменив порт, на порт SkyDSL-прокси, то последняя их поймает и направит куда надо, без NATа? Или NAT на спутниковой вин машине все-таки нужен?
Спасибо сказали:
MIX2000
Сообщения: 58
ОС: Ubuntu

Re: iptables + squid

Сообщение MIX2000 »

skor писал(а):
29.08.2008 16:37
REDIRECT как раз и "заворачивает" пакеты на локальную машину.
Вы все правильно сделали. Оно именно так и работает.
Клиент посылает запрос удаленному серверу.
Вы заворачиваете этот запрос на свой прокси.
Прокси делает запрос к удаленному серверу и отдает результат клиенту.
Для клиента выглядит так как будто он общался с "настоящим" удаленным сервером.

Понял. То-есть REDIRECT заворачивает на порт 3128, а этого достаточно чтобы адресом назначения стала локальная машина. Понятно не сразу, но работает именно так.
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: iptables + squid

Сообщение skor »

MIX2000 писал(а):
29.08.2008 16:41
skor писал(а):
29.08.2008 16:04
Если через сквид должны ходить только через спутник, то пропишите в сквиде tcp_outgoing_address, и для этого адреса с помощью ip route и ip rule пропишите маршрут в сторону виндовой машины.

Спасибо. С этим я, кажется понял. Если перенапавлять http-пакеты на спутеиковую машину предварительно изменив порт, на порт SkyDSL-прокси, то последняя их поймает и направит куда надо, без NATа? Или NAT на спутниковой вин машине все-таки нужен?
Хм... нет скорее всего это не сработает (я забыл что у Вас там вторая прокся).
Получается надо "закручивать гайки" на сквиде, чтоб он ходил только через вышестоящую проксю (у него там какая-то своя очень замудренная логика куда и когда ходить).
Попробуйте это http://www.squid-cache.org/Versions/v2/2.6...ver_direct.html

MIX2000 писал(а):
29.08.2008 16:57
Понял. То-есть REDIRECT заворачивает на порт 3128, а этого достаточно чтобы адресом назначения стала локальная машина. Понятно не сразу, но работает именно так.

Нет он именно меняет адрес назначения, но только на локальный (а то что порт еще можно поменять, так это опция и на "чужой" адрес с помощью 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

Сообщение MIX2000 »

Спасибо skor. Как действовать знаю, когда реализую замысел, напишу как, в подробностях. Вообще, надо было в заголовке указать про спутниковый и-нет, ведь это из-за него все проблемы...
Спасибо сказали:
MIX2000
Сообщения: 58
ОС: Ubuntu

Re: iptables + squid

Сообщение MIX2000 »

Добавил в squid.conf две строки:
always_direct allow acl пакетов, которые не должны идти через родительский кеш
never_direct allow all

Теперь почти весь http-трафик идет через спутник.
Спасибо сказали: