2009-03-12 2 views
158

Файл /etc/hosts может использоваться для переопределения определений dns, то есть для указания имени хоста на другой ip.Могу ли я использовать файл/etc/hosts для настройки псевдонима

Я хочу использовать /etc/hosts, чтобы сделать запись псевдонима, то есть заставить компьютер думать, что www.mysite.com не указывает на «жестко закодированный» ip, а вместо этого является синонимом mychangingip.myip.com.

Можно ли это сделать?

ответ

138

/etc/hosts не может использоваться (сам по себе) для создания имени хоста «псевдонимы».

Файл hosts содержит внутренний эквивалент A и PTR записей из DNS, то есть сопоставление имени хоста и IP-адреса и наоборот.

Хотя вы можете добавить несколько имен для определенного IP-адреса, вам необходимо знать IP заранее. Он не может использоваться для создания такого же эффекта, как запись CNAME, где имя указывает на другое имя, которое, в свою очередь, разрешает желаемый IP-адрес.

+1

Я считаю, что после 2 «столбцов» файла/etc/hosts считается «псевдоним», который похож на концепцию cname. Кроме того, у вас может быть больше. , но вы не можете комбинировать метод «файлы» с методом «dns» (см. Nsswitch.conf), поэтому его невозможно связать с записью CNAME DNS. – mighq

+0

@mighq действительно вы можете создавать _additional_ aliases с этими столбцами, но вам все равно нужно что-то положить в столбец _first_. Следовательно, вашему «решению» по-прежнему потребуется жесткий IP-адрес. – Alnitak

-2

Я так не думаю, файл hosts на самом деле не является альтернативой DNS-сервера. Вместо того, чтобы пытаться выяснить, как установить и настроить bind dns, вы можете попробовать использовать SheerDNS с файловыми базами. http://threading.2038bug.com/sheerdns/ (лучший легкий сервер dns, который я нашел через свежую меру).

+8

SheerDNS кажется очень сломанным: он отправляет обратно незаконные пакеты DNS, когда вы помещаете тип записи ресурса, который он не распознает, он не обрабатывает (например, SPF), он не распознает записи AAAA, он не отвечает ни к каким запросам и т. д. Кажется, студенческий эксперимент, не более. – bortzmeyer

10

Я изучил это недавно, я не мог найти реального решения. Тем не менее, вы можете получить частично то, что вы хотите, добавив строку поиска в /etc/resolv.conf например:

search myip.com

Тогда он будет искать mychangingip.myip.com при попытке разрешить mychangingip Смотрите также справочная страница для resolv.conf

13

Этот сценарий оболочки может сделать трюк для вас, если вам просто нужно иметь обновленный IP-адрес в вашем файле hosts и не нравится накладные расходы на настраиваемую настройку DNS , Вы могли бы, например, запустить его регулярно, как cronjob.

#!/bin/bash 
# Get the dynamic IP (dirty, I know) 
IP=`host -t a mychangingip.myip.com | perl -nle '/((?:\d+\.?){4})/ && print $1' | head -n1` 

# Update the hosts file 
if test -n "$IP"; then 
    grep -v www.thesite.com /etc/hosts > /tmp/hosts 
    echo "$IP www.thesite.com" >> /tmp/hosts 
    cp /tmp/hosts /etc/hosts 
fi 
1

Поставщики услуг, которые будут с комфортом и надежностью делать это за вас. Ярким примером является dyndns.

2

Одно предостережение, если у вас есть запись, как это:

127.0.0.1  dev.example.com 

Когда вы на самом деле получить запрос в вашем приложении (в моем случае ASP.NET) будет Actaully РЕШИЛИ «локальный» поэтому вы не можете делать такие вещи:

if (Request.Url.Authority == "dev.example.com) { 
    // ... 
} 

Псевдоним разрешен «localhost». Я думаю, что это поведение работает так, как если бы это было CNAME

+0

Если это то, что вам нужно для определения, вы можете настроить сетевой адаптер loopback (да, он по-прежнему доступен в Windows 8) и создать любое количество локальных IP-адресов для целей тестирования. –

151

Если вы хотите использовать SSH на сервере (с динамически изменяющейся записью DNS), вы можете эффективно добавить «псевдоним» (в файле ~/.ssh/конфигурации) создания записи:

Host myAlias 
    HostName mychangingip.myip.com 

Затем вы можете «SSH myAlias» (есть и другие директивы, которые могут быть использованы, например, пользователя, порт и т.д.).

+9

@WeiboLi Я категорически не согласен - OP конкретно упоминается 'www.mysite.com', подразумевая, что HTTP используется, а не SSH. – Alnitak

+1

Вы прибивали мой прецедент, хотя я думал о том же, что и OP. Я думал с точки зрения хостов и сети, а не ssh. –

10

Это можно сделать, запустив локальный DNS-преобразователь (что-то вроде dnsmasq). Check https://serverfault.com/questions/22419/set-dns-server-on-os-x-even-when-without-internet-connection

+2

+1 Это наиболее надежное решение общей проблемы настройки псевдонимов DNS на локальной машине. Все другие решения, предлагаемые до сих пор, либо очень хаки (например, обновление/etc/hosts с cron), либо работают только для определенных протоколов (ssh, http). – Ajedi32

30

У меня была такая же проблема, и я решил ее, установив и используя nginx на моем mac. Для этого вам не нужен сервер dns. Вы можете просто воспользоваться опцией nginx proxy_pass, чтобы получить тот же эффект, что и cname.

После установки и настройки nginx вы можете использовать псевдоним first.com для second.com следующим образом. В вашем/etc/hosts перейдите на first.com трафик на 127.0.0.1.

127.0.0.1 first.com 

на вашем Nginx конфигурации, добавьте следующее:

server { 
    listen 80; 
    server_name first.com; 
    access_log off; 
    location/{ 
     proxy_pass http://second.com; 
     proxy_set_header Host   $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-for $remote_addr; 
     proxy_connect_timeout 300; 
    } 
} 

Это должно эффективно дать вам CNAME типа установки. Надеюсь, это поможет!

+1

Это потрясающе. Я просто использовал эту технику для тестирования сайта WordPress, который я переносил на новый сервер - обычно вам приходится беспокоиться об изменении файлов конфигурации, но используя это, я просто скопировал все на новый сервер (который был доступен по другому URL-адресу) и затем использовал вышеуказанное, чтобы перенаправить старый URL-адрес на новый, чтобы проверить его работу. Спасибо, что спасли мне много времени! –

Смежные вопросы