Eu tenho 3 dispositivos Linux conectados uns aos outros, como mostrado. Os dispositivos A e B são computadores incorporados que executam o Yocto. O dispositivo C é um PC Ubuntu. A rede é totalmente independente (sem conexões externas com a Internet ou qualquer outra coisa).
Um aplicativo no Dispositivo A está enviando pacotes UDP na porta 14550 que eu quero que o Dispositivo C receba. Devido a algumas nuances deste aplicativo, tenho A enviando os pacotes UDP para 192.168.22.102 (em vez de 10.1.1.10). Não tem problema: adicionei uma rota no dispositivo A.
#Device A
ip route add 192.168.0.0/16 via 10.1.1.10 dev wlan0-ap
Eu verifiquei a rota funciona porque eu posso pingar a interface eth0 de B de A
Em seguida, configuro o encaminhamento de porta em B para que ele possa entregar os pacotes UDP para C na mesma porta 14550:
#Device B
echo '1' > /proc/sys/net/ipv4/conf/wlan0/forwarding
echo '1' > /proc/sys/net/ipv4/conf/eth0/forwarding
echo '1' > /proc/sys/net/ipv4/ip_forward
iptables -A PREROUTING -t nat -p udp -i wlan0 --dport 14550 -j DNAT --to-destination 192.168.22.7:14550
iptables -A FORWARD -p udp -d 192.168.22.7 --dport 14550 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
e abriu a porta 14550 para entrada e saída.
#Device B
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 14550 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp --sport 14550 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Aqui está a saída de iptables -S
no dispositivo B:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 14550 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 192.168.22.7/32 -p udp -m udp --dport 14550 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --sport 14550 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Por fim, permiti pacotes UDP de entrada na porta 14550 no dispositivo C usando o gufw.
Infelizmente, nenhum dos pacotes UDP está aparecendo no Dispositivo C. Existe um passo fundamental que está faltando? Quais etapas de solução de problemas devo tentar? Por favor, tenha em mente que os Dispositivos A e B estão executando as versões BusyBox de muitos dos aplicativos básicos de rede, então eu vou ser um pouco limitado naquilo que eu posso e não posso fazer.
Tags port-forwarding