Permitir tráfego através de um firewall para um endereço IPv6 dinâmico

7

Suponha que eu tenha essa configuração no IPv4 agora:

Meu roteador (uma caixa do Linux) está conectado à Internet no eth0 e minha LAN no eth1. Quero encaminhar a porta 80 para 10.1.2.3. Veja como eu atualmente faço isso:

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to 10.1.2.3 iptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT

Agora quero fazer o equivalente no IPv6. Suponha que eu tenha a mesma configuração de antes, com essas alterações:

Meu ISP fornece ao meu roteador o intervalo 2001: db8: aaaa :: / 64 via delegação de prefixo. Meu roteador toma 2001: db8: aaaa :: 1 para si mesmo na eth1 e dá 2001: db8: aaaa :: 123 para o host que eu quero que a porta 80 abra.

O NAT não é mais necessário no caso do IPv6, portanto, tudo que preciso é uma regra de firewall para permitir o tráfego. Aqui está a regra que posso pensar para fazer isso:

ip6tables -A FORWARD -i eth0 -d 2001:db8:aaaa::123 -p tcp -m tcp --dport 80 -j ACCEPT

O problema que tenho com isso é que eu tive que codificar 2001: db8: aaaa :: 123 em minha regra de firewall, e o prefixo 2001: db8: aaaa :: está sujeito a mudanças no capricho do meu ISP. No mundo do IPv4, o único IP que eu tinha que codificar era um interno, então eu sabia que nunca seria alterado debaixo de mim. Existe alguma maneira que eu possa permitir o tráfego como este sem ter que modificar uma regra toda vez que meu ISP alterar meu prefixo delegado? (Se pf pode fazer o que eu quero, mas o ip6tables não pode, eu estaria disposto a mudar para o BSD.)

    
por Joseph Sible 22.02.2017 / 03:57

1 resposta

0

Embora não exista uma opção dedicada, você pode usar o módulo genérico u32 iptables (veja iptables-extensions ) para corresponder apenas à parte da ID da interface (que sempre começa no byte 32 do cabeçalho IP):

-A FORWARD -m u32 --u32 "32 = 0x11223344 && 36 = 0xAABBCCDD" -j ACCEPT

Isso corresponderia a qualquer endereço de destino que terminasse com :1122:3344:aabb:ccdd .

Nos cabeçalhos IPv6, o endereço de origem começa no byte 8 (rede em 8, interface em 16); o endereço de destino é 24 (rede em 24, interface em 32). Você pode usar operações bit a bit para implementar coisas como correspondência de máscara CIDR em u32 também.

    
por 22.02.2017 / 08:03