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

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

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

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

9 ответов


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

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

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


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

Host myAlias
    HostName mychangingip.myip.com

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


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

после установки и установки nginx, вы можете псевдоним first.com на second.com такой. В вашем /etc/hosts forward 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-like. Надеюсь, это поможет!


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

#!/bin/bash
# Get the dynamic IP (dirty, I know)
IP=`host -t a mychangingip.myip.com | perl -nle '/((?:\d+\.?){4})/ && print ' | 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

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

search myip.com

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


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


одно предупреждение если вы имеете такую строчку :

 127.0.0.1     dev.example.com

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

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

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


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


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