Решено: Пренаправление http трафика (на второй (из двух) внешних каналов)

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

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

fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

Re: Решено: Пренаправление http трафика

Сообщение fjey »

# iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 0x2
+
# ip rule add fwmark 0x2 table isp2

Прошу прощения, я имел ввиду table isp1, конечно. Т.е. необходимо и все остальные пакеты маркировать и отправлять в таблицу isp1?
может все таки прочитаешь LARTC + iptables how to?

Безусловно, вы правы. Обязательно прочитаю. В данный момент дело горит, а прочитать одного раза недостаточно, для меня во всяком случае :-) Это надо посидеть, примерчики потыкать.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Решено: Пренаправление http трафика

Сообщение pelmen »

ALexhha писал(а):
04.11.2009 21:01
# iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 0x2
И разве транзитные пакеты будут проходить цепочку OUTPUT?
может все таки прочитаешь LARTC + iptables how to?
Руководство по iptables (Iptables Tutorial 1.1.19) - Таблица 3-1. Порядок движения транзитных пакетов - mangle output не вижу. Может все таки ткнешь в "правильный" iptables how to?
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

Re: Решено: Пренаправление http трафика

Сообщение fjey »

транзитный трафик не идёт через цепочку OUTPUT. А идёт примерно так: PREROUTING->маршрутизация->FORWARD->POSTROUTING.
Нашел темы с аналогичными проблемами:
http://forum.ubuntu.ru/index.php?topic=60258.0
http://www.linux.org.ru/view-message.jsp?msgid=2614975
http://www.opennet.ru/openforum/vsluhforumID1/86480.html
решения можно по кусочкам собрать, что я и сделал в случае с виртуальной машиной у себя дома. Но у меня случай на работе не стандартный (относительно). Т.к. пакеты идут не просто из локальной сети через конкретный интерфейс, а из pptр-подключений, коих огромное множество. И что с ними делать... тут я теряюсь. Мозг уже не тот.
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Решено: Пренаправление http трафика

Сообщение ALexhha »

Прошу прощения, я имел ввиду table isp1, конечно. Т.е. необходимо и все остальные пакеты маркировать и отправлять в таблицу isp1?

для этого есть default gw

Т.к. пакеты идут не просто из локальной сети через конкретный интерфейс, а из pptр-подключений, коих огромное множество. И что с ними делать... тут я теряюсь. Мозг уже не тот.

а в чем проблемы? -i ppp+ или -o ppp+

Таблица 3-1. Порядок движения транзитных пакетов - mangle output не вижу. Может все таки ткнешь в "правильный" iptables how to?

сори ошибся, mangle PREROUTING :)
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Решено: Пренаправление http трафика

Сообщение pelmen »

ALexhha писал(а):
05.11.2009 01:02
сори ошибся, mangle PREROUTING :)
А в таком случае что делать для "От локальных процессов" ?
mangle OUTPUT
nat OUTPUT
Filter OUTPUT
mangle POSTROUTING
nat POSTROUTING
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Решено: Пренаправление http трафика

Сообщение ALexhha »

а зачем тебе для локальных? или это для общего развития? :laugh:
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Решено: Пренаправление http трафика

Сообщение pelmen »

ALexhha писал(а):
05.11.2009 01:38
а зачем тебе для локальных? или это для общего развития? :laugh:
или это для общего развития. Подозреваю, что для этого нужно два правила iptables делать. Одно для транзитных (mangle prerouting) второе для локальных (как?)
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Решено: Пренаправление http трафика

Сообщение ALexhha »

Одно для транзитных (mangle prerouting) второе для локальных (как?)

я так понял, что mangle INPUT
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

Re: Решено: Пренаправление http трафика

Сообщение fjey »

pelmen писал(а):
05.11.2009 08:59
Подозреваю, что для этого нужно два правила iptables делать. Одно для транзитных (mangle prerouting) второе для локальных (как?)

Ну для локальных # iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 0x2
Я вот, кстати почитал, понял, наконец. Если вы ещё не нашли, то ID таблицы в iproute2 не более чем её номер, на сколько я понял, он ни на что не влияет. Вы можете добавлять правила в таблицу по имени или по номеру. А вот приоритеты уже выставляются каждым правилам (rule) с помощью приставочки prio. Например, # ip rule from 192.168.0.1 table 200 prio 50
В итоге видим:$ ip ru l
0: from all lookup local
50: from 192.168.0.1 lookup eth2-out
32766: from all lookup main
32767: from all lookup default
Таблица default стоит самая последняя в приоритетах, она пустая (можете убедиться # ip ro l table default), но не вижу большой необходимости её использовать. Хотите? -- используйте.

Ну а я всё мучаю свой вопрос. Пока что не ясно, почему если я добавлю правило :
# ip ro add default via gw2_ip dev eth2 table eth2-out
# ip ru add from IP_client table eth2-out
Пакеты удачно ходят от клиента и обратно. Но если я буду метить пакеты:
# iptables -t mangle -A PREROUTING -s $LAN -j MARK --set-mark 10
# iptables -t nat -A POSTROUTING -o eth2 -m mark --mark 10 -j SNAT --to-source $MYIP
то, они ходят от клиента в интернет а на обратном пути осядают на сервере. Лоигчно было бы предположить, что рас пакеты идущие оратно уже без марки, то они не проходят таблицу маршрутизации в которую кидает правило ip rule fwmark. Окей, делаем:
# iptables -t mangle -A PREROUTING -p tcp --sport 80 -j MARK --set-mark 10
пакеты всё равно будут осядать на серваке.
Подкинте ещё идеи, пожалуйста, где грабли?
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Решено: Пренаправление http трафика

Сообщение ALexhha »

# iptables -t nat -A POSTROUTING -o eth2 -m mark --mark 10 -j SNAT --to-source $MYIP
# iptables -t mangle -A PREROUTING -p tcp --sport 80 -j MARK --set-mark 10

это лишнее, имхо.

они ходят от клиента в интернет а на обратном пути осядают на сервере

-j LOG и смотри где затык
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Решено: Пренаправление http трафика

Сообщение ALexhha »

Рекомендую - http://jengelh.medozas.de/images/nf-packet-flow.png

Себе распечатал на A3 :)
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

Re: Решено: Пренаправление http трафика

Сообщение fjey »

Случай с оседанием пакета на сервере:
Пакет возвращается на сервер, попадает в -A PREROUTING -t mangle:
mangle PREROUTING:IN=eth2 OUT= MAC=08:00:27:b4:4e:2c:00:11:5b:67:21:3d:08:00 SRC=194.0.131.18 DST=192.168.1.100(это IP сервера заданный с помощью SNAT-а при отправке) LEN=52 TOS=0x00 PREC=0x00 TTL=58 ID=0 DF PROTO=TCP SPT=80 DPT=3185 WINDOW=5840 RES=0x00 ACK SYN URGP=0 MARK=0xb(по этой марке я в лог ловлю пакеты)

Но в -A FORWARD -t mangle -- тишина.

В случае с '# ip ru add from IP_client table eth2-out' пакет удачно проходит все цепочки и уходит к клиенту.
Короче говоря, в первом случае пакет не проходит этап маршрутизации. Тот что после PREROUTING-а сразу.
Есть подозрение что происходит это из-за того, что пакету, по каким-то причинам, не возвращается адрес настоящего получателя. А может и возвращается (хотя в логах я не заснял пакет с возвращеным адресом). В любом случае пакет не идёт ни в цепочку FORWARD ни в INPUT, одним словом -- отбрасывается.
Как узнать почему?

ps: http://upload.wikimedia.org/wikipedia/ru/a...diagram-rus.png (с) wikipedia
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Решено: Пренаправление http трафика

Сообщение ALexhha »

Но в -A FORWARD -t mangle -- тишина.

а nat PREROUTING попадает?
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

Re: Решено: Пренаправление http трафика

Сообщение fjey »

если чесно, я в этой таблице даже при прохождении всех пакетов через второй канал, пакетики поймать не могу. Вот например так:
iptables -t mangle -A PREROUTING -p tcp --sport 80 -j MARK --set-mark 11
iptables -t nat -A PREROUTING -m mark --mark 11 -j LOG --log-prefix="nat PREROUTING:"
-- тишина в обоих случаях.
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Решено: Пренаправление http трафика

Сообщение ALexhha »

А они должны туда попадать
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

Re: Решено: Пренаправление http трафика

Сообщение fjey »

как же так? Если пакет туда-обратно проходит а правила их не логируют?
iptables -t mangle -A PREROUTING -p tcp --sport 80 -j MARK --set-mark 11
iptables -t nat -A PREROUTING -m mark --mark 11 -j LOG --log-prefix="nat PREROUTING:"

Может я не правильно написал? В остальных таблицах логирование идёт такими же правилами.

upd: посмотрел iptables -t nat -A PREROUTING -j LOG --log-prefix="nat PREROUTING:"
в данной таблице логируются только уходящие пакеты с маркой 10 (--dport 80 -j MARK 10). При этом пакеты уходят и приходят нормально.
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: Решено: Пренаправление http трафика

Сообщение skor »

Может чем-то поможет....
http://jengelh.medozas.de/images/nf-packet-flow.png
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Решено: Пренаправление http трафика

Сообщение pelmen »

ALexhha писал(а):
05.11.2009 11:46
Одно для транзитных (mangle prerouting) второе для локальных (как?)
я так понял, что mangle INPUT
fjey писал(а):
05.11.2009 11:53
pelmen писал(а):
05.11.2009 08:59
Подозреваю, что для этого нужно два правила iptables делать. Одно для транзитных (mangle prerouting) второе для локальных (как?)
Ну для локальных # iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 0x2

если верить "Таблица 3-3. От локальных процессов "Принятие решения о маршрутизации. Здесь решается куда пойдет пакет дальше -- на какой адрес, через какой сетевой интерфейс и пр." происходит ДО того, как пакет попадает в руки какой-либо из таблиц iptables :)
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

Re: Решено: Пренаправление http трафика

Сообщение fjey »

pelmen писал(а):
05.11.2009 21:09
если верить "Таблица 3-3. От локальных процессов" Принятие решения о маршрутизации. Здесь решается куда пойдет пакет дальше -- на какой адрес, через какой сетевой интерфейс и пр."происходит ДО того, как пакет попадает в руки какой-либо из таблиц iptables :)

От части вы правы. Пакеты проходят маршрутизацию до поступления в таблицы iptables-а, потом проходят цепочку OUTPUT и снова уходят на маршрутизацию (Рисуночек с википедии). Уж не знаю зачем это нужно, но судя по ссылке -- это так.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Решено: Пренаправление http трафика

Сообщение pelmen »

Я нашел, кому верить. По ссылке на opennet идем в начале на "Последнюю версию документа можно получить по адресу: http://iptables-tutorial.frozentux.net", ищем там последнюю версию описания iptables (1.2.2)
Table 6-2. Source local host (our own machine)Step Table Chain Comment
1 Local process/application (i.e., server/client program)
2 Routing decision. What source address to use, what outgoing interface to use, and other necessary information that needs to be gathered.
3 raw OUTPUT This is where you do work before the connection tracking has taken place for locally generated packets. You can mark connections so that they will not be tracked for example.
4 This is where the connection tracking takes place for locally generated packets, for example state changes et cetera. This is discussed in more detail in the The state machine chapter.
5 mangle OUTPUT This is where we mangle packets, it is suggested that you do not filter in this chain since it can have side effects.
6 nat OUTPUT This chain can be used to NAT outgoing packets from the firewall itself.
7 Routing decision, since the previous mangle and nat changes may have changed how the packet should be routed.
8 filter OUTPUT This is where we filter packets going out from the local host.
9 mangle POSTROUTING The POSTROUTING chain in the mangle table is mainly used when we want to do mangling on packets before they leave our host, but after the actual routing decisions. This chain will be hit by both packets just traversing the firewall, as well as packets created by the firewall itself.
10 nat POSTROUTING This is where we do SNAT as described earlier. It is suggested that you don't do filtering here since it can have side effects, and certain packets might slip through even though you set a default policy of DROP.
11 Goes out on some interface (e.g., eth0)
12 On the wire (e.g., Internet)
Как видим, есть пункт 2 (принятие решения о маршрутизации), а потом есть пункт 7 (принятие решения о маршрутизации, относительно изменений nat-ом и mangle-ом -5 и 6 пункты) Таким образом можно в mangle output (5) делать mark, а потом (7) маршрутизация его съест
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

Re: Решено: Пренаправление http трафика

Сообщение fjey »

pelmen писал(а):
05.11.2009 22:25
Я нашел, кому верить.

Никогда и никому не верьте, даже самому себе. Верьте только собственному опыту :-)
ps: ваши слова не опровергают картинку с википедии ;)
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Решено: Пренаправление http трафика

Сообщение pelmen »

fjey писал(а):
05.11.2009 23:27
ps: ваши слова не опровергают картинку с википедии ;)
Так мои слова как раз-таки её (картинку) подтверждают. Вот о чем я.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Решено: Пренаправление http трафика

Сообщение pelmen »

Читаю про iproute2, назрел вопрос:

Код: Выделить всё

# echo 200 T1 >> /etc/iproute2/rt_tables
# ip route add $P1_NET dev $IF1 src $IP1 table T1
# ip route add default via $P1 table T1
почему вместо этих строк нельзя написать просто

Код: Выделить всё

# ip route add $P1_NET dev $IF1 src $IP1 via $P1
и не создавать никаких таблиц?
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Решено: Пренаправление http трафика

Сообщение pelmen »

Решил отдельнюу тему создать
Запутался с iproute2
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Решено: Пренаправление http трафика

Сообщение ALexhha »

Таблицы создаются для того, чтобы на них ссылаться на основании какого либо критерия.
Спасибо сказали: