regras nftable são invalidadas na reconexão (VDSL, ppp0)

2

Estou reconstruindo meu roteador usando nftables no debian jessie. Eu tenho uma configuração de trabalho até o momento em que meu ISP decide reatribuir um novo IP WAN, reconectando meu link DSL. Depois de se reconectar, o próprio roteador tem uma conexão on-line, mas o mascaramento não funciona mais.

Configuração reversível antes de reconectar:

# nft list table nat
table ip nat {
    chain prerouting {
            type nat hook prerouting priority 0; policy accept;
    }

    chain postrouting {
            type nat hook postrouting priority 100; policy accept;
            oif ppp0 masquerade
    }
}

Configuração reversível após reconectar:

# nft list table nat
table ip nat {
    chain prerouting {
            type nat hook prerouting priority 0; policy accept;
    }

    chain postrouting {
            type nat hook postrouting priority 100; policy accept;
            oif 8 masquerade
    }
}

Então eu assumo que o tempo de inatividade de ppp0 durante a reconexão faz com que as regras relacionadas sejam de algum tipo não atribuídas . A reaplicação manual das regras do nft (flush + add) resolve esse problema até a próxima reconexão.

Como posso garantir que as regras temporariamente desativadas serão reatribuídas automaticamente ao ppp0 após a restabelecida a conexão?

    
por Kai Giebeler 16.10.2016 / 05:24

1 resposta

0

Eu finalmente descobri como resolver esse problema.

# nft list table nat
table ip nat {
    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
        oifname "ppp0" masquerade
    }
}

Você só precisa usar iifname/oifname "ppp0" em vez de oif/iif ppp0 . O último endereça a interface por string, em vez de usar o id da interface. As citações são opcionais, mas acho que enfatiza bem a interpretação diferente.

A página do manual simplesmente afirma:

Type ifname: Interface name (16 byte string). Does not have to exist.

Não sei se há alguma desvantagem, como o impacto no desempenho ao fazer a correspondência, mas parece que é a solução correta.

    
por 19.10.2016 / 22:48