Назад | Перейти на главную страницу

Могу ли я указать порт в записи в моем / etc / hosts в OS X?

Возможный дубликат:
Как использовать DNS для перенаправления домена на определенный порт на моем сервере

Я хочу обманом заставить свой браузер перейти на localhost: 3000 вместо xyz.com. Я зашел в / etc / hosts в OS X 10.5 и добавил следующую запись:

127.0.0.1:3000 xyz.com

Это не работает, но без указания порта уловка работает. Есть ли способ сделать это, указав порт?

Нет, файл hosts - это просто способ статического разрешения имен при отсутствии DNS-сервера.

Файл hosts предназначен для разрешения DNS. DNS разрешает имена в IP-адреса и, боюсь, не имеет ничего общего с портами. Вам нужно будет использовать что-то еще в сочетании с файлом hosts для перенаправления порта (измените заголовок TCP, изменив порт назначения).

С помощью iptables:
Использует ли MAC OS iptables / netfilter (я так не думал) ..? Если OS X использует iptables, вы можете указать xyz.com на некоторый ip в файле hosts, например 157.166.226.25, а затем:

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

:-)

Вам не нужно указывать порт в файле hosts. просто сделайте запись, как вы пропустили порт, как в 127.0.0.1 xyz.com, это направит вас на ваш локальный хост, а затем просто добавьте порт 3000 в конец вашего URL ... http://xyz.com:3000

Предполагая, что вы пытаетесь перехватить http, а не https, вам нужно будет прослушивать порт 80 на вашем локальном компьютере, но тогда вы можете использовать функции переадресации портов ssh, отправив ssh на localhost с помощью -L80:localhost:3000, но вам придется сделать это как root.

Вероятно, было бы лучше иметь все, что работает на порту 3000, вместо этого просто слушайте порт 80.

Если вы управляете маршрутизатором между вами и xyz.com, вы можете вместо этого настроить правило переадресации портов.

Решением DNS для этого является использование записей SRV:

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

Это способ разрешить DNS, которая изначально была распределенной базой данных «имя для номера» или «номер для имени», включать «имя для конечной точки службы», которая может (необязательно) включать протокол и порт.

Плохая новость заключается в том, что приложения должны разрабатываться для использования записей SRV, поэтому это не подходящее решение для того, что вы пытаетесь сделать.

Я думаю, вам нужно использовать какой-то прокси-сервер или, может быть, что-то с программным брандмауэром для перенаправления подключений к портам ...

Chief-AG прав в том, что файл hosts используется для статического разрешения имен (наличие DNS не имеет значения). Однако вы можете сделать несколько вещей.

  1. Установите запись в файле hosts на 127.0.0.1 xyz.com
  2. Настройте свою машину для виртуальных хостов.
  3. Для виртуального хоста, который вы настроили для xyz.com, создайте html-файл, который перенаправляет на localhost: 3000.

Кажется, это изрядная работа, но она выполнит то, о чем вы просите.

В качестве альтернативы виртуальным хостам; вы можете создать туннель ssh, прослушивающий порт 80 и перенаправляющий на localhost: 3000.

Я предполагаю, что это для разработки рельсов? если да, то запустите скрипт / server -p 80, чтобы он работал на стандартном веб-порту. тогда ваш xyz.com будет работать

Если вы используете Apache в качестве веб-сервера на xyz.com, вы можете использовать Apache ProxyPass "преобразовать" в другой порт.