Могу ли я использовать файл /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
Ответ 6
Это можно сделать, запустив локальный DNS-преобразователь (что-то вроде dnsmasq). Проверьте https://serverfault.com/questions/22419/set-dns-server-on-os-x-even-when-without-internet-connection
Ответ 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).