Bloqueio de DHCP entre duas redes domésticas em ponte usando o nft

0

Então, minha configuração é a seguinte. Eu tenho duas redes domésticas e um servidor em outro lugar. Estou executando o OpenVPN como um servidor, no servidor, para conectar as duas redes domésticas em uma única grande rede. Porque eu queria que tudo funcionasse de forma transparente para todos os usuários nas redes domésticas, é uma camada 2 brigde. Além disso, as caixas, nas redes domésticas, que executam os clientes OpenVPN, também executam um servidor DHCP, para que eu possa configurar os usuários de acordo.

Eu uso a sub-rede 192.168.16.1/22, para toda a rede, mas configurei os pools DHCP para 192.168.16.1/23 e 192.168.18.1/23. Só para poder diferenciá-lo mais facilmente. No entanto, os servidores DHCP anunciam como netmask de 255.255.255.252.

Os gateways são 192.168.16.1 e 192.168.18.1, respectivamente. As caixas OpenVPN / DHCP são 192.168.17.1 e 192.168.19.1.

As caixas OpenVPN possuem uma placa ethernet eth0, conectada a sua rede local, através da qual elas acessam seu gateway. Eles têm o adaptador criado pelo OpenVPN tap0. Bem como um adaptador de ponte virtual br0. eth0 e tap0 são ambos escravizados por br0, para ligar a rede local e a VPN.

A configuração básica funciona como um encanto. Um problema, no entanto, é o DHCP. Como é uma ponte da camada 2, o DHCP também é transmitido, levando ao servidor DHCP da rede doméstica remota respondendo a solicitações de usuários na rede doméstica local.

Eu tentei fazer isso no servidor OpenVPN. Como um pensamento para ser o melhor lugar. No entanto, parece que não consigo. Infelizmente, eu não sei, se é minha culpa (o mais provável), ou qualquer outra coisa.

Estou tentando fazer isso usando o nft. Estou executando uma versão (quase) atualizada do Arch Linux (atualmente a versão 4.8.10 do kernel).

Minha configuração atual para o nft, adaptada de [1] e [2], já que há pouco que você possa encontrar no nft, é a seguinte:

# nft list ruleset
table bridge filter {
    chain input {
        type filter hook input priority -200; policy accept;
        iifname "tap0" udp sport bootps-bootpc counter packets 34 bytes  11569 drop
        iifname "tap0" udp dport bootps-bootpc counter packets 0 bytes 0 drop
    }

    chain forward {
        type filter hook forward priority -200; policy accept;
        iifname "tap0" udp sport bootps-bootpc counter packets 34 bytes 11569 drop
        iifname "tap0" udp dport bootps-bootpc counter packets 0 bytes 0 drop
    }

    chain output {
        type filter hook output priority -200; policy accept;
    }
}

Como você pode ver, algumas regras foram realmente acionadas. No entanto, as regras são sempre acionadas ao mesmo tempo, então eu acho que pelo mesmo pacote, assim como o pacote que aparece na rede doméstica remota (identificado pelo tamanho do pacote e por ser apenas um pacote relacionado ao DHCP).

Edit: Os pacotes que passam, parecem ser transmissões. Portanto, eles provavelmente parecem acionar a cadeia INPUT e FORWARD.

Eu tentei muitas outras regras diferentes, usando parcialmente o iptables, algumas vezes usando o gancho pré ou pós-saída da tabela inet, mas nada parece funcionar provavelmente.

Então, eu sou muito ignorante, qual poderia ser o problema. Ou o que há de errado com minha configuração ou pensamento?

[1] link

[2] link

    
por DerFlob 11.12.2016 / 11:57

0 respostas