Приложение не может получать многоадресные пакеты на CentOS 7

Что касается того, что не так с вашим скриптом, вы заменяете A или a на AB и D или d на DK, поэтому любые ранее существовавшие B или K не будут затронуты; sed не ищет его. Вы можете поставить необязательный [bB] или [kK], используя ? (ноль или один из предшествующих символов), чтобы заставить sed заменить и этот символ, если он встретится.

Чтобы убедиться, что замена происходит только если за [aA] или [aA][bB] и т.д. следует число, вы можете добавить число к шаблону и добавить его обратно в замену с помощью () и \1

sed -r 's/ab?([0-9])/AB\1/Ig;s/dk?([0-9])/DK\1/Ig' filename

Я использую -r для использования ERE (поэтому не нужно экранировать ? ) и I для поиска без учета регистра вместо использования классов символов.

2
30.07.2016, 00:11
1 ответ

AGH! Известные слова,

Единственное существенное различие между моим неработающим хозяином и моим рабочим хозяином - это ...

... потому что в нем лежат драконы!

AGH! Известные предположения,

... Но ...

... ибо в этом корень всей путаницы!

Проблема заключается в сетевой фильтрации обратного пути Linux. Проблема в том, что пакеты поступают через интерфейс, и таблица маршрутизации видит, что адрес отправляющего хоста должен приходить / проходить через другой интерфейс (на котором лежит маршрутизатор по умолчанию). Следовательно, ядро ​​отбрасывало пакеты и не отправляло их моему приложению.

Отчеты IGMP были отправлены, потому что я сказал socat, какой интерфейс мне следует использовать. И маршрутизаторы и коммутаторы послушно настроили многоадресную рассылку, чтобы идти именно туда, куда я сказал. В конечном итоге недовольным было ядро.

Дешевое и непростое решение - использовать sysctl для изменения net.ipv4.conf.all.rp_filter с 1 на 0 , но это могло вызвать непредвиденные последствия, если вы не будете осторожны (пакеты не в порядке, получение пакетов, которые вам не нужны, пакеты приходят на неправильный интерфейс). Лучше убедиться, что таблица маршрутизации отражает реальность того, что вы пытаетесь сделать. Итак, другое исправление - установить / etc / sysconfig / network-scripts / route-iface так, чтобы в нем был источник или сетевой маршрут специально для IP-адреса многоадресного отправителя на этом конкретном iface (т. Е. eth1 или что у вас).

3
27.01.2020, 22:10

Теги

Похожие вопросы