Du coup je dois forcément utiliser une IP publique, gérée par la passerelle du destinataire via NAT. J'ai bon ?
oui et non. Oui tu utilises ta passerelle, mais c'est pas suffisant.
Ta passerelle va router au réseau de bob. Généralement le réseau de bob est derrière un routeur. Ce routeur saura pas que tu veux bob en particulier. Il aura juste ton ip publique. Ce que peux faire bob, c'est dire à son routeur: "route les requetes arrivant sur le port 8080 vers ma machine". Et si du coup tu envoies tes paquets à l'ip publique de bob sur le port 8080, banco.
En revanche, si bob a réussi à te parler, tu lui réponds (donc via l'ip publique). Tes paquets arrivent sur le routeur de bob et là, la passerelle pourra NATER car le couple (iplocale de bob, ip publique de LA (qui a été socké quand bob a fait sa requête)) existe "avant" ta réponse, sans avoir de bidouiller les ports.
(enfin, toi du doit spécifier cette fois que ton routeur doit faire transiter les paquets de tel port vers TA machine pour le traffic entrant de bob...)
il y a enfin un dernier cas qui va un peu dans l'idée de quentin: Tu déclares (hardcode) une iface pour 192.168.0.2. Tu crèes un pont ssh vers bob pour un port donné (bien que pour le ping on s'en fout (icmp)), (ce qui nécessite que tu puisses te connecter à bob, point 1). Tu bind ton pont vers cette adresses locale 192.168.0.2.
et du coup t'as l'impression de targeter une machine de ton réseau physique alors que non, bob peut être à L.A