web-dev-qa-db-fra.com

Puis-je spécifier un port dans une entrée de mon / etc / hosts sous OS X?

Duplicata possible:
Comment utiliser DNS pour rediriger le domaine vers un port spécifique sur mon serveur

Je veux inciter mon navigateur à aller sur localhost: 3000 au lieu de xyz.com. Je suis allé dans/etc/hosts sur OS X 10.5 et j'ai ajouté l'entrée suivante:

127.0.0.1:3000 xyz.com

Cela ne fonctionne pas, mais sans spécifier le port, l'astuce fonctionne. Existe-t-il un moyen de le faire en spécifiant le port?

51
Tony

Non, le fichier hosts est simplement un moyen de résoudre statiquement les noms quand aucun serveur DNS n'est présent.

47
Chief A-G

Le fichier hosts est destiné à la résolution DNS. Le DNS résout les noms en adresses IP et n'a rien à voir avec les ports, je le crains. Vous devrez utiliser autre chose en conjonction avec le fichier hosts pour rediriger le port (Mangle l'en-tête TCP en modifiant le port de destination).

Avec iptables:
MAC OS utilise-t-il iptables/netfilter (je ne le pensais pas) ..? Si OS X utilise iptables, vous pouvez pointer xyz.com vers une adresse IP dans le fichier hosts comme 157.166.226.25 puis:

Sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -d 157.166.226.25 -j DNAT --to-destination 127.0.0.1:3000

:-)

45
Kyle Brandt

Vous n'avez pas besoin de spécifier un port dans le fichier hosts. faites simplement l'entrée comme vous l'avez fait en omettant le port, comme dans 127.0.0.1 xyz.com, cela vous dirigera vers votre hôte local, puis ajoutez simplement le port 3000 à la fin de votre URL ... http://xyz.com:30

12
stuart Brand

En supposant que vous essayez d'intercepter http et non https, vous devrez écouter sur le port 80 sur votre machine locale, mais vous pourrez alors utiliser les fonctionnalités de redirection de port de ssh en ssh'ing vers localhost avec -L80:localhost:3000, mais vous devrez le faire en tant que root.

Il serait probablement préférable d'avoir tout ce qui s'exécute sur le port 3000, écoutez simplement le port 80 à la place.

Si vous contrôlez le routeur entre vous et xyz.com, vous pourrez peut-être configurer une règle de redirection de port à la place.

4
retracile

La solution DNS pour cela consiste à utiliser des enregistrements SRV:

http://en.wikipedia.org/wiki/SRV_record

Il s'agit d'un moyen d'autoriser DNS, qui était à l'origine une base de données distribuée "nom à numéro" ou "numéro à nom" à inclure "point de terminaison nom à service", qui pourrait (éventuellement) inclure un protocole et un port.

La mauvaise nouvelle, c'est que les applications doivent être développées pour utiliser les enregistrements SRV, ce n'est donc pas une solution intégrée pour ce que vous essayez de faire.

3
James F

Je pense que vous devez utiliser une sorte de serveur proxy ou peut-être quelque chose avec un logiciel de pare-feu pour rediriger les connexions de port ...

2
Bart Silverstrim

Chief-AG a raison en ce que le fichier hosts est utilisé pour résoudre statiquement les noms (la présence DNS n'est pas pertinente). Cependant, il peut y avoir une combinaison de choses que vous pourriez faire.

  1. Définissez l'enregistrement dans le fichier hosts sur 127.0.0.1 xyz.com
  2. Configurez votre machine pour les hôtes virtuels .
  3. Pour l'hôte virtuel que vous avez configuré pour xyz.com, créez un fichier html qui redirige vers localhost: 3000

Semble être un peu de travail, mais cela accomplirait ce que vous demandez.

2
Forgotten Semicolon

je suppose que c'est pour Rails développement? si c'est le cas, alors exécutez script/server -p 80 pour le faire fonctionner sur le port web standard. alors votre xyz.com fonctionnera

1
Ryan

Comme alternative aux hôtes virtuels de;, vous pouvez créer un tunnel ssh à l'écoute sur le port 80 et à transférer vers localhost: 3000.

1
evilchili

Si vous utilisez Apache comme serveur Web sur xyz.com, vous pouvez utiliser ProxyPass d'Apache pour 'convertir' en un autre port.

0
Rory