Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Réseau _ port forwarding

Écrit par : SuperCed 28 Sep 2022, 07:26

Hello, je voudrais faire un port forwarding sur une autre IP et un autre port quand on se connecte sur un certain port de mon Mac.

Mais ça ne semble pas fonctionner, j'ai essayer de charger cette conf :
rdr pass inet proto tcp from any to any port 9080 -> 192.168.0.123 port 80

en utilisant la commande : pfctl

Celle ci semble être correctement prise en compte, mais ça marche pas du tout. Ca semble fonctionner uniquement sur l'IP du Mac, c'est à dire 127.0.0.1.

Mais moi, je cherche à forwarder vers l'IP 192.168.0.123 (une autre machine sous Linux) sur le port 80 quand on se connecte sur le Mac qui a l'adresse 192.168.0.189.
Il semble qu'il reste une sécurité qui bloque le port forwarding.
Est-ce que quelqu'un a de l'expérience avec ça ?

Si je trouve pas de solution, je mettrai un reverse proxy avec nginx, mais je trouve ça un peu lourd juste pour forwarder un port...

Merci!

Écrit par : Polo35230 28 Sep 2022, 14:18

Salut,

Je ne suis pas sûr de ce que je vais dire, mais je pense que ça ne peut pas marcher si la demande de connexion TCP initiale (sur le port 9080) et la demande TCP modifiée (192.168.0.123:80) passent par la même interface réseau du MAC.
C'est bon avec l'adresse 127.0.0.1 parceque la boucle locale est aussi l'interface interne du Mac. Donc là, il y a deux interfaces (une d'entrée, et une de sortie) Mais bien sûr, ce n'est pas ce que tu veux faire...

Si l'appel vient de l'extérieur, pourquoi ne passes-tu pas par la table NAT/PAT de la box?

Écrit par : SuperCed 28 Sep 2022, 15:30

Citation (Polo35230 @ 28 Sep 2022, 15:18) *
Salut,

Je ne suis pas sûr de ce que je vais dire, mais je pense que ça ne peut pas marcher si la demande de connexion TCP initiale (sur le port 9080) et la demande TCP modifiée (192.168.0.123:80) passent par la même interface réseau du MAC.
C'est bon avec l'adresse 127.0.0.1 parceque la boucle locale est aussi l'interface interne du Mac. Donc là, il y a deux interfaces (une d'entrée, et une de sortie) Mais bien sûr, ce n'est pas ce que tu veux faire...

Si l'appel vient de l'extérieur, pourquoi ne passes-tu pas par la table NAT/PAT de la box?


Il n'y a pas vraiment de réglage sur la box d'une part, d'autre part, je n'ai pas d'IP publique (c'est un routeur 4G de secours).
Mais je crois que tu as raison, ça ne peut pas fonctionner sur la même interface réseau.

Je vais tenter plutôt le reverse proxy avec nginx.

En fait, je voulais faire un tunnel ssh entre mon Mac et un serveur qui a lui, une IP publique et fixe.
Donc en gros, à un moment, il faut que ce soit un des ordi local qui aille se connecter sur mon serveur avec l'IP fixe.
Celui-ci redirigerait les ports vers le Mac. Et ensuite, je vais faire un reverse proxy depuis le Mac.
J'ai pas encore tout testé pour voir si ça peut fonctionner.

Écrit par : Polo35230 29 Sep 2022, 08:07

Je ne sais pas si j'ai bien compris...
-Sur le réseau local A, tu as un Mac (192.168.0.189) et un routeur 4G pour sortir sur internet.
-Sur le réseau local B, tu as un serveur Unix (192.168.0.123)
-Tu as un tunnel SSH entre le Mac (client SSH) et la machine Unix (serveur SSH)
-Tu veux que toutes les machines du réseau A passent par le tunnel SSH (donc par ton MAC) pour joindre le serveur Unix.

Si c'est ça, tu peux essayer de faire un routage par interface dans le Mac.
Fais un ifconfig, et regarde le nom de l'interface du tunnel SSH.
Ensuite, rajoute une route dans le Mac.
route add -host 192.168.0.123 -interface NomDeLinterfaceSSH

Ensuite, sur chacune des machines du réseau A qui veulent passer par le tunnel ssh, il faudra rajouter une route:
route add -net 192.168.0.123/32 192.168.0.189 (syntaxe à voir, et pas sûr que ça marche; On est sur le même plan IP...)

Le truc curieux, c'est que le client et le serveur sont sur un même plan IP, c'est pas l'idéal, mais ça peut marcher si se sont des IP lcales fixes

Écrit par : SuperCed 29 Sep 2022, 17:56

Non, c'est pas ça.

J'ai un serveur avec une IP publique sous Linux chez un hébergeur
Un Mac avec une IP pas publique, mais relié à internet via un routeur 4G
Une webcam avec un serveur http sur le port 80

Je veux accéder à la webcam.

Mais je n'ai pas d'IP publique sur le Mac à cause du routeur 4G (temporaire, ma fibre est coupée).

Donc je veux que le Mac se connecte au serveur avec IP publique et crée un tunnel.
Puis, sur ce même serveur, je veux que le port 8080 soit ouvert, et aille vers la webcam.
Donc l'idée est d'utiliser un reverse proxy qui reroute le 8080 vers 127.0.0.1:9080 tout ça sur mon serveur IP publique.
Ensuite, la connexion utilise le tunnel ssh qui mappe le Mac avec l'adresse 127.0.0.1:9080 du serveur. Le mac utilise le port 8080.
Sur le Mac, un autre reverse proxy ouvert sur 8080 mais qui va finalement chercher les data sur le réseau local 192.168.0.123:80 (la webcam).

Écrit par : SuperCed 30 Sep 2022, 11:18

En fait, si, ça fonctionne, mais peut être que ça ne tient pas dans le temps...

Donc sur mon serveur, j'ai un nginx avec la conf :

Code
server {
listen       8080;
location / {
                proxy_pass http://127.0.0.1:9080;
        }
}


Sur le Mac, je mets en place un tunnel ssh qui va rediriger le port 9080 du serveur vers mon Mac sur le port 8080

Code
autossh -fNC -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 9080:127.0.0.1:8080 [email protected]


puis sur le Mac, un autre proxy nginx pour que ça aille sur le serveur web que je souhaite (ma webcam) avec la conf:
Code
server {
        listen       8080;
        server_name  localhost;

        location / {
      
          proxy_pass http://192.168.0.117:80;
        }
}

Écrit par : SuperCed 1 Oct 2022, 17:12

Bon, finalement, ça semble bien fonctionner depuis plus de 24H, c'est parfait!

Sauf un truc, j'aimerais utiliser zeroconf/bonjour pour ne pas dépendre des IPs de mes sous réseaux, mais ça marche pas trop quand on a 2 sous réseaux différents.

En fait, j'ai un réseau wifi, puis un partage sur l'interface Ethernet de mon Mac.
Bonjour/zeroconf fonctionne très bien sur les 2 sous réseaux ou depuis le Mac.
Par contre, un ordinateur du wifi ne peut pas accéder aux réseaux qui sont sur le sous réseau Ethernet (192.168.0.x vers 192.168.2.x et réciproquement).

Savez vous comment on peut faire connaitre les 2 sous réseaux entre eux via zeroconf/bonjour ?

Merci

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)