| Версия для печати | |
| Конференция: | Конференция iXBT.com (http://forum.ixbt.com/) |
| Форум: | Программы: Unix-like системы (http://forum.ixbt.com/?id=76) |
| URL: | http://forum.ixbt.com/topic.cgi?id=76:9522 |
| KB, 02.06.2010 13:53 |
Есть на сервере два канала - основной и резервный, через GPRS. Хочется мне чтобы через резервный канал висел всегда проброшеный openvpn-туннель до другого сервера, на случай ядерной войны Делал так: код:Но при этом соединение на 1196 порт идет один фиг через основной канал. Или такой механизм реализовать можно только если пакеты маркировать в PREROUTING? Но проблема в том, что пакеты от самого хоста, а не те, которые он форвардит, туда вообще не попадают. |
| 1. SuSt, 02.06.2010 16:01 |
KB код:Посмотри, по умолчанию твое новое правило "встанет" после таблицы main, а в таблице main наверняка есть default gw, вот на него все и пойдет.ip rule add fwmark 1196 table GPRS Сделай код:посмотри какой приоритет будет у таблицы main, и модифицируй команду добавления правилаip rule ls код:где "бла-бла-бла" должно быть меньше чем приоритет таблицы main.ip rule add fwmark 1196 table GPRS prio бла-бла-бла |
| 2. KB, 03.06.2010 17:52 |
Да не, оно по умолчанию фигачилось с меньшим приоритетом, так что всё ОК. Но дело в том, что пакеты нужно маркировать в PREROUTING, чтобы они обрабатывались в ip rule fwmark, а пакеты, отправленные с самого сервера (а не пропущенные через НАТ) в PREROUTING не попадают. Вот такая петрушка. Так что пришлось заюзать через-пень-колодный метод, запуская openvpn из /etc/ppp/ip-up и скармливая ему в качестве айпишника для исходящих коннектов, тот, что получил pppd. Плюс там же добавляем правило ip rule from IP table GPRS... Криво, но работает. |
| 3. SuSt, 04.06.2010 15:14 |
Забавно-с. Даже и не ожидал, что в Linux в-принципе могут быть такие досадные неприятности. Какие-то уж слишком странные на мой взгляд грабли на ровном месте. Теоретически OpenVPN можно "повесить" на dummy-интерфейс со своим "статичным" ip-шником и прописАть жестко маршрутизацию через GPRS с этого IP. Тогда не нужно будет "дергать" ppp/ip-up. |
| 4. -Sorcerer-, 04.06.2010 20:19 |
SuSt Даже и не ожидал, что в Linux в-принципе могут быть такие досадные неприятности. Ессно никаких неприятностей нет, есть непонимание работы netfilter топикстартером. Routing decision принимается до выхода пакета если его origin - localhost. Так работает любой раутер. |
| 5. KB, 04.06.2010 20:55 |
-Sorcerer- Ну так как реализовать правильно данный механизм, о всезнающий До выхода пакета откуда-куда? До цепочки OUTPUT имеется в виду? |
| 6. borispr, 04.06.2010 21:01 |
Я чета не понял, к чему такие сложности? OpenVPN же поднимает коннект не хрен знает куда по 1196, а на вполне конкретный IP. Так чем статик рут на этот IP не устраивает? |
| 7. -Sorcerer-, 04.06.2010 22:03 |
KB Ну так как реализовать правильно данный механизм, о всезнающий Правильно - никак. Ибо ничего правильного в попытке вмешательства в локальную таблицу быть не может, по-определению. Добавление от 04.06.2010 22:11: KB |
| 8. SuSt, 04.06.2010 22:48 |
borispr Так чем статик рут на этот IP не устраивает? Дык хочется зарутить только один порт, а не все подряд на этот IP. KB Кстати, насчет "-j ROUTE" - тоже мысль. Хотя лично я не проверял как оно работает. Сам тоже все метками, метками... |
| 9. KB, 04.06.2010 23:20 |
-Sorcerer- Ну вот как бы казалось простая задача, а решения нет. Пакеты все локальные, делай что хочу, ан нет. Эдакий design flaw borispr Да, нужен только один TCP порт, остальное на этот айпи - через основной канал, т.к. там еще много чего SuSt Да как-то не хочется от ванильного ядра отходить, пущай работает как есть, а там, если в mainline добавят - будем пробовать. На лоре еще советовали NATить локальные пакеты, тоже пока не проверял, ибо выглядит как-то дико и per rectum |
| 10. -Sorcerer-, 05.06.2010 00:34 |
KB Пакеты все локальные, делай что хочу, ан нет. Эдакий design flaw Ну да, правда такой "design flaw" присутствует во всех видах раутеров, что мне известны. И, в принципе, оно называется: inherent behavior. Добавление от 05.06.2010 00:39: Хотя, че-то я не подумал, это design flaw стека TCP/IP вообще! Они не придумали обратную инкапсуляцию! Добавление от 05.06.2010 00:56: Хммм....судя по комментариям, таки: "-t nat -A OUTPUT -j DNAT" могут спасти отца русской демократии, т.к. nat_output - это единственный чейн, который проходится до routing decision. |
| 11. SuSt, 05.06.2010 10:57 |
KB На лоре еще советовали NATить локальные пакеты, тоже пока не проверял Кстати, да. Очень может быть. Например, для OpenVZ-шных контейнеров, использующих venet - это самый простой способ зарутить исходящие пакеты через нужный реальный интерфейс (в случае, если их несколько). Да как-то не хочется от ванильного ядра отходить При желании можно скомпилировать отдельный модуль к ядру, не пересобирая ядро целиком. И, по-моему, этот модуль даже не придется потом трогать после обновлений ядра, насколько я помню. -Sorcerer- могут спасти отца русской демократии Дык, на лоре советовали делать SNAT, а не DNAT. |
| 12. -Sorcerer-, 05.06.2010 11:02 |
SuSt Дык, на лоре советовали делать SNAT, а не DNAT. И что-то мне подсказывает, что они правы. Таргет SNAT поддерживается только в POSTROUTING, по понятным причинам. Ожидаемый уровень знаний на ЛОРе. |
| 13. arvidjaar, 11.06.2010 22:26 |
-Sorcerer- Routing decision принимается до выхода пакета если его origin - localhost Вот только OUTPUT отрабатывает до routing decision KB Маркировка и маршрутизация по ней в случае локального трафика точно работают: код:Так что проблема в чем то другом. |
| 14. SuSt, 12.06.2010 13:07 |
arvidjaar KB Ну, коллеги, вы меня, черт возьми, заинтриговали! Причем настолько сильно, что я не поленился разобраться и проверить все своими руками. Если совсем кратко: на ЛОР-е ответили верно, нужно было сделать еще и SNAT. Метки в "mangle, OUTPUT" работают. Только ядро при этом не может "понять", какой src ip назначить исходящему пакету. Собственно, в этом ему и может помочь добавление правила в nat, POSTROUTING. Теперь по порядку. Решил воспроизвести у себя на стенде эксперимент, описанный тов. arvidjaar. Исходные данные: код:root@shelf:~# ifconfig Начинаем эксперимент, повторяем действия arvidjaar-а: код:root@shelf:~# iptables -t mangle -A OUTPUT -d 77.88.21.3 -p icmp -j MARK --set-mark 1196 На всякий случай проверяем, что маршрутизация выставлена именно так, как нам хочется: код:root@shelf:~# ip rule ls Пробуем пинговать. Не пингуется. Пытаемся разобраться где же "застрял" пакет, и с удивлением обнаруживаем icmp-ответ ... на интерфейсе обратной петли ("lo")! код:root@shelf:~# ping 77.88.21.3 -c1 Фигня какая-то... Ладно, продолжаем эксперимент. Уберем вообще из таблицы main шлюз по умолчанию, а таблицу "yandex" передвинем таким образом, чтобы она шла после таблицы main: код:root@shelf:~# ip rule ls Вот оно как, Михалыч... казалось бы, метки действительно не работают. При отсутсвии default gw система вообще не смогла никуда направить этот пакет. Но мы не сдаемся! Вернем на место default gw, уберем правило "yandex" (то есть вернем все к исходному состоянию, как было до начала эксперимента) и пропишем правило SNAT-а: код:root@shelf:~# iptables -t nat -A POSTROUTING -p icmp -d 77.88.21.3 -j SNAT --to-source 192.168.56.2 Что мы видим? Пакет приходит на правильный интерфейс, но уходит с "неправильного". Ну да, логично. Ведь src ip мы ему подменили, а маршрут ядро выбрало в соответствии с default gw. Теперь вернем на место правило для маршрута на основе метки и повторим пинг: код:root@shelf:~# ip rule add fwmark 1196 lookup yandex Ура! Победа! Пакет и ушел с правильно интерфейса, и вернулся на правильный интерфейс! Для бОльшей убедительности проверим трассировки: код:root@shelf:~# traceroute -I 77.88.21.3 Пакеты идут разными маршрутами, что и требовалось доказать. P.S. Даааа... Все-таки ядро Linux для меня - загадка. За это сообщение сказали спасибо: arvidjaar |
| 15. arvidjaar, 12.06.2010 19:03 |
SuSt Метки в "mangle, OUTPUT" работают. Только ядро при этом не может "понять", какой src ip назначить исходящему пакету. Да, я это предполагал, но смоделировать не на чем было. Все-таки ядро Linux для меня - загадка. Ядро Linux здесь на самом деле не при чем - те же самые проблемы возникают на любой multihome системе. При отправке пакета система должна решить две задачи - выбрать адрес отправителя и интерфейс, через который уйдет пакет. Эти две задачи достаточно независимы. И, к сожалению, их взаимодействие достаточно плохо документировано в тех системах, с которыми я сталкивался (Solaris, Windows). Есть статьи, но их еще надо найти ... В любом случае спасибо за исчерпывающий разбор полетов |
| 16. kononets, 12.06.2010 20:55 |
<<На всякий случай проверяем, что маршрутизация выставлена именно так, как нам хочется: код: Пробуем пинговать. Не пингуется.>> имхо можно добавить кроме маршрута по умолчанию ещё и маршрут в подсеть, указав предпочтительный src address (для меня очевидным решением представляется продублировать таблицу main, заменив только маршрут по умолчанию): код:192.168.56.0/24 dev eth1 scope link src 192.168.56.2 имхо не помешает после каждой модификации таблиц маршрутов также сбрасывать кэш маршрутов, ip route flush cache |
| 17. SuSt, 13.06.2010 17:36 |
kononets Уже после того, как я написал свой предыдущий пост, я подумал о том же самом. И попробовал сделать так, как Вы говорите. Результат от этого не меняется. То есть все остается точно так же, как я уже описал. Даже если явно указывать "proto kernel src 192.168.56.2". Насчет "ip route flush cache" - я это тоже делал. На самом деле я повторял все перечисленные эксперименты ДВА раза, по второму разу после каждой операции на всякий случай давал команду "flush cache". Конечный результат от этого, опять же, не изменился. Поэтому я не стал об этом писАть, чтобы не загромождать итак немаленькие выкладки. И да, если кому интересно. Упражнялся я на последнем стабильном Debian-е (который 5.0.4), запущенном внутри VirtualBox-а (+KVM). |
| 18. SuSt, 14.06.2010 15:15 |
arvidjaar Поразмышляв немного на досуге, я понял почему так происходит. Приложение может заbind-иться либо на конкретный интерфейс/адрес, либо на "0.0.0.0" (все интерфейсы). Во втором случае при отправке пакета ядро может выбрать src ip только в том случае, если маршрут до destination присутствует в таблице "main", и баста. Все прочие таблицы "не канают". Вот и ответ. А "изврат" с SNAT это только подтверждает. То есть, приложение отправляет пакет с того интерфейса, для которого найдет маршрут в таблице main (и ни в какой другой). В данном случае это будет default gw. А потом уже начинается все это шаманство с метками. И после того как iproute1 "отпустит" пакет, за него берется iproute2. И тут его "обманным путем" выкинут через другой интерфейс, да еще и замаскарадят. Поэтому, в общем, KB применил самый правильный способ решения задачи, на самом деле. Осталось только ради интереса выяснить что будет, если в таблице main будут присутствовать два разных default gw. |
| 19. kononets, 14.06.2010 22:32 |
непонятно, почему traceroute разными путями пошёл, ведь особый маршрут задан только для конечного IP. |
| 20. arvidjaar, 15.06.2010 07:13 |
SuSt Приложение может заbind-иться либо на конкретный интерфейс/адрес, либо на "0.0.0.0" (все интерфейсы). Во втором случае при отправке пакета ядро может выбрать src ip только в том случае, если маршрут до destination присутствует в таблице "main", и баста. ??? А что, если выбрана другая таблица, пакет уходит вообще без обратного адреса? Вообще-то раньше я был уверен, что по умолчанию выбирается IP адрес того интерфейса, через который отсылается пакет. Похоже, играют роль какие-то другие факторы - вот их и было бы интересно понять. Кстати, а если вместо SNAT просто указать в таблице src код:? Результат должен быть тот же. Если нет - это повод задуматьсяip route add default via 192.168.56.1 src 192.168.56.2 table yandex |
| 21. SuSt, 15.06.2010 09:03 |
kononets непонятно, почему traceroute разными путями пошёл, ведь особый маршрут задан только для конечного IP. Ну "здравствуйте, я Ваша тётя!". arvidjaar А что, если выбрана другая таблица, пакет уходит вообще без обратного адреса? Он просто не уходит. Результат должен быть тот же. Я же уже написал, что этот вариант тоже попробовал. Посмотрите пожалуйста повнимательнее. |
| 22. kononets, 15.06.2010 12:16 |
SuSt у меня есть маленький шлюз, на нем поднят vpn канал посредством cisco vpn клиента. маршрут по умолчанию направлен в vpn канал. есть отдельная таблица маршрутов, чтобы шлюз принимал соединения и мог общаться с локальной подсетью, в которой все маршруты точно такие, какие присутствуют в main до того как клиент поднимает vpn и впишет туда свои маршруты (lo, локальный интерфейс и подсеть, и локальный маршрут по умолчанию). если я заверну в ту самую отдельную таблицу трафик для 77.88.21.3, то TTL в пинге на 77.88.21.3 меняется, а traceroute -I все равно как шел, так и идет через vpn канал. UPD повторные тесты показали, что при выполнении traceroute -I трафик появляется на локальном интерфейсе, но с src address vpn-канала. видимо, cisco vpn клиент как-то манипулирует трафиком. |
| 23. SuSt, 15.06.2010 12:38 |
kononets в которой все маршруты точно такие, какие присутствуют в main до того как клиент поднимает vpn и впишет туда свои маршруты Хм... интересно, а зачем? Нельзя было просто дописать статические маршруты до локальной сети прямо в main? Ну Вам, конечно, виднее. Но я не очень понимаю постановки Вашей задачи. а traceroute -I все равно как шел, так и идет через vpn канал. Да потому что src ip трассировочного пакета остался прежним. А промежуточные узлы кидают сообщение "TTL exceeded in-transit" на тот адрес, с которого пришел пакет с "протухшим" TTL-ем. |
| 24. kononets, 15.06.2010 12:43 |
SuSt Да потому что src ip трассировочного пакета остался прежним. А промежуточные узлы кидают сообщение "TTL exceeded in-transit" на тот адрес, с которого пришел пакет с "протухшим" TTL-ем. разумеется. но если я пингую, src address устанавливается "правильный". а для traceroute "неправильный" Добавление от 15.06.2010 12:46: SuSt |
| 25. SuSt, 15.06.2010 12:46 |
разумеется. но если я пингую, src address устанавливается "правильный". а для traceroute "неправильный" А это нужно еще проверить. Вы tcpdump-ом смотрели? Ну и плюс к тому, можно запустить traceroute с параметром "-s адрес_источника", и ping с параметром "-I адрес_источника", чтобы явно указать с какого интерфейса отправлять пакет. Тогда все должно стать предельно прозрачно. |
| 26. kononets, 15.06.2010 12:57 |
tcpdump-ом смотрел, как иначе узнать-то. если запускаю код:, то source address и интерфейс выбирается "правильный" и трассировка показывает "правильный" маршрут. если без -i ra0, то назначается "неправильный" адрес, но трафик traceroute появляется на "правильном" интерфейсе, и на выводе traceroute маршрут проходит "неправильно", то есть через vpn-канал.traceroute -i ra0 -I 77.88.21.3 код: |
| 27. SuSt, 15.06.2010 14:00 |
kononets Я окончательно запутался. "Правильный" - "неправильный"... Нельзя ли целиком выложить сюда таблицы все маршрутизации и ifconfig, или они секретные? Как я сейчас это себе представляю. Возьмем ситуацию, когда не задаем параметр "-i ra0" у traceroute. Тогда он (traceroute) будет искать в таблице main маршрут до 77.88.21.3. И он его найдет, поскольку в таблице main есть default gw, который "смотрит" в тоннель. Поэтому согласно моим представлениям, он должен присвоить пакету src ip того интерфейса, который фигурирует в таблице main в одной строчке с "0.0.0.0". Я прав? |
| 28. kononets, 15.06.2010 20:30 |
шлюз за NATом. интерфейсы: код: маршруты и политики: код: запускаем ping код:при этом на выводе tcpdump ничего нет. TTL равен 53.# ping -c 2 77.88.21.3 запускаем traceroute: код: делаем код:запускаем ping# ip ru a to 77.88.21.3 table T1 код:TTL теперь равен 51. на выводе tcpdump видим:# ping -c 2 77.88.21.3 код: запускаем traceroute код:как говорится, найдите 10 отличий от предыдущего результата.# traceroute -I 77.88.21.3 на выводе tcpdump имеем: код:и это на интерфейсе ra0, которому присвоен адрес 192.168.254.227129.16.143.20 > 77.88.21.3: ICMP echo request, id 45710, seq 1, length 18 |
| 29. SuSt, 16.06.2010 13:08 |
kononets Интересно. Во всей этой истории лично мне больше всего непонятно, куда делись "лишние" два хопа, если пинговать напрямую (не через тоннель). Я могу сделать только одно предположение. Вполне возможно, что маршрутизатор "с той стороны" (который у провайдера) сам искусственно увеличивает TTL для пакетов, которые заворачиваются внутрь тоннеля. Циски вообще иногда любят мудрить с TTL-ями сами по себе, я замечал такое. Если уж попытаться вообще-внатуре-конкретно разобраться, что называется, "на интерес", я бы еще попробовал запустить tcpdump с параметрами "-e -vv" (в дополнение к уже имеющимся) и посмотрел бы MAC-адреса кадров, соответствующих приходящим от провайдера пакетов. Я не очень хорошо понимаю, как работают цисковские тоннели. Но если MAC-адреса "через тоннель" и "напрямую" будут разными, то tcpdump это покажет. Еще можно попробовать сделать что-нибудь вроде "ping -t 1 129.16.144.11" как через тоннель, так и напрямую. И посмотреть будет ли разница в ответах. Ну и Вы все-таки утаили таблицу main. |
| 30. kononets, 16.06.2010 14:06 |
не утаил, она там. пожалуйста, вот она отдельно: код:# ip r l |
| 31. SuSt, 16.06.2010 15:21 |
kononets Да-да, я проглядел. Виноват. Ну дык, Вы только подтвердили мои предположения. То есть все происходит как раз так, как я и говорил уже ранее. Ваш последний пример: на выводе tcpdump имеем: код:и это на интерфейсе ra0, которому присвоен адрес 192.168.254.227IP (tos 0x0, ttl 3, id 45718, offset 0, flags [none], proto ICMP (1), length 38) Все логично. Несмотря на то, что Вы при помощи iproute2 "завернули" трафик на 77.88.21.3 через 192.168.254.238, default gw в таблице main все равно как был 129.16.143.20, так и остался. Поэтому traceroute без параметра "-s" по-прежнему привязывается к тому адресу, для которого определен default gw в таблице main. Вот трассировка и не изменилась. Если Вы в дополнение к "ip ru a to 77.88.21.3 table T1", например, сделаете "iptables -t nat -A POSTROUTING -d 77.88.21.3 -j SNAT --to-source 192.168.254.227", то увидите, что трассировка изменилась. Тот же самый эффект произойдет, если вы запустите "traceroute -s 192.168.254.227 -I 77.88.21.3". |
| 32. kononets, 16.06.2010 18:29 |
а почему ping на два переходе длинее через vpn-канал? я не думаю, что где-то по пути задается увеличенный TTL, скорее всего маршрут действительно длиннее. но точно не знаю. |
| 33. -Sorcerer-, 17.06.2010 02:05 |
arvidjaar Вот только OUTPUT отрабатывает до routing decision С фига? Как ядро знает, что пакет локальный-то? Только таблица nat отрабатывает до. Иначе на бриджах все пакеты будут локальными. Ну и по фактеге есть проблемы. Например: раутинг решает только про интерфейс. Сорс адрес пакета берется из байнда на уровне аппликации, вмешаться в сорс можно только через nat. |
| 34. SuSt, 17.06.2010 08:40 |
kononets а почему ping на два переходе длинее через vpn-канал? Не длиннее, а, наоборот, короче. Коль скоро у входящего пакета TTL больше, значит хопов он прошел как раз таки меньше. И эти два хопа - 192.168.254.238 и какой-нибудь промежуточный между 192.168.254.238 и 129.16.144.11. Когда пакет идет в тоннеле, он по этим хопам не проходит. |
| 35. kononets, 17.06.2010 10:55 |
SuSt да, я неправильно сформулировал. да, один хоп прибавляется за счет NAT шлюза. в остальном маршруты просто разные. меня удивляет, что для ping и для traceroute выбираются разные src address -Sorcerer- Вот только OUTPUT отрабатывает до routing decision С фига? http://www.netfilter.org/documentation/HOWTO//netfil…OWTO-3.html#ss3.2 |
| 36. SuSt, 17.06.2010 11:08 |
kononets меня удивляет, что для ping и для traceroute выбираются разные src address Хороший вопрос! Я не знаю на него ответа. Попробую в выходные еще поковыряться на своем домашнем десктопе с виртуалками. Действительно, очень загадочно. |
| 37. SuSt, 18.06.2010 10:39 |
kononets что для ping и для traceroute выбираются разные src address Видимо, ответ на этот вопрос сможет дать только анализ исходных кодов (ака "сырцов") утилит ping и traceroute. Другого способа я не вижу. И вот почему. Исходные данные. У меня на работе есть Linux-маршрутизатор на основе последнего стабильного Debian (ядро 2.6.26). Это обычный PC, но на борту у него 12 интерфейсов, из которых 4 - это аплинки до провайдеров. Таблицы маршрутизации там сложные, но никакой динамики (как то OSPF, BGP и т.п.) там нет. То есть маршрутизация на 100% статическая, но с использованием iproute2 и кучей разных хитропопых критериев выбора маршрута, в том числе и по меткам. Далее. В таблице main этого роутера начисто отсутствует default gateway. Вообще. Он там просто не нужен. Захожу на эту машину, начинаю свои бесчеловечные эксперименты. Но сперва выдержки из мануалов по ping и traceroute. цитата (man ping): цитата (man traceroute): Пока понятно? То бишь, у traceroute предусмотрены два разных параметра: имя интерфейса и src ip задаются по отдельности разными ключами командной строки. А у ping все свалено "в одну кучу". Ключом "-I" можно задать как src ip, так и имя интерфейса. По крайней мере, так заявлено в документации. Итак, самое интересное. Повторяю, записи "default gateway" в таблице main НЕТ! Вместо него используются правила типа "from x.x.x.x lookup провайдер1", "from y.y.y.y lookup провайдер2", и так далее. Что же мы имеем (в целях конспирации третий октет я "засекретил")? код:gw1:~# ifconfig eth8 Если все еще не совсем ясно, в чем прикол, поясню. Для traceroute пофигу, то ли мы задали src ip, то ли интерфейс: он и в том, и в другом случае отработал успешно. А вот ping справился с задачей только в том случае, если мы указываем src ip. Обратите внимание, что если мы указываем для ping интерфейс, то он корректно ресолвит его (интерфейса) адрес. Только вот пакеты все равно никуда не уходят. А tcpdump показывает "host unreachable" не где-нибудь, а на "lo"-интерфейсе. Ну чо, кому не слабО разобраться в исходниках? У меня, боюсь, квалификации не хватит. За это сообщение сказали спасибо: compro |
| 38. -Sorcerer-, 20.06.2010 00:56 |
kononets Ну и расскажите мне, коллега как отработает правило: iptables -A OUTPUT -o eth1 -j DROP Если output interface еще неизвестен? |
| 39. SuSt, 20.06.2010 10:42 |
-Sorcerer- Если output interface еще неизвестен? В таблице "filter" OUTPUT-интерфейс уже известен. А kononets говорил про таблицу "mangle". Учите матчасть (http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#TRAVERSINGOFTABLES) по iptables. |
| 40. arvidjaar, 20.06.2010 10:45 |
-Sorcerer- Ну и расскажите мне, коллега как отработает правило: iptables -A OUTPUT -o eth1 -j DROP Если output interface еще неизвестен? По правилам Таблица mangle выполняется до, таблица filter (куда ваша команда правило и добавляет) - после routing. В самом начале речь шла именно о маркировке пакетов. Это выполняется в mangle. |
| 41. SuSt, 20.06.2010 10:55 |
Вот еще одна очень красивая схема. Мне понравилась. Всё очень наглядно представлено. http://upload.wikimedia.org/wikipedia/commons/3/37/N…r-packet-flow.svg |
| 42. arvidjaar, 20.06.2010 11:46 |
kononets меня удивляет, что для ping и для traceroute выбираются разные src address У меня - одинаковые код: Никаких игр с iptables нет. Так что есть какие-то отличия в конфигурации. Кстати, заодно стало понятно, почему использование fwmark не (всегда) работает для локальных исходящих соединений. Решение о выборе локального адреса - по крайней мере, для ICMP - принимается до генерации каких-либо пакетов (при выполнении connect()). Соотвественно, привесить mark в этот момент не к чему и используются таблицы по умолчанию. |
| 43. -Sorcerer-, 20.06.2010 13:16 |
SuSt В таблице "filter" OUTPUT-интерфейс уже известен. Как он "известен" если routing decision еще не было? В таблице "filter" OUTPUT-интерфейс уже известен. А kononets говорил про таблицу "mangle". Если че, это говорил я, еще на первой странице. Но смех конечно не в этом, а в том, что для output делают route два раза, как тут выяснилось. Т.е. первый пост вообще - пальцем в небо. Добавление от 20.06.2010 13:18: arvidjaar Добавление от 20.06.2010 14:00: arvidjaar |
| 44. kononets, 20.06.2010 14:46 |
arvidjaar У меня - одинаковые ... Никаких игр с iptables нет. Так что есть какие-то отличия в конфигурации. у меня стоит vpn-канал, который поднимается патченным cisco vpn клиентом. непатченный клиент блокирует трафик с хоста в локальную подсеть, если этого требует vpn-сервер (который требует, а мне так не надо). мне кажется, что именно в этом кроется причина, но у меня не хватит знаний разобраться в исходном коде. |
| 45. arvidjaar, 20.06.2010 15:27 |
kononets vpn-канал, который поднимается патченным cisco vpn клиентом ... мне кажется, что именно в этом кроется причина Там есть модуль ядра или это целиком пользовательское приложение? |
| 46. -Sorcerer-, 20.06.2010 15:29 |
kononets у меня стоит vpn-канал, который поднимается патченным cisco vpn клиентом. непатченный клиент блокирует трафик с хоста в локальную подсеть, если этого требует vpn-сервер А? vpnc ничего нигде не блокирует. Добавление от 20.06.2010 15:29: arvidjaar |
| 47. kononets, 20.06.2010 15:30 |
arvidjaar Там есть модуль ядра или это целиком пользовательское приложение? совершенно верно, есть модуль ядра. это проприетарный клиент для cisco 3000 series vpn concentrator Добавление от 20.06.2010 15:43: -Sorcerer- |
| 48. -Sorcerer-, 20.06.2010 15:52 |
kononets есть модуль ядра У меня есть подозрения, что сорс раутинг работает "неправильно" только для встроенных в ядро функций, а если модулем - все ок. |
| URL: | http://forum.ixbt.com/topic.cgi?id=76:9522 |