Je souhaite transférer les demandes de 192.168.99.100:80
à 127.0.0.1:8000
. Voici comment je le ferais sous Linux en utilisant iptables
:
iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000
Comment faire la même chose sous MacOS X? J'ai essayé une combinaison de ipfw
commandes sans grand succès:
ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80
(Pour moi, réussir consiste à pointer un navigateur http://192.168.99.100
et à obtenir une réponse du serveur de développement sur lequel je suis en cours d'exécution localhost:8000
)
Réponses:
Alors j'ai trouvé un moyen de faire ça. Je ne suis pas sûr que ce soit la méthode préférée, mais ça marche! À votre coquille préférée:
(L'alias
lo0
semble être la partie manquante)Si vous souhaitez qu'un (faux) domaine pointe vers ce nouvel alias, assurez-vous que / etc / hosts contient la ligne suivante:
la source
J'ai pu le faire fonctionner avec les commandes
ifconfig
etpfctl
du Mac 10.10.2. Avec l'approche suivante je cartographie avec succès127.0.0.1:3000
àmydomain.com
localement sur ma machine.Dans votre ligne de commande , entrez les deux commandes suivantes pour transférer des connexions à
127.0.0.1:3000
la10.0.0.1
:Puis modifiez votre fichier
/etc/hosts
ou/private/etc/hosts
et ajoutez la ligne suivante pour mapper votre domaine10.0.0.1
.Après avoir enregistré votre fichier hosts, rincez votre DNS local:
Ouvrez maintenant
mydomain.com
dans un navigateur et vous verrez le serveur hébergé sur votre port localhost (c'est-à-dire127.0.0.1:3000
). Fondamentalement, ce processus mappe un<ip>:<port>
à un nouveau<ip>
afin que vous puissiez ensuite mapper un hôte avec cette adresse IP.la source
sudo discoveryutil udnsflushcaches
me donnecommand not found
mais il correspond toujours l'entrée correctement. Mais comment puis-je cartographier un deuxième port? J'ai essayé de faire les étapes 1 + 2 avec id:10.0.0.2
et un autre port, mais cela ne prend toujours que la dernière connexion. Donc, si je fais en dernier10.0.0.1
etport 3000
en avant3000
, si je le fais en dernier10.0.0.2
et le porter4000
en avant4000
. Dans mon/private/etc/hosts
j'ai écrit les deux entrées avec l'identifiant différent (selon).sudo dscacheutil -flushcache
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, celapfctl
suffit à lui seul: pour cela, lepf.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 lepf.conf
fichier. Ouvrez lepf.conf
fichier avec sudo et ajoutezrdr-anchor "redirection"
après la dernière ligne rdr-anchor (qui estrdr-anchor "com.apple/*"
) et ajoutezload anchor "redirection" from "/etc/pf.anchors/redirection"
à la fin.En fin de compte, voici à quoi devrait ressembler le fichier pf.conf:
Et c'est presque ça. Il suffit de redémarrer
pfctl
en émettantsudo pfctl -d
pour le désactiver en premier, puissudo 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:et ajoutez la ligne
<string>-e</string>
pour le rendre finalement comme ceci:Ç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 aveccsrutil 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 émettantcsrutil enable
.Explication: Il est possible de vérifier en lançant la
ifconfig
commande qui127.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 lepf.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.la source
System/Library/LaunchDaemons/com.apple.pfctl.plist
; cela ne survivrait probablement pas à une mise à jour du système d'exploitation?Cela a bien fonctionné pour moi:
Ajoutez la ligne suivante au fichier de démarrage, comme décrit ici: http://xeiam.com/port-forwarding-80-to-8080-using-ipfw-on-mac-os-x/
add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
la source
À partir de 10.5, OS X est livré avec un nouveau pare-feu orienté application, au lieu de
ipfw
. Mais ipfw est toujours installé. Si vous avez des problèmes avec sa syntaxe, consultez les interfaces graphiques telles queWaterRoof
ouFlying Buttress
.HTH, PEra
la source
L'ordre des règles est important, assurez-vous qu'il n'y a pas de "tout refuser" avant que vos règles permettent, ou quelque chose comme ça.
la source
65535 allow ip from any to any
).Votre commande semble manquer un numéro de règle; essayer:
(Si vous n’exécutez pas en tant que root, vous devrez le préfixer par sudo). Une autre chose à vérifier est que le pare-feu est activé:
S'il revient avec la valeur 0 (désactivé), activez-le avec:
... et organisez-le pour qu'il soit réactivé au redémarrage de l'ordinateur. La "bonne" façon de faire est probablement de créer un élément lancé ( Lingon rend cela assez facile). Ou utilisez simplement l’un des outils graphiques cités par PEra et laissez-le s’occuper des détails.
la source