Linux / OSX'teki / etc / hosts / dosyamda bir joker alt etki alanını nasıl yaparım?


169

Yerel alanımda alt alanları test etmem gerekiyor. Nasıl etkili bir ekleme bu sonucu olabilir *.localhost.combenim için /etc/hosts/dosyanın?

Eğer bu mümkün değilse, bu problemi nasıl çözerim? Yerel sunucumda joker alt etki alanlarını test etmem gerekiyor. Bu bir Django sunucusu, Django dev sunucusu alt alan adlarını idare edebilir mi? Başka bir yazılım / yönlendirme parçası bana istediğim sonucu verebilir mi?


1
Süper kullanıcıya ait mi?
Paul R

İnsanların mümkün olmadığını söylediklerini biliyorum! Ama yine de nasıl yaparım? Dışında bir şey nedir / etc / hosts / etkisini almak için kullanabilirim. Bir geliştirme sunucusunu test ediyorum.
MikeN


Çoğu yanıt ilk sorunuza odaklandığından (localhost alt etki alanı joker karakterleri), ikincil sorunuza bir yorum olarak cevap vereceğim: evet, Django dev sunucusu localhost alt etki alanlarını mükemmel şekilde kullanabiliyor, sadece tarayıcınızı ve işletim sisteminizi ikna etmeniz gerekiyor trafiği yollamak için (aşağıdaki çeşitli çözümlerden birini kullanarak)!
hheimbuerger

Yanıtlar:


43

Python'da bir dns proxy'si yazdım. / Etc / hosts dizininde joker karakter girişlerini okuyacak. Buraya bakın: https://github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py


Bu harika! Uzun zamandır bunun gibi basit bir çözüm arıyordum (OSX Mavericks BTW üzerinde çalışıyor)
Billy Moon

2
şimdi, sadece yapabilirsek pip install:)
metakermit

1
Bunu yükledim, her şeyi yaptım ve koştum, ancak siteleri engellemiyor.
DisplayName

Bunu yeterince oylayamıyorum. Buna sonsuza dek ihtiyacım vardı, bir soru ve cevabın cevheri tökezledi, ve ben biraz Python korsanıyım ve bu temiz bir haberleşme. Paylaşım için teşekkürler!
Farley

152

Dnsmasq programını kurun (Bunu tüm Linux masaüstlerimde zaten bir DNS önbelleği olarak yapıyorum). Gelen dnsmasq.confsatırı ekleyin:

address=/localhost.com/127.0.0.1

7
Parlak! Mac kullanıcıları için not, gerçekten bu kadar basit: 1. sudo port install dnsmasq2. edit /opt/local/etc/dnsmasq.conf3.sudo port load dnsmasq
tomc

17
Demlemek ile OSX: Yukarıdaki gibi aynı ancak demlemek dnsmasq yükleyin
Matt Humphrey

1
fyi demlemek> liman (re @MattHumphrey öneri)
electblake

1
Bu örnek benim için çalışmıyor, çünkü yerel servis için vagrantup.com kullanıyorum . Endişelenmeyin, IP'yi zaten doğru olana değiştirdim, 192.168.50.11ancak DNS çözümlenemiyor. Herhangi bir fikir, bu örnek "127.0.0.1 olmayan" IP'leri için doğru mu?
Brian,

6
Harika bir bahşiş. Ubuntu 14.04 masaüstünde (varsayılan olarak dnsmasq'ı çalıştıran), bir dosya oluşturun /etc/NetworkManager/dnsmasq.d/dnsmasq-localhost.confve diziyi içine yerleştirin address=/localhost.com/127.0.0.1, sonra yeniden başlatın.
user38397

60

/etc/hostsDosyada joker karakterler belirtilemez . Gerekli ana bilgisayar adlarını açıkça belirtin veya alternatif olarak uygun kurallara sahip bir yerel ad sunucusu ayarlayın.


15

Bir DNS sunucusu kurmanız ve her müşterinin çözünürlük için kullanmasını istemeniz gerekir. Sunucunun kendisi dnsmasq gibi "hafif" veya BIND kadar ağır olabilir .


Çok iyi belgelenmiş ve kullanımı kolay dnsmasq için +1
David Schmitt

dnsmasq bunu yapamaz.
DisplayName

--address=Dnsmasq.conf man sayfasının bölümünde açıklanan davranışın hangi kısmı yukarıda açıklanan kullanım durumunu kapsamaz?
Gerald Combs,

11

Basit İş Akışı (bir şey yüklemeye gerek yok)

Şahsen bunun için bir PAC dosyası oluşturmayı ve tarayıcımı sadece kullanmasını istiyorum.

1. Adım: örneğin bir *.proxy.pac*yerde bir dosya oluşturun: ( $homeklasörümü kullanıyorum)

Adım 2: bu kodu yapıştırın (örnek port 8000'dir):

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*localhost")) {
    return "PROXY localhost:8000";
  }
  return "DIRECT";
}

Adım 3 : Tarayıcınızın bu PAC dosyasını kullanmasını sağlayın.

PAC ve Firefox için Youtube Videosu

Adım 4 : Artık uygulamanıza erişerek test edebilirsiniz:http://mysubdomain.localhost/

Adım 5: Keyfini :)


3
Belki de bunun sadece tarayıcınızı etkileyeceğini belirtmekte fayda var. Diğer programlar ( wgetbundan bundan etkilenmeyecek). Bu başlı başına bir sorun değil, ama belki bundan bahsetmek daha iyidir.
Willem Van Onsem

.Pac yoluna giderseniz ve bir node.js sunucusu uyguluyorsanız, bunun req.urlmutlak bir URL olduğunu görünce şaşıracaksınız . Bu, gerçek bir proxy sunucusu yazmak istediğinizi varsaymak olduğu için yapılır, ancak bu tekniğe hata ayıklama için / etc / hosts girişlerini eklemeyi bırakmanın bir yolu olarak gelmeniz şaşırtıcıdır. FYI, yaptığım aynı yola gidebilenlere.
Tom Boutell

5

Eski bir projemi topladım:

https://github.com/airtonix/avahi-aliases

Gereksinimler:

  • avahi ve python-avahi'in kurulabildiği linux
  • .local alan adında sorun yok (avahi başka bir tür desteklemiyor)

Dnsmasq veya python dns proxy kullanmanın avantajları:

  • yerel ağınızdaki diğer avahi / bonjour kullanıcıları, oluşturduğunuz ve ağa bildirdiğiniz takma adları çözebilir (5353 numaralı bağlantı noktasına erişime izin vermenizi sağlar)


3

İçinde bir joker karakter kullanamazsınız /etc/hosts.

Göz Burada , dahili ama etkin DNS sunucusu ve Apache BIND kullanıldığında OS X üzerinde gerçekleştirmek için nasıl iyi bir açıklama için.


5
Apache'nin alt alan adlarıyla hiçbir ilgisi yok.
Anonymous

3

Kullanmak isterseniz dnsmasqbirlikte NetworkManagersize (hatta? Olmalıdır) başlayabilir dnsmasqdan NetworkManagerekleyerek

dns=dnsmasq

için /etc/NetworkManager/NetworkManager.conf. Sonra dnsmasq config gider /etc/NetworkManager/dnsmasq.confveya /etc/NetworkManager/dnsmasq.d/yanıtlar.


2

Kısa cevap:

/ Etc / hosts / dosyanız, joker karakterler veya port numaraları kullanmanıza izin vermez. Her bir alt alan adınız için bir giriş oluşturmanız gerekecektir.


2
Bağlantı noktası numaralarını belirtmenize ne izin verirdi? DNS AFAIK değil.
ptman

2

Kısa cevap, sen değilsin. Daha uzun cevap, gerçekte ne elde etmek istediğiniz konusunda net olmanız gerektiğidir, çünkü belki de daha iyi bir yol ve buna ulaşmak için farklı bir yol vardır.

Web barındırma için (daha önce hiç kullanmadım), sanal bir barındırma farkında web sunucusu ile birlikte DNS'de yapılır. Daha fazla ilgili bilgi için joker DNS kayıtları (Vikipedi) ve bir makalede Apache ve Bind barındırma Joker bağlama ve Apache kullanarak Linux için.

En kötüsü, sanırım yerel bir DNS sunucusu kullanabilirsiniz.


2

Bu konu için ortak bir görev, dizinleri alt etki alanlarıyla eşlemektir. Bunun çok basit bir yolu, dizin tabanlı girişleri otomatik olarak hosts dosyasına eklemektir:

#! / Usr / bin / python

ithal os

hostsFile = open ("/ etc / hosts", "a +");

lines = hostsFile.readlines ()

os.listdir'deki fileName için ('/ opt / subdomainDirs'):

    entryExists = Yanlış
    Satır içi satır için:
        eğer dosyaAdı satırında:
            entryExists = Doğru  

    entryExists değilse:
        hostsFile.write ("127.0.0.1" + dosyaAdı + ".localhost \ n");

2

Bu sorunun son cevabı olarak düşündüklerim için teşekkür ederim tschundeee, sadece yorum yapabilmeyi diliyorum, ancak orijinal hedefi gerçekleştirmeye çalışanlar için toplam yapılandırma (hepsi aynı kod tabanına işaret eden joker karakterler - hiçbir şey yükleme, dev ortam, örn. , XAMPP)

hosts dosyası (giriş ekleyin)

file: / etc / hosts (penceresiz)

127.0.0.1   example.local

httpd.conf yapılandırması (vhost'ları etkinleştir)

dosya: /XAMPP/etc/httpd.conf

# Virtual hosts
Include etc/extra/httpd-vhosts.conf

httpd-vhosts.conf yapılandırması

dosya: XAMPP / etc / extra / httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin admin@example.local
    DocumentRoot "/path_to_XAMPP/htdocs"
    ServerName example.local
    ServerAlias *.example.local
#    SetEnv APP_ENVIRONMENT development
#    ErrorLog "logs/example.local-error_log"
#    CustomLog "logs/example.local-access_log" common
</VirtualHost>

apache'yi yeniden başlat

pac dosyası oluştur:

whatever.pac dosyasını istediğiniz yere kaydedin ve dosyayı tarayıcının ağına yükleyin> proxy> auto_configuration ayarları (değiştirirseniz yeniden yükleyin)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

2

dnsmasq benim için çalıştı, ancak bazı ek adımlar atmam gerekti.

İşte tam prosedür:

  1. Başına ekle /etc/resolv.confaşağıdaki satırla

    nameserver 127.0.0.1
    
  2. Aşağıdaki satırları /etc/dnsmasq.conf

    listen-address=127.0.0.1
    address=/localhost.localdomain/127.0.0.1
    address=/localhost/127.0.0.1
    
  3. Dnsmasq'ı yeniden başlat


Dağıtımınız netplan kullanıyorsa bu işe yaramaz (ubuntu 18.04 sana bakıyorum)
MrMesees
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.