ShyLion Posted April 6, 2016 Posted April 6, 2016 Добрый день. Есть сервер на CentOS, в него в два разных сетевых интерфейса приходят одинаковые по всем параметрам мультикаст потоки - одинаковый соурс и одинаковые группы. Контент тоже один и тот-же. К сожалению обрабатывающее ПО astra при таком раскладе не может делать автоматическое резервирование, потому что до уровня приложений оба потока приходят обезличенными - без привязки к интерфейсу, этот вопрос обсуждался с разработчиком ПО. Пришла в голову идея прогнать один из потоков через NAT, и подменить в нем например адрес источника, на любой фиксированый, скажем 1.1.1.1. Пошукал по инету, везде про SNAT речь идет в разрезе POSTROUTING, это, как я понимаю, траффик, который уже минует локальный хост, а мне трафик нужно скормить локальному приложению. Какие будут мысли? Вставить ник Quote
s.lobanov Posted April 6, 2016 Posted April 6, 2016 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
Ivan_83 Posted April 6, 2016 Posted April 6, 2016 Заюзать msd, хотя бы лайт, в качестве прокси для сбора с разных интерфейсов. Вставить ник Quote
ShyLion Posted April 6, 2016 Author Posted April 6, 2016 Так что банальный SNAT в INPUT-е вам должен помочь Не помогает. Приложение юзает raw сокет, возможно из-за этого. Пробовал и DNAT - транслировать адрес группы, фигушки. Может быть мультик в НАТ вообще не попадает никак? Заюзать msd, хотя бы лайт, в качестве прокси для сбора с разных интерфейсов. Он в UDP мультиком умеет отдавать? Ну и от приложения как я понимаю не зависит, проблема в ядре. Вставить ник Quote
Danila Posted April 6, 2016 Posted April 6, 2016 Так что банальный SNAT в INPUT-е вам должен помочь Не помогает. Приложение юзает raw сокет, возможно из-за этого. Пробовал и DNAT - транслировать адрес группы, фигушки. Может быть мультик в НАТ вообще не попадает никак? Заюзать msd, хотя бы лайт, в качестве прокси для сбора с разных интерфейсов. Он в UDP мультиком умеет отдавать? Ну и от приложения как я понимаю не зависит, проблема в ядре. Быть может сгодится RAWSNAT из xtables-addons? Вставить ник Quote
Mystray Posted April 6, 2016 Posted April 6, 2016 Не помогает. Приложение юзает 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
ShyLion Posted April 6, 2016 Author Posted April 6, 2016 Спасибо, поковыряю. В актуальных версиях xtables-addons выпилили RAWxNAT, блин. Попробую 2.3 Вставить ник Quote
ShyLion Posted April 6, 2016 Author Posted April 6, 2016 Блин, начинаются какие-то линуксовые пляски с бубном. Эта хрень хочет пакет xtables. Вставить ник Quote
ShyLion Posted April 6, 2016 Author Posted April 6, 2016 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
ShyLion Posted April 6, 2016 Author Posted April 6, 2016 Вроде что-то получается: # 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
Danila Posted April 7, 2016 Posted April 7, 2016 Вроде что-то получается: # 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
ShyLion Posted April 7, 2016 Author Posted April 7, 2016 Не помогает. Приложение юзает 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
Ivan_83 Posted April 7, 2016 Posted April 7, 2016 Он в UDP мультиком умеет отдавать? Нет, только хттп. Ну и от приложения как я понимаю не зависит, проблема в ядре. Далеко не факт. Вставить ник Quote
Mystray Posted April 8, 2016 Posted April 8, 2016 А вот занатить 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
ShyLion Posted April 8, 2016 Author Posted April 8, 2016 Как-то так? Я выше написал что все получилось. Спасибо. ЗЫ: обновил линух и напроч перестал приниматься мультикаст........ переустанавливаю сервер заново, блин. Вставить ник Quote
s.lobanov Posted April 8, 2016 Posted April 8, 2016 ShyLion вы ядро обновили или дистр? может просто rp_filter включился? Вставить ник Quote
ShyLion Posted April 8, 2016 Author Posted April 8, 2016 ShyLion вы ядро обновили или дистр? может просто rp_filter включился? тупо yum update прогнал rp_filter первым делом проверял плясал с бубном пару часов, фаервол выключал и т.п. щас заново все проинсталил - все работает, конфиги те-же возможно какой-то пакет че-то испортил тогда, библиотеку какую не ту поправил, хз yum update сразу прогнал после инсталяции и сетевых настроек CentOS 7 minimal Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.