Para responder à pergunta como foi dito, recebi alguns conselhos de um guru da rede de amigos para fazer a ponte entre as interfaces de LAN e WAN e, em seguida, use ebtables
para filtrar o que será interligado:
lan0: [add LAN IPs and use as LAN interface]
eth0 (LAN)
eth1 (WAN) [add WAN IPs and use as WAN interface]
# Forward traffic to/from STBs
ebtables -A FORWARD -i eth0 -o eth1 -s $STB_MAC -j ACCEPT
ebtables -A FORWARD -i eth1 -o eth0 -d $STB_MAC -j ACCEPT
# Allow DHCP responses
ebtables -A FORWARD -i eth0 -o eth0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j ACCEPT
# Allow ARP requests
ebtables -A FORWARD -i eth0 -o eth0 -d ff:ff:ff:ff:ff:ff -p arp --arp-ip-dst ! $LAN_SUBNET -j ACCEPT
# The WAN is not really part of the LAN
ebtables -A INPUT -i eth1 -j DROP
ebtables -A FORWARD -i eth1 -j DROP
ebtables -A FORWARD -o eth1 -j DROP
ebtables -A OUTPUT -o eth1 -j DROP
# Allow eth1 to be used to access the WAN
ebtables -t broute -A BROUTING -i eth1 -d $STB_MAC -j ACCEPT
ebtables -t broute -A BROUTING -i eth1 -d $STB_MAC -j ACCEPT
ebtables -t broute -A BROUTING -i eth1 -j DROP
No entanto, neste caso, descobriu-se que o switch ISP está fazendo a marcação VLAN baseada em porta (uma VLAN para a porta PC e outra VLAN para as portas STB).
Portanto, para se livrar do roteador do ISP, eu precisava:
- Configure as duas VLANs na NIC WAN do gateway
- Mover a configuração do IP da WAN da NIC para a WAN VLAN (incluindo o NAT)
- Bloqueie os endereços MAC dos STBs do servidor DHCP do meu gateway
- Conecte a VLAN interna do ISP à minha LAN
- (Opcional) Adicione regras de firewall para evitar que os pacotes da LAN vazem para a VLAN do ISP.
Isso funciona porque o servidor DHCP do ISP já responde apenas às solicitações DHCP dos STBs, portanto, colocá-los na lista negra nos resultados do gateway faz com que todas as respostas DHCP sejam respondidas pelo gateway ou pelo servidor DHCP do ISP. Se estiver usando dnsmasq
, a lista negra pode ser feita usando, e. dhcp-host=01:23:45:*:*:*,ignore
em /etc/dnsmasq.conf
.
Tudo o mais pode ser feito usando os arquivos de configuração systemd-networkd:
- Criar arquivos .netdev
para VLANs
- Adicione-os (como VLAN
entries) ao arquivo .network
correspondente na WAN NIC
- Crie arquivos .network
para as VLANs
- Criar um arquivo .netdev
para a ponte LAN / STB
- Adicione o STB VLAN e o LAN NIC à ponte
Aqui está um conjunto completo de exemplos de arquivos de configuração systemd-networkd:
-
/etc/systemd/network/isp-link.network
- Configuração de rede para a NIC WAN:Aqui apenas configuramos as VLANs. Certifique-se de alterar os IDs de VLAN para o que o ISP usa. Este exemplo usa 1234 para a WAN VLAN e 56 para a interna (IPTV).
[Match] Name=eno1 [Network] VLAN=eno1.1234 VLAN=eno1.56
-
/etc/systemd/network/eno1.1234.netdev
- WAN VLAN:[NetDev] Name=eno1.1234 Kind=vlan [VLAN] Id=1234
-
/etc/systemd/network/eno1.56.netdev
- VLAN interna do ISP para IPTV:[NetDev] Name=eno1.56 Kind=vlan [VLAN] Id=56
-
/etc/systemd/network/home-bridge.netdev
- O dispositivo de ponte ISP-VLAN / home-LAN:[NetDev] Name=br0 Kind=bridge
-
/etc/systemd/network/home-bridge.network
- A rede da referida ponte:Certifique-se de não ativar o servidor DHCP aqui. Como o systemd-networkd não permite configurar uma lista negra de MACs para ignorar, você precisará usar outro servidor DHCP (por exemplo, dnsmasq).
[Match] Name=br0 [Network] Address=192.168.0.1/24 IPForward=yes IPMasquerade=yes DHCP=no DHCPServer=no
-
/etc/systemd/network/home-lan.network
- Arquivo de rede para o NIC da LAN:[Match] Name=enp9s0 [Network] Bridge=br0
-
/etc/systemd/network/isp-vlan-wan.network
- Configuração de WAN do seu gateway:Isso usa o DHCP - se você tiver uma configuração estática, altere isso para
Address
/Gateway
/DNS
settings.[Match] Name=eno1.1234 [Network] IPForward=yes DHCP=yes
-
/etc/systemd/network/isp-vlan-internal.network
- O arquivo de rede para a VLAN interna:[Match] Name=eno1.56 [Network] Bridge=br0
-
/etc/dnsmasq.conf
- configuração do servidor DHCP:# Disable DNS server - will be handled by systemd-networkd port=0 # Enable and configure DHCP server dhcp-range=192.168.0.129,192.168.0.254,12h # Specify which interfaces to listen on listen-address=127.0.0.1 listen-address=::1 listen-address=192.168.0.1 # Ignore DHCP requests from the STBs dhcp-host=01:23:45:*:*:*,ignore