Socat OpenWRT
Socat já foi declarado como uma resposta, no entanto, a resposta declarada não funcionou para mim na minha plataforma, OpenWRT, com um endereço dinâmico de WAN.
Meu objetivo é encaminhar pacotes UDP wake-on-lan unicast da porta UDP 9 da interface WAN para uma transmissão de sub-rede em 192.168.20.255.
O quebrado (iptables)
Eu também tentei com o iptables, mas toda vez que eu adiciono uma regra que termina em 255, a regra é transformada em pasta com o endereço de destino 0.0.0.0 quando eu imprimo com:
iptables -t nat -L
Acredito que o iptables não é capaz de multiplexar o tráfego, conforme exigido em um unicast para transmitir a conversão.
O ruim (falsas entradas de arp)
Fazer entradas arp não é tão ruim, porque os pacotes chegam a todos no segmento ethernet, mas tem as seguintes desvantagens
- Você "consome" um endereço IP
- O IP de destino no pacote WoL está errado, mesmo que você o consiga, porque o endereço MAC é todo FFFF ...
- Um mau funcionamento de IP pode ocorrer se alguém na rede usar esse endereço IP.
- É uma transmissão Ethernet e não uma transmissão IP.
Nota: Isso pode ser feito com o comando arp
ou ip neigh
.
O bem
socat, como indicado pela resposta anterior, é foda.
A resposta anterior socat, no entanto, me deparei com alguns problemas com ele.
- Meu socat não redirecionou o tráfego quando o destino da transmissão UDP era 255.255.255.255. Eu evitei isso, restringindo a sub-rede de transmissão para o que eu uso é provavelmente mais seguro.
- Quando defino o endereço de ligação como 0.0.0.0, me deparei com uma tempestade de transmissão devido ao tráfego retornando da minha LAN para a socat. Eu primeiro resolvi isso ligando para o meu ddns público, no entanto, isso não é ideal, porque ddns podem não estar disponíveis e meu endereço IP atribuído dinamicamente a minha mudança.
Eu consegui vincular a 0.0.0.0 (todos os endereços) e evitar a tempestade de broadcast adicionando uma regra iptables para impedir que a transmissão recebida retorne ao socat do lado da LAN. Esta regra, além de uma regra do iptables para aceitar o tráfego na porta UDP 9, e uma regra do iptables para registrá-lo, obtemos as três regras a seguir, além do comando socat.
iptables -I input_wan_rule -p udp --dport 9 -j ACCEPT -m comment --comment "firewall entry to allow udp port 9 to socat"
iptables -I input_wan_rule -p udp --dport 9 -j LOG --log-prefix 'Received MAGIC PACKET on udp/9'
iptables -I input_lan_rule -p udp --dport 9 -d 192.168.20.0/24 -j DROP -m comment --comment "block broadcast from bouncing back to socat to avoid storm"
killall socat 2>/dev/null
socat -u -T1 UDP-LISTEN:9,bind=0.0.0.0,fork UDP-DATAGRAM:192.168.20.255:9,broadcast &
Para os OpenWRTers, colá-lo em /etc/firewall.user
e emitir /etc/init.d/firewall restart
é suficiente.
Parabéns, agora você deve ter o WoL funcionando para sua rede em qualquer lugar na Web.