Separe duas pontes de rede no linux

1

No momento, estou tentando configurar um roteador para minha rede doméstica usando o linux (Archlinux para ser mais específico). A placa incorporada que estou usando tem 3 interfaces lan, chamadas wan0 , lan0 , lan1 e duas placas wifi, chamadas wifi0 e wifi1 . Eu quero ter duas redes separadas, uma para meus convidados e para minha família e eu. Minha configuração atual é assim:

                   +-------+
                   | wifi0 +----------------+
                   +-------+           +----+---+
                                       |  brg0  |
                   +-------+           +----+---+
                   | eth0  +----------------+
                   +-------+


                   +-------+
                   | wifi1 +----------------+
                   +-------+           +----+---+
                                       |  brg1  |
                   +-------+           +----+---+
                   | eth1  +----------------+
                   +-------+

Eu configurei uma ponte contendo lan0 e wifi0 , chamado brd0 , com ip endereço 192.168.10.1/24 e uma ponte contendo lan1 e wifi1 , chamado brd1 , com endereço de IP 192.168.20.1/24 . Em brd0 bem como brd1 dnsmasq está sendo executado no modo dhcpd para propagar endereços IP para clientes no intervalo 192.168.10.50-125 para brd0 e intervalo 192.168.20.50-125 para %código%. A rede brd1 é minha rede convidada, enquanto 192.168.20.1/24 é minha rede doméstica.

Esta configuração funciona até agora. No entanto, uma coisa me pegou de surpresa. Eu embora, porque a rede de convidados e a rede doméstica estão em duas sub-redes diferentes o tráfego entre eles também é separado. No entanto, quando eu sou conectar para a rede de convidado eu também pode chegar a serviços e computadores no rede doméstica, mesmo que nenhum roteador ou encaminhamento estático esteja configurado. ( a o contrário também é verdade). Eu acho que isso tem algo a ver como os dispositivos de bridge funcionam no linux.

A minha pergunta é, como configurar o roteador para que ambas as redes sejam separados formam um ao outro? Preciso usar regras de filtro de tráfego? pode isso ser implementado com etables? Ou é a minha configuração de alguma forma quebrada e não deveria ser possível alcançar o serviço de uma rede para outra?

    
por IcePic 17.06.2018 / 16:31

1 resposta

0

Usarei o texto como referência, pois os nomes das suas interfaces não correspondem à imagem e ao texto.

O roteador é o roteamento entre todas as suas interfaces onde ele tem um IP, então brd0 (home), brd1 (guest) e wan0 (que você esqueceu de adicionar no imagem), como esperado de um roteador.

Como você terá mais tarde a rota entre brd0 e wan0 , bem como entre brd1 e wan0 , você não pode simplesmente desabilitar o roteamento. Você pode usar duas regras iptables FORWARD para proibir esse roteamento, uma para cada direção:

iptables -A FORWARD -i brd0 -o brd1 -j DROP
iptables -A FORWARD -i brd1 -o brd0 -j DROP

Se você quiser que a rede doméstica tenha acesso à rede convidada, mas não o contrário, as regras com estado podem fazer isso usando:

iptables -A FORWARD -i brd1 -o brd0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i brd1 -o brd0 -j DROP

A primeira regra provavelmente pode ser "fatorada" com regras semelhantes futuras, removendo os nomes das interfaces:

iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Observação: os sistemas de uma rede ainda podem executar o ping do IP do roteador pertencente à outra rede (por exemplo, 192.168.20.2 , ping 192.168.10.1 seria bem-sucedido), pois não são roteados, portanto, não atravessam as regras FORWARD , mas d ser um pouco exagerado para resolvê-lo (com as regras corretas na cadeia INPUT ). Eu apenas deixo como uma observação.

Nota 2: nada nesta resposta precisava estar lidando com o fato de que brd0 e brd1 são pontes: é tudo sobre roteamento.

    
por 26.06.2018 / 23:47