6 votes

Transfert de port sur macOS Sierra

J'ai basculé vers macOS Sierra et je ne parviens pas à faire fonctionner la redirection de port pour localhost (http et https) en utilisant l'interface en boucle lo0. J'utilise pf et je suis les instructions existantes pour El Capitan mais sans succès :

https://apple.stackexchange.com/a/230331/81267, http://blog.brianjohn.com/forwarding-ports-in-os-x-el-capitan.html

Essentiellement, j'ajoute ifconfig :

sudo ifconfig lo0 10.0.0.1 alias

Ensuite, je crée un fichier d'ancrages pf : /etc/pf.anchors/myorganization

rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port = 80 -> 127.0.0.1 port 3000
rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port = 443 -> 127.0.0.1 port 7000

J'ajoute une référence à ce fichier dans pf.conf (j'ai dû désactiver puis réactiver SIP pour faire cela) :

rdr-anchor "myorganization"
...
load anchor "myorganization" from "/etc/pf.anchors/myorganization"

Je teste les ancres :

sudo pfctl -vnf /etc/pf.anchors/myorganization

et le résultat semble bon :

...
RÈGLES DE TRADUCTION :
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all
rdr-anchor "myorganization" all
...

Je les ai activés :

sudo pfctl -evf /etc/pf.conf

J'ai ajouté localhost à mon /etc/hosts

127.0.0.1   localhost

Mais lorsque je navigue vers http://localhost j'obtiens ERR_CONNECTION_REFUSED. Si je navigue vers http://localhost:3000 le site fonctionne bien.

Mise à jour J'ai activé le journalisation de pf et essayé sans l'alias 10.0.0.1 :

rdr pass log (all) on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 3000
rdr pass log (all) on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 7000

Et la première fois que j'accède à http://localhost, je vois le journal :

00:00:00.000000 rule 4294967295/8(ip-option): pass in on en0: (tos 0x0, ttl 1, id 59674, offset 0, flags [none], proto IGMP (2), length 32, options (RA))
    192.168.0.106 > 224.0.1.60: igmp v2 report 224.0.1.60
00:00:00.204784 rule 4294967295/8(ip-option): pass in on en0: (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto IGMP (2), length 32, options (RA))
    192.168.0.3 > 224.0.0.252: igmp v2 report 224.0.0.252
00:00:00.093232 rule 4294967295/8(ip-option): pass out on en0: (tos 0x0, ttl 1, id 11047, offset 0, flags [none], proto IGMP (2), length 32, options (RA))
    192.168.0.77 > 224.0.0.251: igmp v2 report 224.0.0.251
00:00:00.111608 rule 4294967295/8(ip-option): pass in on en0: (tos 0x0, ttl 1, id 60629, offset 0, flags [none], proto IGMP (2), length 32, options (RA))
    192.168.0.106 > 239.255.255.250: igmp v2 report 239.255.255.250
00:00:00.102426 rule 4294967295/8(ip-option): pass in on en0: (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto IGMP (2), length 32, options (RA))
    192.168.0.3 > 224.0.0.251: igmp v2 report 224.0.0.251
00:00:00.000120 rule 4294967295/8(ip-option): pass in on en0: (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto IGMP (2), length 48, options (RA))
    192.168.0.3 > 224.0.0.22: igmp v3 report, 2 group record(s) [gaddr 224.0.0.251 is_ex, 0 source(s)] [gaddr 224.0.0.252 is_ex, 0 source(s)]

Les visites ultérieures à localhost n'ajoutent rien aux journaux et je vois que l'interface en boucle lo0 n'apparaît pas dans ce journal, juste en0 (Ethernet), donc je ne suis pas convaincu que cette sortie de journal soit pertinente pour le problème. J'ai également essayé d'ajouter en0 et en1 au fichier /etc/pf.anchors/myorganization mais les résultats sont les mêmes.

0 votes

Veuillez ajouter des détails car, telle que la question est posée actuellement, elle n'a pas beaucoup de sens. Ajouter une deuxième adresse IP à lo0 ne résout pas nécessairement localhost vers cette adresse IP. Alors, quel est le but de l'alias 10.0.0.1 ? Une sorte de docker ?

0 votes

Essentiellement, cette question demande comment configurer le transfert de port. Je cherche des réponses sur comment faire cela.

0 votes

En entrant 10.0.0.1:80/443 dans le navigateur, une requête sera redirigée vers 127.0.0.1:3000/7000 ! Mais je doute que cela fonctionne avec localhost:80/443 puisque localhost est lié à 127.0.0.1 et non à 10.0.0.1.

6voto

klanomath Points 63400

Ma réponse à la question : Quelle est la manière moderne de faire du renvoi de port sur El Capitan ? (renvoyer le port 80 vers le 8080) est toujours valide.

Cependant, vous avez plusieurs frictions/misconfigurations dans votre configuration :

  • Il n'est pas nécessaire d'établir une adresse réseau supplémentaire (c'est-à-dire 10.0.0.1) pour lo0 si vous n'avez pas de deuxième hôte http/https.

  • Une redirection :

    rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port = 80 -> 127.0.0.1 port 3000

    redirigera uniquement une demande pour 10.0.0.1:80 vers 127.0.0.1:3000.

    Une demande pour localhost:80 (qui se traduit en 127.0.0.1:80 et pas en 10.0.0.1:80) ne sera pas redirigée car il n'y a pas de ligne appropriée rdr ... et vous obtiendrez une erreur de connexion.

  • Même en ajoutant la ligne 10.0.0.1 localhost à /etc/hosts, cela ne résoudra pas votre problème car localhost semble être codé en dur vers 127.0.0.1.


Pour que votre redirection fonctionne, déchargez pf.conf avec sudo pfctl -d. Ensuite, vérifiez votre ancre et pf.conf :

rdr pass log (all) on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 3000
rdr pass log (all) on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 7000

et

...
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "myorganization"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "myorganization" from "/etc/pf.anchors/myorganization"

Ensuite, analysez/vérifiez myorganization avec sudo pfctl -vnf /etc/pf.anchors/myorganization et chargez pf.conf avec sudo pfctl -evf /etc/pf.conf.

Dans certains cas rares, vous devrez peut-être ajouter une ligne supplémentaire :

::1     127.0.0.1 

à votre fichier /etc/hosts. Cela ne semble pas logique cependant et peut s'appliquer uniquement aux anciennes versions de Sierra. Je n'ai pas pu confirmer cela.

0 votes

Merci, en supprimant l'alias 10.0.0.1, le problème a été résolu. (Je ne suis pas sûr pourquoi cela n'a pas fonctionné initialement - voir Mise à jour - il y avait probablement quelque chose d'autre qui n'allait pas à ce moment-là. Ajouter la ligne supplémentaire dans /etc/hosts n'était pas nécessaire dans mon cas.

0 votes

Dans mon cas, j'ai besoin de supprimer ::1. 127.0.0.1 pour que la destination localhost fonctionne.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X