ShyLion Posted April 6, 2016 · Report post Добрый день. Есть сервер на CentOS, в него в два разных сетевых интерфейса приходят одинаковые по всем параметрам мультикаст потоки - одинаковый соурс и одинаковые группы. Контент тоже один и тот-же. К сожалению обрабатывающее ПО astra при таком раскладе не может делать автоматическое резервирование, потому что до уровня приложений оба потока приходят обезличенными - без привязки к интерфейсу, этот вопрос обсуждался с разработчиком ПО. Пришла в голову идея прогнать один из потоков через NAT, и подменить в нем например адрес источника, на любой фиксированый, скажем 1.1.1.1. Пошукал по инету, везде про SNAT речь идет в разрезе POSTROUTING, это, как я понимаю, траффик, который уже минует локальный хост, а мне трафик нужно скормить локальному приложению. Какие будут мысли? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted April 6, 2016 · Report post ShyLion Если через POSTROTING, то заводите интерфейс в netns, там делаете над ним NAT, из netns-а выпускаете трафик в veth и пусть приложение слушает на veth. А вообще: man iptables-extensions ... SNAT This target is only valid in the nat table, in the POSTROUTING and INPUT chains Так что банальный SNAT в INPUT-е вам должен помочь Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted April 6, 2016 · Report post Заюзать msd, хотя бы лайт, в качестве прокси для сбора с разных интерфейсов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted April 6, 2016 · Report post Так что банальный SNAT в INPUT-е вам должен помочь Не помогает. Приложение юзает raw сокет, возможно из-за этого. Пробовал и DNAT - транслировать адрес группы, фигушки. Может быть мультик в НАТ вообще не попадает никак? Заюзать msd, хотя бы лайт, в качестве прокси для сбора с разных интерфейсов. Он в UDP мультиком умеет отдавать? Ну и от приложения как я понимаю не зависит, проблема в ядре. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Danila Posted April 6, 2016 · Report post Так что банальный SNAT в INPUT-е вам должен помочь Не помогает. Приложение юзает raw сокет, возможно из-за этого. Пробовал и DNAT - транслировать адрес группы, фигушки. Может быть мультик в НАТ вообще не попадает никак? Заюзать msd, хотя бы лайт, в качестве прокси для сбора с разных интерфейсов. Он в UDP мультиком умеет отдавать? Ну и от приложения как я понимаю не зависит, проблема в ядре. Быть может сгодится RAWSNAT из xtables-addons? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Mystray Posted April 6, 2016 · Report post Не помогает. Приложение юзает raw сокет, возможно из-за этого. на крайний случай можно попробовать stateless nat средствами tc: tc qdisc add dev eth2 ingress handle ffff tc filter add dev eth2 parent ffff: protocol ip prio 10 u32 match ip src 192.168.0.250/32 action nat egress 192.168.0.250/32 1.1.1.1 Но не уверен, что оно раньше rawsocket отрабатывает, надо искать схему прохождения. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted April 6, 2016 · Report post Спасибо, поковыряю. В актуальных версиях xtables-addons выпилили RAWxNAT, блин. Попробую 2.3 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted April 6, 2016 · Report post Блин, начинаются какие-то линуксовые пляски с бубном. Эта хрень хочет пакет xtables. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted April 6, 2016 · Report post tc filter add dev eth2 parent ffff: protocol ip prio 10 u32 match ip src 192.168.0.250/32 action nat egress 192.168.0.250/32 1.1.1.1 А вот занатить dst адрес можно таким образом? Т.е. поменять адрес группы. Работа IGMP не интересует, траффик льется без подписки. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted April 6, 2016 · Report post Вроде что-то получается: # ifconfig ten0 promisc # tc qdisc add dev ten0 ingress # tc filter add dev ten0 parent ffff: protocol ip prio 10 u32 match ip dst 224.1.13.18/32 action nat ingress 224.1.13.18/32 237.1.13.18 # /usr/local/bin/astra --analyze 'udp://ten0@237.1.13.18:1234#pnr=7022' Apr 06 17:44:22: INFO: Starting Astra 4.4.98 Apr 06 17:44:22: INFO: PAT: tsid: 0 Apr 06 17:44:22: INFO: PAT: pid: 7000 PMT pnr: 7022 Apr 06 17:44:22: INFO: PAT: crc32: 0x61FBC72E Apr 06 17:44:22: INFO: PMT: pnr: 7022 Apr 06 17:44:22: INFO: PMT: pid: 7001 PCR Apr 06 17:44:22: INFO: VIDEO: pid: 7001 type: 0x1B Apr 06 17:44:22: INFO: AUDIO: pid: 7002 type: 0x04 Apr 06 17:44:22: INFO: AUDIO: Language: eng Apr 06 17:44:22: INFO: PMT: crc32: 0x3F64FDA4 Apr 06 17:44:23: INFO: Bitrate: 1568 Kbit/s Apr 06 17:44:24: INFO: Bitrate: 1909 Kbit/s Apr 06 17:44:25: INFO: Bitrate: 2076 Kbit/s Apr 06 17:44:26: INFO: Bitrate: 1944 Kbit/s ^CApr 06 17:44:26: INFO: [main] exit без "ifconfig ten0 promisc" не шел траффик Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Danila Posted April 7, 2016 · Report post Вроде что-то получается: # ifconfig ten0 promisc # tc qdisc add dev ten0 ingress # tc filter add dev ten0 parent ffff: protocol ip prio 10 u32 match ip dst 224.1.13.18/32 action nat ingress 224.1.13.18/32 237.1.13.18 # /usr/local/bin/astra --analyze 'udp://ten0@237.1.13.18:1234#pnr=7022' Apr 06 17:44:22: INFO: Starting Astra 4.4.98 Apr 06 17:44:22: INFO: PAT: tsid: 0 Apr 06 17:44:22: INFO: PAT: pid: 7000 PMT pnr: 7022 Apr 06 17:44:22: INFO: PAT: crc32: 0x61FBC72E Apr 06 17:44:22: INFO: PMT: pnr: 7022 Apr 06 17:44:22: INFO: PMT: pid: 7001 PCR Apr 06 17:44:22: INFO: VIDEO: pid: 7001 type: 0x1B Apr 06 17:44:22: INFO: AUDIO: pid: 7002 type: 0x04 Apr 06 17:44:22: INFO: AUDIO: Language: eng Apr 06 17:44:22: INFO: PMT: crc32: 0x3F64FDA4 Apr 06 17:44:23: INFO: Bitrate: 1568 Kbit/s Apr 06 17:44:24: INFO: Bitrate: 1909 Kbit/s Apr 06 17:44:25: INFO: Bitrate: 2076 Kbit/s Apr 06 17:44:26: INFO: Bitrate: 1944 Kbit/s ^CApr 06 17:44:26: INFO: [main] exit без "ifconfig ten0 promisc" не шел траффик Постарайтесь отвыкать от ifconfig, ибо deprecated. ip link set dev ten0 promisc on Не помогает. Приложение юзает raw сокет, возможно из-за этого. на крайний случай можно попробовать stateless nat средствами tc: tc qdisc add dev eth2 ingress handle ffff tc filter add dev eth2 parent ffff: protocol ip prio 10 u32 match ip src 192.168.0.250/32 action nat egress 192.168.0.250/32 1.1.1.1 Но не уверен, что оно раньше rawsocket отрабатывает, надо искать схему прохождения. О сколько нам открытий чудных... В закладочки. :) Спасибо. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted April 7, 2016 · Report post Не помогает. Приложение юзает raw сокет, возможно из-за этого. на крайний случай можно попробовать stateless nat средствами tc: tc qdisc add dev eth2 ingress handle ffff tc filter add dev eth2 parent ffff: protocol ip prio 10 u32 match ip src 192.168.0.250/32 action nat egress 192.168.0.250/32 1.1.1.1 Но не уверен, что оно раньше rawsocket отрабатывает, надо искать схему прохождения. Этот вариант заработал, спасибо! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted April 7, 2016 · Report post Он в UDP мультиком умеет отдавать? Нет, только хттп. Ну и от приложения как я понимаю не зависит, проблема в ядре. Далеко не факт. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Mystray Posted April 8, 2016 · Report post А вот занатить dst адрес можно таким образом? Т.е. поменять адрес группы. Работа IGMP не интересует, траффик льется без подписки. Как-то так? tc filter add dev eth2 parent ffff: protocol ip prio 10 u32 match ip dst 233.130.8.100/32 action nat ingress 233.130.8.100/32 234.1.1.1 Документации не так много по этой магии :( Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted April 8, 2016 · Report post Как-то так? Я выше написал что все получилось. Спасибо. ЗЫ: обновил линух и напроч перестал приниматься мультикаст........ переустанавливаю сервер заново, блин. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted April 8, 2016 · Report post ShyLion вы ядро обновили или дистр? может просто rp_filter включился? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted April 8, 2016 · Report post ShyLion вы ядро обновили или дистр? может просто rp_filter включился? тупо yum update прогнал rp_filter первым делом проверял плясал с бубном пару часов, фаервол выключал и т.п. щас заново все проинсталил - все работает, конфиги те-же возможно какой-то пакет че-то испортил тогда, библиотеку какую не ту поправил, хз yum update сразу прогнал после инсталяции и сетевых настроек CentOS 7 minimal Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...