J'ai aussi dû faire une chose similaire récemment, et en cherchant, je suis tombé sur cette réponse. Malheureusement, la réponse de Nafe utilise ipfw
qui est maintenant déprécié et non disponible dans OSX ; et la réponse de Kevin Leary est en effet un peu bricolée. 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 largement basée sur l'approche mentionnée à cette phrase .
Comme le mentionne le PO, faire pointer un navigateur sur 192.168.99.100 devrait obtenir une réponse d'un serveur à localhost:8000. L'ajout d'un alias à ifconfig
n'est pas vraiment nécessaire, pfctl
seul est suffisant : pour y parvenir, l pf.conf
à l'adresse /etc/pf.conf
doit être modifié.
Tout d'abord nous créons (avec sudo) un nouveau fichier d'ancrage (appelons-le redirection
) à : /etc/pf.anchors/redirection
. Il s'agit en fait d'un fichier texte ordinaire qui 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 fichier d'ancrage. pf.conf
fichier. Ouvrez le pf.conf
avec sudo et ajouter 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.
Au final, 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 tout. Redémarre juste pfctl
en émettant sudo pfctl -d
pour le désactiver d'abord et ensuite 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 fait : le démon de lancement de l'application pfctl
doit être mis à jour (le gist référencé mentionne que pf est activé automatiquement au démarrage, cependant cela ne semble pas être le cas en regardant 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 que ce soit finalement comme ça :
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Ça devrait le faire.
Caveat : Apple ne permet plus de modifier les fichiers du démon de lancement juste comme ça (ni avec sudo, ni avec chmod, ni avec autre chose). Le site uniquement Le moyen le plus simple est de bricoler le Protection de l'intégrité du système paramètres : démarrer en mode récupération et lancer le terminal. Vérifiez le statut SIP avec csrutil status
il doit généralement être activé. Désactivez-la avec csrutil disable
et redémarrez en mode normal, puis effectuez les modifications du fichier plist comme indiqué ci-dessus. Une fois que c'est fait, retournez en mode de récupération et réactivez la protection (elle a été mise en place pour une bonne raison) en effectuant les opérations suivantes csrutil enable
.
Explication : On peut vérifier en émettant la commande ifconfig
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 pour simplement utiliser l'adresse par défaut dans le fichier pf.conf
archivo.
MISE À JOUR : Malheureusement, il semble que le chargement du fichier au démarrage ne fonctionne pas. J'essaie toujours d'obtenir de l'aide pour résoudre ce problème. En attendant, l'exécution de sudo pfctl -f /etc/pf.conf
après le démarrage fait l'affaire.