From: "Paulo Pires" <[EMAIL PROTECTED]>

Qual seria o princípio de funcionamento desse novo modo de operação e do patch?

A primeira coisa em que pensei foi mexer no driver para desabilitar
multicast na placa, mas isso não evitaria que o meio físico ficasse
ocupado pelos multicasts vindos das outras estações da rede.  A menos
que o AP repasse um multicast recebido de uma estação para as outras,
independentemente das regras do sistema (talvez por ser resolvido pela
própria placa, sem garar evento para o host), causando um "storm", não
estou conseguindo enxergar onde uma mudança de driver possa ajudar.
--
Um abraço.
        Paulo A. P. Pires

... Qui habet aurem audiat quid Spiritus dicat ecclesiis.


Paulo,

O problema esta exatamente aonde você citou, o driver quando no modo hostap faz o forward de pacotes de uma estação para a outra sem fazer com que esse pacote seja inserido no sistema operacional (não gerando qualquer evento ou permitindo qualquer ação no IPFW por exemplo).

Veja o ieee80211_input.c na linha 472 (FreeBSD 6-BETA1):

               /* perform as a bridge within the AP */
               if (ic->ic_opmode == IEEE80211_M_HOSTAP &&
                   (ic->ic_flags & IEEE80211_F_NOBRIDGE) == 0) {
                       struct mbuf *m1 = NULL;
                      (... operações para pacotes multcast  ...)

Observe que o controle do apbridge feito no ifconfig não é mais feito no driver, agora é feito no stack 80211 através da flag IEEE80211_F_NOBRIDGE. Se essa flag estiver habilitada o código abaixo não retranstimitirá os pacotes de uma estação para outra.

Isso quer dizer que quem esta usando o FreeBSD-6 não precisa de qualquer patch para bloquear o ap bridge, basta ver a opção do ifconfig(8). Para as outras versões posso gerar os patches necessários.

                       } else {
/* XXX this dups work done in ieee80211_encap */
                               /* check if destination is associated */
                               struct ieee80211_node *ni1 =
                                   ieee80211_find_node(&ic->ic_sta,
                                                       eh->ether_dhost);
                               if (ni1 != NULL) {
                                       /* XXX check if authorized */
                                       if (ni1->ni_associd != 0) {
                                               m1 = m;
                                               m = NULL;
                                       }
                                       /* XXX statistic? */
                                       ieee80211_free_node(ni1);
                               }
                       }

Aqui ele verifica se a estação de destino (para quem vamos replicar o pacote) esta associada ao ponto de acesso (hostap).

                       if (m1 != NULL) {
                               len = m1->m_pkthdr.len;
                               IF_ENQUEUE(&ifp->if_snd, m1);
                               if (m != NULL)
                                       ifp->if_omcasts++;
                               ifp->if_obytes += len;
                       }

Caso o m1 esteja defido o pacote é inserido na fila de transmissão da interface (IF_ENQUEUE) sem ser processado pelo host e sem qualquer possibilidade de ser filtrado.

Quando o pacote é local ele é passado para o host pela rotina abaixo (mais precisamente na linha (*ifp->if_input)(ifp, m)):

               if (m != NULL) {
                       if (ni->ni_vlan != 0) {
                               /* attach vlan tag */
                               /* XXX goto err? */
VLAN_INPUT_TAG(ifp, m, ni->ni_vlan, goto out);
                       }
                       (*ifp->if_input)(ifp, m);
               }

Desativando o modo ap bridge nenhuma estação pode se comunicar diretamente com a outra (o que vai criar outros problemas se você usa IP fixo nos clientes - um cliente não vai falar com o outro).

Isso pode ser solucionado com o PPPoE, onde cada estação tem seu endereço IP com mascara /32 e toda comunicação é feita através do gateway.

E a vantagem de desabilitar o ap bridge é que pacotes de IGMP e outros protocolos alienigenas poderão ser bloqueados no firewall (alem de resolver aquele problema de que seus clientes (com servidores windows bem configurados :)) podem ver as maquinas de outros clientes no ambiente de rede).

[]'s
Luiz

_______________________________________________
Freebsd mailing list
[email protected]
http://mail.fug.com.br/mailman/listinfo/freebsd_fug.com.br

Responder a