The OpenNET Project / Index page

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

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

"Проблема настройки маршрутизации по меткам"  +/
Сообщение от anonymous (??) on 17-Окт-11, 20:18 
Доброго времени суток, господа.
Решительно отказывается работать сабж.
Что пытаюсь сделать:
Настроить маршрутизацию определенных сервисов через определенный канал.
В данном примере, smtp.
А так же, сделать так, чтобы ответ уходил через тот же канал, через который пришел запрос.
Основные настройки:

iptables -t mangle -I PREROUTING -p tcp --dport 25 -j CONNMARK --set-mark 0x17
iptables -t mangle -I PREROUTING -j CONNMARK --restore-mark
iptables -t nat -I PREROUTING -p tcp --dport 25 --jump DNAT --to-destination 192.168.1.32
iptables -t nat -I POSTROUTING -o eth1 -j SNAT --to-source 1.1.1.2
iptables -t nat -I POSTROUTING -o eth2 -j SNAT --to-source 2.2.2.2

ip rule show:
0:      from all lookup local
32760:  from all fwmark 0x17 lookup prov1
32761:  from 1.1.1.2 lookup prov1
32762:  from 2.2.2.2 lookup prov2
32766:  from all lookup main
32767:  from all lookup default

Основным шлюзом выбран шлюз через prov2, т.е. в таблице main присутствует запись
default via 2.2.2.1 dev eth2
Бред в том, что, если прописать дефолтным шлюзом 1.1.1.1, то все работает.
Но меня этот вариант не устраивает.
Делаю со своей домашней машины:
telnet 1.1.1.2 25
Соединение висит.
Включаю на шлюзе:
tcpdump -nn -i eth2 port 25
tcpdump -nn -i eth1 port 25
Вижу ситуацию, что первоначальный запрос уходит через нужный интерфейс(eth1), а ответ пытается выйти через eth2, но с ip-адресом eth1(т.е. NAT срабатывает).
Таким образом, получается, что маршрутизация выполняется еще до NAT, но на правило
ip rule add fwmark 0x17 lookup prov1 маршрутизатор просто не реагирует. Где ошибся?
Просьба не посылать читать lartc, я его уже почти наизусть помню...

Ответить | Правка | Cообщить модератору

Оглавление

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


1. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от anonymous (??) on 17-Окт-11, 22:10 
>[оверквотинг удален]
> Соединение висит.
> Включаю на шлюзе:
> tcpdump -nn -i eth2 port 25
> tcpdump -nn -i eth1 port 25
> Вижу ситуацию, что первоначальный запрос уходит через нужный интерфейс(eth1), а ответ пытается
> выйти через eth2, но с ip-адресом eth1(т.е. NAT срабатывает).
> Таким образом, получается, что маршрутизация выполняется еще до NAT, но на правило
> ip rule add fwmark 0x17 lookup prov1 маршрутизатор просто не реагирует. Где
> ошибся?
> Просьба не посылать читать lartc, я его уже почти наизусть помню...

Забыл дописать - в таблице FORWARD все необходимое разрешено.
Пересылка пакетов тоже включена.
Конфиг iptables, разумеется, не полный, но здесь все основные моменты перечислены.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от PavelR (??) on 17-Окт-11, 22:45 
>[оверквотинг удален]
>> tcpdump -nn -i eth1 port 25
>> Вижу ситуацию, что первоначальный запрос уходит через нужный интерфейс(eth1), а ответ пытается
>> выйти через eth2, но с ip-адресом eth1(т.е. NAT срабатывает).
>> Таким образом, получается, что маршрутизация выполняется еще до NAT, но на правило
>> ip rule add fwmark 0x17 lookup prov1 маршрутизатор просто не реагирует. Где
>> ошибся?
>> Просьба не посылать читать lartc, я его уже почти наизусть помню...
> Забыл дописать - в таблице FORWARD все необходимое разрешено.
> Пересылка пакетов тоже включена.
> Конфиг iptables, разумеется, не полный, но здесь все основные моменты перечислены.

Вкуривай мануальчики:

http://www.opennet.me/tips/sml/92.shtml
http://www.opennet.me/tips/2009_policy_route_linux.shtml
http://www.opennet.me/tips/1651_route_iptables_linux_nat.shtml (написано чуток сумбурно, наверное перепишу ;-)) )

потом точнее опиши, на рутере сервисы или внутри в локалке

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от anonymous (??) on 18-Окт-11, 07:00 
>[оверквотинг удален]
>>> Просьба не посылать читать lartc, я его уже почти наизусть помню...
>> Забыл дописать - в таблице FORWARD все необходимое разрешено.
>> Пересылка пакетов тоже включена.
>> Конфиг iptables, разумеется, не полный, но здесь все основные моменты перечислены.
> Вкуривай мануальчики:
> http://www.opennet.me/tips/sml/92.shtml
> http://www.opennet.me/tips/2009_policy_route_linux.shtml
> http://www.opennet.me/tips/1651_route_iptables_linux_nat.shtml (написано чуток
> сумбурно, наверное перепишу ;-)) )
> потом точнее опиши, на рутере сервисы или внутри в локалке

мануальчики перечитал) собственно, по lartc+этим мануалам изначально и делалось.
Сервисы находятся внутри локальной сети.
Наверное, косяк с CONNMARK?
как уйду с работы, выложу правила более подробно

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

3. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от PavelR (??) on 17-Окт-11, 22:53 
>[оверквотинг удален]
>> tcpdump -nn -i eth1 port 25
>> Вижу ситуацию, что первоначальный запрос уходит через нужный интерфейс(eth1), а ответ пытается
>> выйти через eth2, но с ip-адресом eth1(т.е. NAT срабатывает).
>> Таким образом, получается, что маршрутизация выполняется еще до NAT, но на правило
>> ip rule add fwmark 0x17 lookup prov1 маршрутизатор просто не реагирует. Где
>> ошибся?
>> Просьба не посылать читать lartc, я его уже почти наизусть помню...
> Забыл дописать - в таблице FORWARD все необходимое разрешено.
> Пересылка пакетов тоже включена.
> Конфиг iptables, разумеется, не полный, но здесь все основные моменты перечислены.

1) приводи ip ru sh и ip ro sh по всем таблицам (провайдеры, main, default)
2) для первых трех правил iptables требуются уточнения match (IP или интерфейсы)
2.1) всё таки лучше бы увидеть побольше правил iptables, а не "основные моменты".


>Настроить маршрутизацию определенных сервисов через определенный канал.

и

> А так же, сделать так, чтобы ответ уходил через тот же канал, через который пришел запрос.

Это противоречит друг другу, а первая фраза еще и  здравому смыслу =) По какому пришло - по тому и должно уходить.

Задача маршрутизации исходящих соединений - это отдельная задача от маршрутизации входящих соединений. Именно поэтому требуется всё-таки уточнить match в первых трех правилах iptables.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

5. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от anonymous (??) on 18-Окт-11, 22:30 
>[оверквотинг удален]
> 2.1) всё таки лучше бы увидеть побольше правил iptables, а не "основные
> моменты".
>>Настроить маршрутизацию определенных сервисов через определенный канал.
> и
>> А так же, сделать так, чтобы ответ уходил через тот же канал, через который пришел запрос.
> Это противоречит друг другу, а первая фраза еще и  здравому смыслу
> =) По какому пришло - по тому и должно уходить.
> Задача маршрутизации исходящих соединений - это отдельная задача от маршрутизации входящих
> соединений. Именно поэтому требуется всё-таки уточнить match в первых трех правилах
> iptables.


iptables -t nat -L PREROUTING -v -n
Chain PREROUTING (policy ACCEPT 1069K packets, 75M bytes)
pkts bytes target     prot opt in     out     source               destination        
    5   288 DNAT       tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 to:192.168.1.32

iptables -t mangle -L PREROUTING -v -n
Chain PREROUTING (policy ACCEPT 1203M packets, 819G bytes)
pkts bytes target     prot opt in     out     source               destination        
1203M  819G CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0           CONNMARK restore
   15   832 CONNMARK   tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 CONNMARK set 0x17
15462   23M CONNMARK   tcp  --  eth2   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 CONNMARK set 0x18

ip rule show
0:    from all lookup local
32760:    from all fwmark 0x17 lookup prov1
32761:    from 213.27.18.5 lookup prov1
32762:    from 213.138.75.218 lookup prov2
32766:    from all lookup main
32767:    from all lookup default

ip ro sh table prov1
1.1.1.1/25 dev eth2  scope link  src 1.1.1.2
192.168.1.0/24 dev eth0  scope link
default via 1.1.1.1 dev eth1

ip ro sh table prov2
2.2.2.1/29 dev eth1  scope link  src 2.2.2.2
192.168.1.0/24 dev eth0  scope link
default via 2.2.2.1 dev eth2  

ip ro sh table main
192.168.162.0/24 dev tap5  proto kernel  scope link  src 192.168.162.1
192.168.183.0/24 dev tap6  proto kernel  scope link  src 192.168.183.1
192.168.167.0/24 dev tap8  proto kernel  scope link  src 192.168.167.1
192.168.133.0/24 dev tap9  proto kernel  scope link  src 192.168.133.1
192.168.215.0/24 dev tap0  proto kernel  scope link  src 192.168.215.1
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.150
192.168.181.0/24 dev tap3  proto kernel  scope link  src 192.168.181.1
192.168.171.0/24 dev tap4  proto kernel  scope link  src 192.168.171.1
192.168.175.0/24 dev tap2  proto kernel  scope link  src 192.168.175.1
default via 2.2.2.1 dev eth2

Куча приватных сетей в конфиге - это впн-ки.
Таблица default пустая.
Как правильно сделать CONNMARK? У меня такое ощущение, что проблема там.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

7. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от PavelR (??) on 18-Окт-11, 23:42 
хз, всё выглядит правильно.

Единственное что я делаю connmark в -t nat =) и у меня счетчики четко один к другому совпадают. Хотя по идее конечно надо делать в mangle =)

  278 15476 CONNMARK   tcp  --  *      *       0.0.0.0/0            1.2.95.118       tcp dpt:8080 CONNMARK set 0x1
  278 15476 DNAT       tcp  --  *      *       0.0.0.0/0            1.2.95.118       tcp dpt:8080 to:3.4.28.68
1482 80520 CONNMARK   tcp  --  *      *       0.0.0.0/0            3.4.28.66        tcp dpt:8080 CONNMARK set 0x2
1482 80520 DNAT       tcp  --  *      *       0.0.0.0/0            3.4.28.66        tcp dpt:8080 to:3.4.28.68


Восстановление флажка:

debian:~# iptables -t mangle -nvL
Chain PREROUTING (policy ACCEPT 18G packets, 5534G bytes)
pkts bytes target     prot opt in     out     source               destination
    0     0 CONNMARK   tcp  --  *      *       3.4.28.68         0.0.0.0/0           tcp spt:8080 CONNMARK restore

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от PavelR (??) on 18-Окт-11, 23:43 
хм, а почему у правила восстановления всё по нулям я чето прям хз. Сервис уже немножко не используется так как ранеею
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от PavelR (??) on 18-Окт-11, 23:55 
Чтобы всё четко и точно видеть, надо всё точно уточнить в правилах, чтобы под них не подпадало ничего лишнего. Тогда будет видно что работает а что не работает.


iptables -t nat -L PREROUTING -v -n
Chain PREROUTING (policy ACCEPT 1069K packets, 75M bytes)
pkts bytes target     prot opt in     out     source               destination        
    5   288 DNAT       tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 to:192.168.1.32


-i eth1 -d 1.2.3.4 -p tcp --dport 25 -j DNAT --to-destination=192.168.1.32:25

Добавляем -d !!!

iptables -t mangle -L PREROUTING -v -n
Chain PREROUTING (policy ACCEPT 1203M packets, 819G bytes)
pkts bytes target     prot opt in     out     source               destination        
1203M  819G CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0           CONNMARK restore

-i eth0 -p tcp -s 192.168.1.32 --sport 25 -j CONNMARK --connmark-restore

Добавляем -i eth0 -s 192.168.1.32 --sport 25. Будем четко видеть число пакетов с восстановленным маркером

   15   832 CONNMARK   tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 CONNMARK set 0x17
15462   23M CONNMARK   tcp  --  eth2   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 CONNMARK set 0x18


Условие делаем идентичным тому, что в -j DNAT. Т.е. добавляем -d 1.2.3.4 !!!

Таким образом проверим совпадение числа пакетов по правилам днат и маркировки.


Кроме того, возможно стоит обновить сборку ядра (ранее встречались с граблями, да).

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

10. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от anonymous (??) on 19-Окт-11, 09:22 
>[оверквотинг удален]
>   tcp dpt:25 CONNMARK set 0x17
> 15462   23M CONNMARK   tcp  --  eth2
>   *       0.0.0.0/0  
>           0.0.0.0/0
>           tcp
> dpt:25 CONNMARK set 0x18
> Условие делаем идентичным тому, что в -j DNAT. Т.е. добавляем -d 1.2.3.4
> !!!
> Таким образом проверим совпадение числа пакетов по правилам днат и маркировки.
> Кроме того, возможно стоит обновить сборку ядра (ранее встречались с граблями, да).

Уточнил и почистил правила.
Заработало после удаления -j CONNMARK --save-mark где-то в глубине правил из вложенных цепочек...
Мне этот роутер достался так сказать "по наследству", и какой только ерунды в его недрах не водится...
Большое спасибо за разъяснения, я чуть глубже разобрался в этой кухне.
Если будет время переписать ту статью, было бы интересно посмотреть на отредактированный вариант=)
Еще раз спасибо, думаю, тему можно закрывать.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

6. "Проблема настройки маршрутизации по меткам"  +/
Сообщение от anonymous (??) on 18-Окт-11, 22:36 
>>Настроить маршрутизацию определенных сервисов через определенный канал.
> и
>> А так же, сделать так, чтобы ответ уходил через тот же канал, через который пришел запрос.
> Это противоречит друг другу, а первая фраза еще и  здравому смыслу
> =) По какому пришло - по тому и должно уходить.
> Задача маршрутизации исходящих соединений - это отдельная задача от маршрутизации входящих
> соединений. Именно поэтому требуется всё-таки уточнить match в первых трех правилах
> iptables.

Ну я тут не совсем корректно выразился - разумеется, необходимо сделать чтобы ответы уходили через тот же канал, что и пришедшие запросы, просто некоторые сервисы я хочу повесить только на 1 канал(например, чтобы фтп был доступен только по адресу 1.1.1.2).
match уточнил постом выше, но ситуация все равно такая же.
Все правила iptables не выкладываю, т.к:
iptables-save | wc -l
565
Просто повставлял необходимые правила в начало требуемых цепочек.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

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

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




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

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