The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Debian iptables iproute squid"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Маршрутизация, NAT / Linux)
Изначальное сообщение [ Отслеживать ]

"Debian iptables iproute squid"  +/
Сообщение от chapayev email(ok) on 08-Сен-10, 23:08 
Здравствуйте!
Дано:Сервер на debian lenny с тремя интерфейсами,два из которых внешние.На нем крутится сквид с аутинтификацией на AD.
Задача: Нужно сделать так чтоб веб трафик делился на эти два канала (только порт 80)
История:Был испробован iproute2 с балансировкой по весам (весь траф делится согласно weight), но при нем ssl pos  терминалы работают через раз , что не приемлемо.
Был истробован iproute + iptables CONMARK +random ,но в этой конфигурации отказался работать squid и на се попытки подключения выдавал только "access denied"
Подскажите пожалуйста где косяк , и как его обойти.
Ниже приведены конфиги обоих способов:

1.
#!/bin/bash                                
ip route flush table T1                    
ip route flush table T2                    
ip rule delete table T1
ip rule delete table T2
ip rule add from x.x.x.x table T1
ip rule add from y.y.y.y table T2

ip route add x.x.x.0/24 via x.x.x.y dev ppp0 table T1
ip route add y.y.y.0/25 via y.y.y.x dev eth2 src y.y.y.y table T1
ip route add 10.168.0.0/24 dev eth0 src 10.168.0.254 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add default dev ppp0 table T1

ip route add y.y.y.0/25 via y.y.y.x dev eth2 table T2
ip route add x.x.x.0/24 via x.x.x.y dev ppp0 src x.x.x.x table T2
ip route add 10.168.0.0/24 dev eth0 src 10.168.0.254 table T2
ip route add 127.0.0.0/8 dev lo table T2
ip route add default via y.y.y.x dev eth2 table T2

ip route add default scope global nexthop dev ppp0 weight 1 nexthop via y.y.y.x dev eth2 weight 1
ip route flush cache

(x.x.x.x,y.y.y.y -адреса интерфеисов)
(x.x.x.0 ,y.y.y.0 -сети провайдеров)
(x.x.x.y,y.y.y.x -гейты провайдеров)


2.
###################Balancer###################
/sbin/iptables -t mangle -N balancer
###############################################
/sbin/iptables -t mangle -A OUTPUT -p tcp -m multiport --dport 80,443 -m state --state NEW,RELATED -j balancer
########################

# 34% mark with 1
/sbin/iptables -t mangle -A balancer -j CONNMARK --set-mark 1
/sbin/iptables -t mangle -A balancer -m statistic --mode random --probability 0.49 -j RETURN

# all remaining packetsark with2
/sbin/iptables -t mangle -A balancer -j CONNMARK --set-mark 2
/sbin/iptables -t mangle -A balancer -m statistic --mode random --probability 1 -j RETURN

#MARKING ALL PACKETS
/sbin/iptables -t mangle -A OUTPUT -p tcp -m multiport --dport 80,443 -j CONNMARK --restore-mark
/sbin/iptables -t mangle -A OUTPUT  -m mark --mark 1 -j ACCEPT #а эти цепочки просто для поверки
/sbin/iptables -t mangle -A OUTPUT  -m mark --mark 2 -j ACCEPT

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Debian iptables iproute squid"  +/
Сообщение от chapayev email(ok) on 10-Сен-10, 00:18 
Неужели никто не сталкивался с такой задачей?
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Debian iptables iproute squid"  +/
Сообщение от wanura email on 13-Окт-10, 23:58 
> Неужели никто не сталкивался с такой задачей?

есть решение похожей задачи, пример:
есть два провайдера ютк и цтс, шлюз по умолчанию идёт на ютк а надо чтобы сквид сидел на канале цтс..
  начинаем с iproute2
        echo 200 cts_prov >> /etc/iproute2/rt_table
  потом
        ip route add default via 83.1.1.2 dev eth0 table cts_prov
  этим самым мы добавили дополнительную маршрутизацию на канал цтс.
   этим:
        ip rule add fwmark 1 table cts_prov
   айпироут2 будет помеченные пакеты меткой "1" отправлять на канал провайдера цтс.    
     следующим этапом надо заставить iptables маркировать пакеты меткой "1"
   iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1
   iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 1
     первое правило метит пакеты идущие на порт 80
     второе правило метит все исходящие пакеты порта 80
  результат такой, все машины в локальной сети пользуются шлюзом по умолчанию ЮТК, а сквид едет через второй канал ЦТС...
при настройке сиё руководствовался статьями:
  http://web.opennet.ru/base/net/iproute2.txt.html
  http://opennet.ru:8101/base/net/iproute2_cebka.txt.html
  http://www.iptables.ru/iptables1119.html
обращаю внимание что как-то самостоятельно направить сквид на шлюз не поумолчанию с помощью tcp_outgoing_address обернулись провалом!!! пришлось делать как есть.
  Всё вышенаписанное работает испытал на собственной шкуре

  

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Debian iptables iproute squid"  +/
Сообщение от PavelR (??) on 14-Окт-10, 10:58 
>[оверквотинг удален]
> ip rule add from x.x.x.x table T1
> ip rule add from y.y.y.y table T2
> ip route add default dev ppp0 table T1
> ip route add default via y.y.y.x dev eth2 table T2
> ip route add default scope global nexthop dev ppp0 weight 1 nexthop
> via y.y.y.x dev eth2 weight 1
> ip route flush cache
> (x.x.x.x,y.y.y.y -адреса интерфеисов)
> (x.x.x.0 ,y.y.y.0 -сети провайдеров)
> (x.x.x.y,y.y.y.x -гейты провайдеров)

в ip ru не замечено выбора таблицы маршрутизации на основе флажка (маркера).


> ip route add x.x.x.0/24 via x.x.x.y dev ppp0 table T1
> ip route add y.y.y.0/25 via y.y.y.x dev eth2 src y.y.y.y table T1
> ip route add 10.168.0.0/24 dev eth0 src 10.168.0.254 table T1
> ip route add 127.0.0.0/8 dev lo table T1
> ip route add y.y.y.0/25 via y.y.y.x dev eth2 table T2
> ip route add x.x.x.0/24 via x.x.x.y dev ppp0 src x.x.x.x table T2
> ip route add 10.168.0.0/24 dev eth0 src 10.168.0.254 table T2
> ip route add 127.0.0.0/8 dev lo table T2

Эту хрень не надо пихать в таблицы Т1 и Т2, оно должно жить в main в единственном экземпляре.

127.0/8 вообще пихать туда не надо

таким образом, в т1 и т2 будут только по одной записи:

ip route add default dev ppp0 table T1
ip route add default via y.y.y.x dev eth2 table T2


кроме того, надо убрать дефолт из таблицы майн  и добавить его в таблицу default

получим примерно такой порядок проверки правил:

0:      from all lookup local
1000:   from all lookup main
1010:   from 1.2.144.38 lookup prov1
1030:   from 3.4.185.33 lookup prov2
2000:   from 192.168.0.0/24 lookup prov1  #без балансировки
3000:   from all fwmark 0x2 lookup prov2  #или по маркерам
3005:   from all fwmark 0x1 lookup prov1
32766:  from all lookup main
32767:  from all lookup default

Маркеры проверяются после проверки src, поскольку в случае ошибочной маркировки поимеем отправку пакетов "не через тот канал". Проверять "наоборот" требуется в редких случаях, например когда посылать "не через тот канал" можно. =)

Читаем:

http://www.opennet.me/tips/2009_policy_route_linux.shtml
http://www.opennet.me/tips/1651_route_iptables_linux_nat.shtml

И используем четкие указания приоритетов в правилах ip ru.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру