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

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

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

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

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

Сообщение fjey »

Доброго времени суток, уважаемые.
Чтобы не утомлять текстом ни вас ни себя, напишу кратко.

Задача:
Перенаправить трафик, идущий на порты 53,80,443... на eth2. При этом особо не заморачиваясь и без сквида.

Условия:
OS: Ubuntu
два внешних интерфейса, допустим eth1 (основной) и eth2 (только для серфинга), с соответствующими GW(n)_IP.
На данный момент маршрутизация настроена таким образом что с помощью iptables SNAT трафик уходит в internet через eth1.

Спасибо.
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

Перенаправить трафик, идущий на порты 53,80,443... на eth2.

А зачем его перенаправлять, есл можно маршрутизировать?

Помечаем весь трафик, который мы хотим пускать через eth2

# iptables -A PREROUTING -t mangle -i eth0 -p tcp -m multiport --dport 53,80,443 -j MARK --set-mark 2

На основе метки маршрутизируем трафик через определенное устройство

# echo 200 eth2-out >> /etc/iproute2/rt_tables
# ip rule add fwmark 2 table eth2-out
# ip route add default via xxx.xxx.xxx.xxx dev eth2 table eth2-out
# ip route add default via yyy.yyy.yyy.yyy dev eth1
# ip route flush cache

При этом особо не заморачиваясь и без сквида.

сквид тут тебе и не поможет, точнее только отчасти.
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

Совет для неопытных сисадминов -- мои грабли:
Не забывайте что вышеописанный способ задаёт маршрут пакету, но не более того. Может быть и в вашем случае дальнейший шлюз пропускает пакеты только с вашего IP-адреса. Так что не забываем добавить соответствующие правила в, например, iptables.
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

Используя connmark маркируется только первый пакет из соединения, все остальные идут через этот же шлюз. Или ты что то другое имел ввиду? И какие правила iptables?
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

ALexhha писал(а):
02.11.2009 18:05
Используя connmark маркируется только первый пакет из соединения, все остальные идут через этот же шлюз. Или ты что то другое имел ввиду? И какие правила iptables?

я имел ввиду что пакеты хоть и уходят по нужному пути и через нужный интерфейс, но они всё равно не попадают в internet из-за того что дальнейший шлюз пропускает пакеты только с моего IP-адреса. В данном случае помог SNAT.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

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

Сообщение pelmen »

fjey писал(а):
02.11.2009 19:00
ALexhha писал(а):
02.11.2009 18:05
Используя connmark маркируется только первый пакет из соединения, все остальные идут через этот же шлюз. Или ты что то другое имел ввиду? И какие правила iptables?

я имел ввиду что пакеты хоть и уходят по нужному пути и через нужный интерфейс, но они всё равно не попадают в internet из-за того что дальнейший шлюз пропускает пакеты только с моего IP-адреса. В данном случае помог SNAT.
это очевидно
ALexhha писал(а):
01.11.2009 13:01
# echo 200 eth2-out >> /etc/iproute2/rt_tables
# ip rule add fwmark 2 table eth2-out

# ip route flush cache
Можно попросить Вас рассказать про эти строчки подробнее (зачем они и что без них не получится), а то я не силен в этом, а познать хочется.
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

# echo 200 eth2-out >> /etc/iproute2/rt_tables

создаем таблицу eth2-out

# ip rule add fwmark 2 table eth2-out

все пакеты с меткой 2 направляем в таблицу eth2-out (заставляем уходить через нужный нам канал)

# ip route flush cache

сбрасываем кеш

http://www.opennet.ru/docs/RUS/LARTC/ - советую прочитать

А эту картинку держать у себя перед глазами для понимания работы iptables + iproute http://l7-filter.sourceforge.net/PacketFlow.png
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

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

Сообщение pelmen »

Картинку я вроде как понимаю (держу перед глазами), а вот про правила (таблицы) не очень понимаю.
1. Что за 200 ?
2. eth2-out - это название, оно может быть произвольным?
3. нам необходимо создать таблицу, или можно воспользоваться существующими?
в этом случае все пакеты, идущие через эту (существующую) таблицу будут идти через eth2, согласно "ip route add default via xxx.xxx.xxx.xxx dev eth2 table eth2-out"?
или таблиц вообще еще нет и нам прихзодится создавать "первую"?
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

pelmen писал(а):
03.11.2009 01:04
Картинку я вроде как понимаю (держу перед глазами), а вот про правила (таблицы) не очень понимаю.
1. Что за 200 ?
2. eth2-out - это название, оно может быть произвольным?
3. нам необходимо создать таблицу, или можно воспользоваться существующими?
в этом случае все пакеты, идущие через эту (существующую) таблицу будут идти через eth2, согласно "ip route add default via xxx.xxx.xxx.xxx dev eth2 table eth2-out"?
или таблиц вообще еще нет и нам прихзодится создавать "первую"?

1. 200 -- ID таблицы.
2. да
3. /etc/iproute2/rt_tables там все перечислены. По умолчанию эти:
Таблица Local (ID 255) - специальная таблица маршрутизации с самым большим
приоритетом, которая содержит таблицы для локальных и широковещательных
адресов.
Таблица Main (ID 254) - обычная таблица маршрутизации.
Таблица Default (ID 253) - пустая по умолчанию таблица.
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

Можно небольшое уточнение? Как мне быть с настройкой сети? Шлюзы вообще не прописывать нигде? я имею ввиду /etc/network/interfaces
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

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

Сообщение pelmen »

fjey писал(а):
03.11.2009 09:59
1. 200 -- ID таблицы.
так ID или приоритет? И на что влияет приоритет, если в разных таблицах разные маршруты? Т.е. как ни крути порядок выполнения таблиц, все равно к Васе пойдет через eth0, а к Пете через eth1. Это как если бы это были правила в цепочках iptables (например, input и forward) а с помощью приоритета можно сделать, чтобы forward выполнялся раньше input ??? Или я совсем не понимаю?
fjey писал(а):
03.11.2009 09:59
Таблица Main (ID 254) - обычная таблица маршрутизации.
Таблица Default (ID 253) - пустая по умолчанию таблица.
Таким образом мы можем не создавать новую таблицу, а воспользоваться существующей, например Default, раз уж она все равно пустая?
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

2 pelmen
документацию из принципа не читаем? Там все разжевано
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

Сделал для теста на виртуальной машине (далее сервер) следующую конфигурацию:

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

# iptables -A PREROUTING -t mangle -s $LAN -j MARK --set-mark 2

# echo 200 eth2-out >> /etc/iproute2/rt_tables
# ip rule add fwmark 2 table eth2-out
# ip route add default via GW_IP dev eth2 table eth2-out
# ip route flush cache

Да, пакеты действительно пошли на GW_IP, но там у меня правило простое:
iptables -t nat -A POSTROUTING -s IP_сервера -j MASQUERADE

Т.к. пакеты на сервере должным образом не обрабатываются, то и Gateway, разумеется, их не пропустил. По этому добавил правило на сервер (Случай 1):
iptables -t nat -A POSTROUTING -s $LAN -j SNAT --to-source IP_сервера

Результат -- интернета на клиенте нету (почему? -- пытаюсь выяснить). Но если я пропишу на Gateway-е правило (Случай 2):
iptables -t nat -A POSTROUTING -s $LAN -j MASQUERADE

-- интернет на клиенте появится.

В "случае 1" tcpdump-ом сливаю пакеты на шлюзе и на сервере. Пакеты ходят от клиента в интернет и обратно до сервера, но к клиенту не возвращаются. Почему? (forwarding разрешен)
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

Чтобы предметно говорить, необходим вывод след команд

# ip ro sh
# ip ru sh
# ip ro sh table eth2-out
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

user@host:~$ ip ro sh
192.160.0.0/24 dev eth0 proto kernel scope link src IP_сервера_192.168.0.143
user@host:~$ ip ru sh
0: from all lookup local
32765: from all fwmark 0x2 lookup eth2-out
32766: from all lookup main
32767: from all lookup default
user@host:~$ ip ro sh table eth2-out
default via IP_шлюза_192.168.0.5 dev eth0
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

отмена. Прошу прощения, засиделся с этой проблемой намудрил там где всё просто.
[cut]
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

fjey писал(а):
03.11.2009 16:49
user@host:~$ ip ro sh
192.160.0.0/24 dev eth0 proto kernel scope link src IP_сервера_192.168.0.143

не понял, на сервере, что один интерфейс?
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

это виртуальная машина с 1-ним интерфейсом. На данный момент работает SNAT, но пока не добавляю шлюз по умолчанию для всего сущего (route add default gw IP_GW) пакеты от клиента идут в интернет, но обратно дальше виртуальной машины не возвращаются.
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

Ничего не понял. Я просил показать вывод команд с машины, которая подключена к двум провайдерам, а не с виртуалки с одним интерфейсом!!!
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

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

Сообщение pelmen »

ALexhha писал(а):
03.11.2009 13:07
2 pelmen
документацию из принципа не читаем? Там все разжевано
Завтра выходной, вот и почитаю. Нервничать не стоит.
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

какая разница сколько интерфейсов? Да и зачем ставить эксперименты на рабочей машине?

Есть виртуальная машинка под линуксом. Пакеты бегут на неё с клиента, а на ней работают правила, которые вы указали мне во втором сообщении этой темы (за что вам и спасибо), и никаких других правил кроме ваших и SNAT-а, как я уже говорил -- нету. Но пакеты не возвращаются к клиенту, стопорятся на сервере (уже на обратном пути). Вы не нервничайте так, я постараюсь дальше сам разобраться, вы и без того уже помогли.
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

Во! Это даже лучше что я на виртуальной машине тестирую. Пришел к окончательному выводу что надо как-то доработать правило:
iptables -A PREROUTING -t mangle -i eth0 -p tcp -m multiport --dport 53,80,443 -j MARK --set-mark 2

Этого недостаточно. Пакеты идущие на эти порты в итоге уходят через нужный маршрут, но возвращаются они по стандартному шлюзу (проверено на рабочем сервере) или не возвращаются вообще, если стандартного шлюза нету (проверено на вирт.машинке).
К сведению, следующее правило заставляет успешного проходить пакеты в оба направления и без основного шлюза:
# ip ru add from IP_клиента table eth2-out

Так что, надо думать что делать с маркировкой. Т.к. на деле необходимо пропускать весь http (хотябы) трафик через доп. шлюз.
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

Этого недостаточно. Пакеты идущие на эти порты в итоге уходят через нужный маршрут, но возвращаются они по стандартному шлюзу

т.е. ты хочешь сказать, что на роутере есть два интерфейса, eth1 - смотрит в сторону ISP1 он же шлюз по умолчанию, eth2 - смотрит в сторону ISP2.

Клиент из твоей локалки пытается скачать что то по http протоколу, запрос от него уходит через eth2, а ответ он получает через eth1?
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

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

Сообщение pelmen »

Такое может быть только в том случае, если SNAT делать криво.
По ссылке (http://www.opennet.ru/docs/RUS/LARTC/) не рассказано, что за 200, зачем он нужен и почему нельзя использовать имеющуюся пустую таблицу
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

действительно, SNAT был неправильно настроен. Теперь правильно SNAT сделал. Пакеты уходят как задумано, и (что логично, рас SNAT правильно сделан) приходят обратно на нужный интерфейс, но дальше сервера, опять же, не возвращаются. приходят на сервер с заSNAT-еным адресом, и дальше куда идти не знают.
eth2: IP:192.168.1.101 - тот самый запасной канал
91.203.4.17.www - адрес сайта, порт 80 (он же www)
Вывод команды: # tcpdump port 80 -i eth2

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

15:03:08.264934 IP 192.168.1.101.1749 > 91.203.4.17.www: S 798220991:798220991(0) win 64240 <mss 1360,nop,wscale 0,nop,nop,sackOK>
15:03:08.343839 IP 91.203.4.17.www > 192.168.1.101.1749: S 1038145225:1038145225(0) ack 798220992 win 65535 <mss 1360,nop,wscale 3,sackOK,eol>
15:03:11.353925 IP 91.203.4.17.www > 192.168.1.101.1749: S 1038145225:1038145225(0) ack 798220992 win 65535 <mss 1360,nop,wscale 3,sackOK,eol>
15:03:11.446478 IP 192.168.1.101.1749 > 91.203.4.17.www: S 798220991:798220991(0) win 64240 <mss 1360,nop,wscale 0,nop,nop,sackOK>
15:03:11.532261 IP 91.203.4.17.www > 192.168.1.101.1749: S 1038145225:1038145225(0) ack 798220992 win 65535 <mss 1360,nop,wscale 3,sackOK,eol>
15:03:14.534287 IP 91.203.4.17.www > 192.168.1.101.1749: S 1038145225:1038145225(0) ack 798220992 win 65535 <mss 1360,nop,wscale 3,sackOK,eol>
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

С рабочей машины:
# ip ro sh
...
10.0.1.113 dev ppp17 proto kernel scope link src 10.0.0.3
10.0.1.76 dev ppp31 proto kernel scope link src 10.0.0.3
10.0.1.70 dev ppp10 proto kernel scope link src 10.0.0.3
10.0.1.91 dev ppp7 proto kernel scope link src 10.0.0.3
10.0.1.86 dev ppp53 proto kernel scope link src 10.0.0.3
10.0.1.81 dev ppp16 proto kernel scope link src 10.0.0.3
82.207.101.24/30 dev eth0 proto kernel scope link src 82.207.101.26
192.168.1.0/24 dev eth2 proto kernel scope link src 192.168.1.101
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
default via 82.207.101.25 dev eth1 metric 100
# ip ru sh
0: from all lookup local
32765: from all fwmark 0x2 lookup eth2-out
32766: from all lookup main
32767: from all lookup default
# ip ro sh table eth2-out
default via 192.168.1.1 dev eth2
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

# ip ru sh
0: from all lookup local
32765: from all fwmark 0x2 lookup eth2-out
32766: from all lookup main
32767: from all lookup default

и где тут PBR?
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

Примерно так должно быть

# iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 0x2
# iptables -t nat -A POSTROUTING -s xxx.xxx.xxx.xxx -o eth1 --to-source ip1
# iptables -t nat -A POSTROUTING -s xxx.xxx.xxx.xxx -o eth2 --to-source ip2

# ip rule add fwmark 0x2 table isp2
# ip route add default via gw1 dev eth1 table isp1
# ip route add default via gw2 dev eth2 table isp2
Спасибо сказали:
fjey
Сообщения: 26
ОС: Ubuntu 8.04 LTS

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

Сообщение fjey »

Простите, а по какому критерию пакеты будут попадать в table isp2 ?
И разве транзитные пакеты будут проходить цепочку OUTPUT?
Спасибо сказали:
ALexhha
Сообщения: 109

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

Сообщение ALexhha »

Простите, а по какому критерию пакеты будут попадать в table isp2 ?

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

И разве транзитные пакеты будут проходить цепочку OUTPUT?

может все таки прочитаешь LARTC + iptables how to?
Спасибо сказали: