J'ai moi aussi dû faire la même chose récemment, et cette réponse a été recherchée. Malheureusement, la réponse de Nafe utilise ipfw
ce qui est maintenant déconseillé et indisponible dans OSX; et la réponse de Kevin Leary est en effet un peu féroce. J'ai donc dû faire quelque chose de mieux (plus propre) et j'ai décidé de le partager ici pour la postérité. Cette réponse est en grande partie basée sur l’approche évoquée ici .
Comme OP le mentionne, pointer un navigateur sur 192.168.99.100 devrait obtenir une réponse d'un serveur situé sur localhost: 8000. L'ajout d'un alias à ifconfig
n'est pas vraiment nécessaire, cela pfctl
suffit à lui seul: pour cela, le pf.conf
fichier /etc/pf.conf
doit être modifié.
Tout d' abord , nous créons (avec sudo) un nouveau fichier d'ancrage (laisser l' appelle de redirection
) à: /etc/pf.anchors/redirection
. Ceci est essentiellement un fichier texte régulier et contient la ligne suivante (comme dans la réponse de Kevin Leary): rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
. Une fois que le nouveau fichier d'ancrage a été créé, il doit être référencé dans le pf.conf
fichier. Ouvrez le pf.conf
fichier avec sudo et ajoutez rdr-anchor "redirection"
après la dernière ligne rdr-anchor (qui est rdr-anchor "com.apple/*"
) et ajoutez load anchor "redirection" from "/etc/pf.anchors/redirection"
à la fin.
En fin de compte, voici à quoi devrait ressembler le fichier pf.conf:
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "redirection" #added for redirection/port forwarding
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/redirection" #added for redirection/port forwarding
Et c'est presque ça. Il suffit de redémarrer pfctl
en émettant sudo pfctl -d
pour le désactiver en premier, puis sudo pfctl -fe /etc/pf.conf
pour le redémarrer.
Maintenant, si vous avez besoin que cela se produise automatiquement après chaque redémarrage, un autre petit travail doit être effectué: le démon de lancement de pfctl
doit être mis à jour (l'explication référencée indique que pf est activé automatiquement au démarrage, mais cela ne semble pas être le cas. le cas de regarder le code). Ouvrez (avec sudo) System/Library/LaunchDaemons/com.apple.pfctl.plist
et cherchez ceci:
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
et ajoutez la ligne <string>-e</string>
pour le rendre finalement comme ceci:
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Ça devrait le faire.
Mise en garde : Apple ne permet plus de modifier les fichiers de démon de lancement de cette façon (pas avec sudo, ni chmod, ni rien d'autre). Le seul moyen est de bricoler les paramètres de System Integrity Protection : démarrez en mode de récupération et lancez le terminal. Vérifiez l'état SIP avec csrutil status
, il devrait généralement être activé. Désactivez-le avec csrutil disable
et redémarrez en mode normal, puis apportez les modifications au fichier plist comme indiqué ci-dessus. Une fois cela fait, revenez en mode de récupération et réactivez la protection (en place pour une bonne raison) en émettant csrutil enable
.
Explication: Il est possible de vérifier en lançant la ifconfig
commande qui 127.0.0.1
est déjà l'alias (par défaut) pour localhost lo0. Ce fait est utilisé pour éviter d'avoir à ajouter un alias supplémentaire pour localhost et d'utiliser simplement l'adresse par défaut dans le pf.conf
fichier.
UPDATE: Malheureusement, il semble que le chargement du fichier au démarrage ne fonctionne pas. J'essaie toujours d'obtenir de l'aide pour le faire trier. Jusque-là, courir sudo pfctl -f /etc/pf.conf
après le démarrage fait l'affaire.