Jump to content

Recommended Posts

Posted

Добрый день.

Есть сервер на CentOS, в него в два разных сетевых интерфейса приходят одинаковые по всем параметрам мультикаст потоки - одинаковый соурс и одинаковые группы. Контент тоже один и тот-же. К сожалению обрабатывающее ПО astra при таком раскладе не может делать автоматическое резервирование, потому что до уровня приложений оба потока приходят обезличенными - без привязки к интерфейсу, этот вопрос обсуждался с разработчиком ПО.

Пришла в голову идея прогнать один из потоков через NAT, и подменить в нем например адрес источника, на любой фиксированый, скажем 1.1.1.1.

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

Какие будут мысли?

Posted

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-е вам должен помочь

Posted

Так что банальный SNAT в INPUT-е вам должен помочь

 

Не помогает. Приложение юзает raw сокет, возможно из-за этого.

Пробовал и DNAT - транслировать адрес группы, фигушки.

Может быть мультик в НАТ вообще не попадает никак?

 

Заюзать msd, хотя бы лайт, в качестве прокси для сбора с разных интерфейсов.

 

Он в UDP мультиком умеет отдавать?

Ну и от приложения как я понимаю не зависит, проблема в ядре.

Posted

Так что банальный SNAT в INPUT-е вам должен помочь

 

Не помогает. Приложение юзает raw сокет, возможно из-за этого.

Пробовал и DNAT - транслировать адрес группы, фигушки.

Может быть мультик в НАТ вообще не попадает никак?

 

Заюзать msd, хотя бы лайт, в качестве прокси для сбора с разных интерфейсов.

 

Он в UDP мультиком умеет отдавать?

Ну и от приложения как я понимаю не зависит, проблема в ядре.

Быть может сгодится RAWSNAT из xtables-addons?

Posted

Не помогает. Приложение юзает 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 отрабатывает, надо искать схему прохождения.

Posted

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 не интересует, траффик льется без подписки.

Posted

Вроде что-то получается:

 

# 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" не шел траффик

Posted

Вроде что-то получается:

 

# 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 отрабатывает, надо искать схему прохождения.

О сколько нам открытий чудных...

В закладочки. :) Спасибо.

 

 

Posted

Не помогает. Приложение юзает 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 отрабатывает, надо искать схему прохождения.

 

Этот вариант заработал, спасибо!

Posted
Он в UDP мультиком умеет отдавать?

Нет, только хттп.

 

Ну и от приложения как я понимаю не зависит, проблема в ядре.

Далеко не факт.

Posted

 

А вот занатить 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

 

Документации не так много по этой магии :(

Posted

Как-то так?

 

Я выше написал что все получилось. Спасибо.

 

ЗЫ: обновил линух и напроч перестал приниматься мультикаст........ переустанавливаю сервер заново, блин.

Posted

ShyLion

вы ядро обновили или дистр? может просто rp_filter включился?

 

тупо yum update прогнал

 

rp_filter первым делом проверял

плясал с бубном пару часов, фаервол выключал и т.п.

 

щас заново все проинсталил - все работает, конфиги те-же

возможно какой-то пакет че-то испортил тогда, библиотеку какую не ту поправил, хз

 

yum update сразу прогнал после инсталяции и сетевых настроек

 

CentOS 7 minimal

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.