Могу ли я использовать файл /etc/hosts для настройки псевдонима

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

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

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

Ответ 1

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

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

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

Ответ 2

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

Host myAlias
    HostName mychangingip.myip.com

Затем вы можете "ssh myAlias" (есть другие директивы, которые могут быть полезны, например, Пользователь, Порт и т.д.).

Ответ 3

У меня была такая же точная проблема, и я решил это, установив и используя 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-подобную настройку. Надеюсь, что это поможет!

Ответ 4

Эта оболочка script может сделать трюк для вас, если вам просто нужно иметь обновленный 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

Ответ 5

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

search myip.com

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

Ответ 7

Одно примечание о том, что у вас есть такая запись:

 127.0.0.1     dev.example.com

Когда вы действительно получаете запрос в своем приложении (в моем случае ASP.NET), он будет действовать, как правило, решить "localhost", поэтому вы не можете делать такие вещи:

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

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

Ответ 8

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

Ответ 9

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