Jump to content

Recommended Posts

Posted (edited)

Суть проблемы такова имеется N пользовательских VLANов, имеется VLAN Serv в котором слушает pppoe mpd, на определенном сервере назовем его realay подняты процессы pppoe-relay с параметрами вида:

pppoe-relay -S Serv -C 1 -C 2 .... -C N

В какой-то момент пакеты которые ходят по части пользовательских vlan'ов начали приходить в другой причем уже внутри другого влана в направлении от релея к абоненту. Естественно mac адреса абонента в замусориваемом влане нет и в результате получается нехилый броадкаст по всему влану. При отключении релея в этот страдающий влан броадкаст прекращался. Что такое может быть?

Edited by ViacheslavR
Posted

а почему вы думаете что у нас не правильно?

сделано было так вполне из рациональных соображений отграничения броадкаста с пользовательских вланов от сервака, который не должен тратить свою производительность на обработку этих пакетов. Ну и по мелочи всякое. В конце концов нам так удобней. Тем не менее проблема явно не из-за архитектурных недостатков.

Posted (edited)
а почему вы думаете что у нас не правильно?

сделано было так вполне из рациональных соображений отграничения броадкаста с пользовательских вланов от сервака, который не должен тратить свою производительность на обработку этих пакетов. Ну и по мелочи всякое. В конце концов нам так удобней. Тем не менее проблема явно не из-за архитектурных недостатков.

Не спорю. Рассуждаю.

При правильном построении такая проблема в принципе отсутствует. Сеть работает более стабильно и прозрачно. Убирается лишнее колено. Броадкаст надо лимитить на портах абонентов или хотя бы на агрегации. Не думаю, что у вас в 1 широковещательном домене более 500 машин, хотя и это в свое время работало без проблем при вменяемом управлении и быстром отключении зараженных ПК.

А у вас из-за нелогичного и непрозрачного решения появилась или петля или баг в работе релея.

 

А дальше сами делайте выводы в архитектуре или нет проблемы.

Edited by yakuzzza
  • 1 month later...
Posted

вот решил отписаться как была решена эта проблема:

1) Скачиваем исходники pppoe-relay с сайта http://www.roaringpenguin.com/products/pppoe

 

2) Внимательно изучив исходники обнаруживаем интересные вещи такие как хеш таблицы вида (клиент-RelaySessionID- SessionId -acPPPoE)

/* Session state for relay */
struct SessionHashStruct;
typedef struct SessionStruct {
    struct SessionStruct *next;    /* Free list link */
    struct SessionStruct *prev;    /* Free list link */
    struct SessionHashStruct *acHash; /* Hash bucket for AC MAC/Session */
    struct SessionHashStruct *clientHash; /* Hash bucket for client MAC/Session */
    unsigned int epoch;        /* Epoch when last activity was seen */
    UINT16_t sesNum;        /* Session number assigned by relay */
} PPPoESession;

/* Hash table entry to find sessions */
typedef struct SessionHashStruct {
    struct SessionHashStruct *next; /* Link in hash chain */
    struct SessionHashStruct *prev; /* Link in hash chain */
    struct SessionHashStruct *peer; /* Peer for this session */
    PPPoEInterface const *interface;    /* Interface */
    unsigned char peerMac[ETH_ALEN]; /* Peer's MAC address */
    UINT16_t sesNum;        /* Session number */
    PppoeSessionFunctionTable *ses;        /* Session data */
} SessionHash;

/* Function prototypes */

Итак значит при каждом запуске экземпляра pppoe-relay создается такой вот связный список в котором релей "помнит" об интерфейсе которому предназначен трафик маркированный SessionID. В моем случае трафик предназначенный для абонента одного вилана дублировался в другие, так как в списке создаваемом другим процессом мака для которого предназначен этот трафик не было и естественно в arp-таблице коммутатора этой записи тоже нет и поэтому он и отсылался на другие порты (аплинки в том числе).

Решением может послужить указание всех пользовательских интерфейсов с которых нужен релей в одном процессе, чтобы в системе присутствовал один хеш-список.

3) В исходниках релея находим запись #define MAX_INTERFACES 8 и изменяем её на нужное вам количество прослушиваемых интерфейсов (указываемых в параметрах запуска pppoe-relay)

4) Собираем

5) Используем

 

 

 

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 и с Политикой конфиденциальности.