Port Forwarding in ROS2

Networking, configurazione della connessione, periferiche e condivisioni di rete.
Avatar utente
iCarus96
Prode Principiante
Messaggi: 5
Iscrizione: venerdì 15 marzo 2024, 11:03
Desktop: Ubuntu Server
Distribuzione: Ubuntu 23.10
Sesso: Maschile

Port Forwarding in ROS2

Messaggio da iCarus96 »

Buongiorno a tutti,

Scrivo per chiedere se il port fowarding che ho fatto è corretto (perché non mi funziona..quindi immagino di no(?))

Vi spiego in dettaglio la mia situazione:
Ho 3 dispositivi: un PC, un Raspberry e una Jetson.
Il PC e il Raspberry sono collegati alla stessa rete locale tramite wifi.
Il Raspberry condivide la sua connessione di rete con la Jetson attraverso la porta eth0. (vedi punto 1)
Pertanto, il Raspberry crea una sottorete con il Jetson.
Il problema è che il Jetson, essendo in una sottorete diversa, non può vedere i ROS2 topic del pc e viceversa.
Stavo pensando di fare un port forwarding dal raspberry in modo da far passare il traffico ROS2 tra il Jetson e il PC, ma provando in tutti i modi non ci riesco (vedi punto 2)
(ROS2 utilizza come protocollo di comunicazione FastDDS)
Screenshot 2024-05-14 alle 09.32.09.jpg

Punto 1: (tutto su raspberry)
- ho tolto il commento alla riga net.ipv4.ip_forward=1
- ho inserito i seguenti comandi :

Codice: Seleziona tutto

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE  
sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT 
- la condivisione internet funziona con un ip di sottorete = 192.168.2.43

Punto 2: (tutto su raspberry)
- ho abilitato il port fowarding delle porte interessate dal Domain ID = 0 (vedere immagine)

Codice: Seleziona tutto

sudo iptables -t nat -A PREROUTING -p udp --dport 7400 -j DNAT --to-destination 192.168.2.43:7400
sudo iptables -t nat -A PREROUTING -p udp --dport 7401 -j DNAT --to-destination 192.168.2.43:7401
sudo iptables -t nat -A PREROUTING -p udp --dport 7410 -j DNAT --to-destination 192.168.2.43:7410
sudo iptables -t nat -A PREROUTING -p udp --dport 7411 -j DNAT --to-destination 192.168.2.43:7411
Screenshot 2024-05-14 alle 10.44.23.png
sapete confermarmi se il port forwarding è corretto? perché i topic della jetson continuano a non essere visibili dal pc e viceversa? :muro:

Grazie
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2924
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: Port Forwarding in ROS2

Messaggio da DoctorStrange »

iCarus96 ha scritto: Il Raspberry condivide la sua connessione di rete con la Jetson attraverso la porta eth0. (vedi punto 1)
Pertanto, il Raspberry crea una sottorete con il Jetson.
Il problema è che il Jetson, essendo in una sottorete diversa, non può vedere i ROS2 topic del pc e viceversa.
Se Jetson e Raspberry sono parte di una subnet diversa, non sono sicuro che un semplice port forwarding sia sufficiente ad instradare i pacchetti. Prova a fare un ping dal pc verso raspberry e vedere se quest'ultimo è raggiungibile. la prima cosa che devi fare, è di rendere raggiungibili i due host. Prova inizialmente, dichiarando una regola di routing specifica sulla tabella di routing del PC. Se non ho capito male, i pacchetti sono di tipo simplex, ovvero verranno sempre generati dal PC, ed arriveranno su raspi, oppure su Jetson, ma il contrario non mi sembra che succeda mai. Corretto?
In questo caso, credo che sia sufficiente impostare la regola di routing sul solo PC.

Se non ho capito male, l'instradamento su raspi che hai pubblicato qui sul messaggio, ha l'unico scopo di rendere raggiungibile la Jetson tramite la Raspi. Questo giustificherebbe le regole appese sulla chain POSTROUTING e su FORWARD. E' corretto?

Prova a fare una regola sul PC per dichiarare la nuova rotta verso il Raspi.

In ogni caso, mi è poco chiara la topologia di rete. Dici che tutti gli host sono connessi tramite WiFi, quindi immagino che da qualche parte ci debba essere un router che faccia da gateway. Corretto?
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 13126
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Port Forwarding in ROS2

Messaggio da thece »

:ciao:
iCarus96 ha scritto:
martedì 14 maggio 2024, 11:03
sapete confermarmi se il port forwarding è corretto? perché i topic della jetson continuano a non essere visibili dal pc e viceversa? :muro:
secondo me devi partire con solo questa sola regola

Codice: Seleziona tutto

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
impostata su IPTables di RPI e poi spezzare il problema in due sottoproblemi.
Le altre due regole sono inutili, a meno che tu non abbia inserito specifiche regole di DROP.


SottoProblema #1: connessione (iniziata da) da Jetson a PC

qui direi che non dovrebbero esserci intoppi: il MASQUERADE impostato su RPI fa funzionare la connessione.
I pacchetti IP provenienti dalla subnet 192.168.2.0/24 escono sulla dall'interfaccia wlan0 con l'indirizzo IP 192.168.50.244
Fai un test con un ping

Codice: Seleziona tutto

ping -c 4 <INDIRIZZO_IP_PC>

SottoProblema #2: connessione (iniziata da) da PC a Jetson

qui direi che devi risolvere il problema di raggiungibilità della sottorete 192.168.2.0/24: modifica la tabella di routing sul PC

Codice: Seleziona tutto

route add -net 192.168.2.0/24 gw 192.168.50.244
Fai un test con un ping

Codice: Seleziona tutto

ping -c 4 <INDIRIZZO_IP_JETSON>
Non dovrebbe essere necessario alcun port forwarding.
Il port forwarding è necessario solo se dal PC tu vuoi raggiungere il Jetson riferendolo attraverso l'indirizzo IP del RPI. Ma se il PC sa come raggiungere la sottorete 192.168.2.0/24 non è più necessario.


Nei vari test, ti suggerisco di utilizzare tcpdump (o equivalente) per controllare quali pacchetti passano sull'host.
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 13126
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Port Forwarding in ROS2

Messaggio da thece »

:ciao:

sei riuscito a far comunicare il PC con il Jetson ?
Scrivi risposta

Ritorna a “Connessione e configurazione delle reti”

Chi c’è in linea

Visualizzano questa sezione: Martin0 e 4 ospiti