Dapatkah saya membuat override dns yang mirip dengan menulis di / etc / hosts tanpa akses root

48

Saya ingin menetapkan catatan dns yang akan digunakan browser saya, tetapi saya tidak memiliki akses root, jadi saya tidak dapat memodifikasi /etc/hosts. Saya perlu melakukan ini untuk menguji vhosts dengan apache, yang dnsnya belum diatur. Saya memiliki akses ke firefox, dan chrome, jadi jika ada plugin yang dapat memfasilitasinya; atau opsi lain sangat membantu.

update: alternatif untuk mengganti dns mungkin memodifikasi header HTTP, jika yang benar dikirim ke apache, konten yang benar harus dikembalikan.

xenoterracide
sumber
1
Baris terakhir tidak jelas. Juga, bukankah ini lebih cocok di SF?
tshepang
@tepang ... tidak karena saya perlu melakukan ini di desktop linux?
xenoterracide
1
Masih belum jelas. Apa arti "atau opsi lain yang membantu" sebenarnya? Jangan membuatku menebak.
tshepang
3
@tepang, saya tidak tahu apa yang saya cari ... jika saya tahu mengapa saya bertanya? mungkin ada opsi yang belum saya pertimbangkan. Saya merasa seperti Anda meminta saya untuk menjelaskan bagaimana host virtual apache, http, dan dns bekerja bersama.
xenoterracide
Saya pikir Anda sedang mencari ini: unix.stackexchange.com/a/104511/135943
Wildcard

Jawaban:

65

Saya sedang mencari cara untuk menjalankan program dengan resolusi DNS yang dimodifikasi untuk tujuan pengujian. Bagi saya, solusinya menggunakan HOSTALIASESvariabel lingkungan:

$ echo "foo www.google.com" >> ~/.hosts
$ HOSTALIASES=~/.hosts wget foo

Lihat hostname(7).

(Catatan: Dalam contoh, HOSTALIASESvariabel lingkungan hanya memengaruhi wgetproses. Tentu saja, Anda dapat export HOSTALIASESmembuatnya berlaku untuk semua subproses shell saat ini.)

matlehmann
sumber
1
sungguh ini harus seperti + 10rb, sayangnya saya hanya bisa memberi Anda +1
xenoterracide
Saya setuju! + 10rb !!
Anders Hansson
3
Terima kasih banyak! Misalnya harus tambahkan exportdalam banyak kasus: export HOSTALIASES=~/.hosts.
ezequiel-garzon
8
sepertinya hanya mendukung host ke host alias, bukan IP dan host tidak dapat memuat ".".
netawater
Apakah ada solusi yang sama untuk Windows?
Akceptor
10

Anda dapat menulis pembungkus di sekitar fungsi libc untuk menyelesaikan nama host dan mencarinya di file yang berbeda dari / etc / hosts. Kemudian jalankan aplikasi apa pun yang ingin Anda gunakan dengan file host Anda

LD_PRELOAD=wrapper.so firefox
chris
sumber
4
Paling berguna, buat pembungkus Anda mengarahkan ulang pembukaan /etc/nsswitch.confke ~/.nsswitch.conf, dan buat ~/.nsswitch.confyang menanyakan basis data DNS Anda.
Gilles 'SO- stop being evil'
6

Saya pikir cara terbaik untuk melakukan ini adalah dengan mengatur proxy SOCKS5 dan memberitahu firefox untuk mengirim permintaan DNS melalui proxy SOCKS5 (network.proxy.socks_remote_dns). Anda dapat mengatur proxy socks5 dengan openssh cukup mudah (opsi -D) dan menjalankan host jarak jauh dengan custom / etc / hosts, atau sesuatu seperti DNSMasq untuk pengaturan DNS yang lebih kompleks. Namun, secara efektif, ini mendorong konfigurasi pengaturan DNS ke sistem tempat Anda dapat melakukan perubahan di seluruh sistem.

jsbillings
sumber
lebih mudah diucapkan daripada dilakukan, mengingat firewall hebat yang telah didirikan untuk memblokir kita dari ssh-ing out ...
xenoterracide
5

Lihat pertanyaan berikut di superuser:

https://superuser.com/questions/184643/override-dns-in-firefox

Jika opsi yang dibahas dan tautan SO bukan solusi yang layak, maka periksa:

https://superuser.com/questions/100239/hostname-override-in-firefox

Terutama periksa:

https://addons.mozilla.org/en-US/firefox/addon/redirector/

Kedengarannya addon ini bisa membantu - tapi saya bergantung pada implementasinya yang sebenarnya.

maxschlepzig
sumber
sayangnya sangat mirip dengan op dalam pertanyaan itu tidak ada yang tampak layak.
xenoterracide
@ xenoterracide - Saya memperbarui jawaban saya - mungkin add-on redirector adalah sebuah opsi?
maxschlepzig
Saya tidak berpikir begitu dari cara itu worded .. apa yang saya benar-benar perlu lakukan adalah memodifikasi header HTTP yang dikirim ... sebagai opsi alternatif untuk meretas menggunakan host
xenoterracide
Saya mencari-cari solusi SO (TamperData) tapi saya tidak melihat cara memodifikasi host itu. Saya ingin tahu apakah hal tajuk http langsung benar-benar memungkinkan saya untuk memodifikasi tajuk, katanya adalah pemirsa.
xenoterracide
Saya pikir ekstensi Modify Header terdaftar sedikit di SO satu berfungsi ... jika Anda menggunakan Hostname nama ... di dalamnya ... belum diuji ... di luar situs melanggar menggunakannya.
xenoterracide
2

Untuk menguji vhosts, Anda dapat mengatur server Apache sebagai proksi di Firefox. Nama yang Anda masukkan akan diteruskan ke Apache. Ini akan menghentikan penjelajahan situs lain sehingga mengatur kembali proxy setelah Anda selesai.

BillThor
sumber
0

Saya membutuhkan sesuatu yang serupa untuk ssh, scp dll untuk server yang terus mengubah IP setiap beberapa minggu (dan IT kami memiliki penundaan beberapa minggu dalam pengaturan host). Saya menyelesaikannya dengan menggunakan variabel khusus untuk server ini: export FOO='131.227.aaa.bbbdan kemudian saya bisa melakukan apa saja ssh bar@$FOOdan saya mengubah IP ~/.bashrckapan saja itu berubah ...

BIOStheZerg
sumber
-2

Sial tidak, Anda tidak bisa, kecuali Anda menulis browser internet Anda sendiri.

Jika Anda harus melakukan beberapa tes, Anda memerlukan mesin uji, apa pun itu mesin virtual atau yang asli, jadi Anda harus bertanya kepada admin Unix Anda (atau penyedia hosting) bagaimana Anda dapat menempatkan lingkungan pengembangan.

Anda juga dapat menginstal VM di PC, menginstal distribusi Linux, Apache, dan menguji perubahan Anda (tidak sesulit kedengarannya)

Memperbarui

Untuk lebih jelasnya, setiap aplikasi ditulis menggunakan pustaka standar, dengan cara ini tidak ada yang harus menulis ulang pustaka tingkat rendah dan fungsi seperti gethostbyname ().

Fungsi-fungsi ini biasanya diatur untuk menggunakan file (/ etc / hosts) dan DNS, jadi, sial, jika Anda membutuhkan browser Anda akan menyelesaikan nama daripada yang diatur di / etc / hosts Anda tidak memiliki terlalu banyak alternatif .

  1. Anda dapat mengatur server DNS Anda sendiri dan bertanya siapa yang memiliki hak root untuk mengubah /etc/resolve.conf
  2. Anda dapat menginstal server proxy seperti DeleGate dan menetapkan beberapa aturan untuk VirtualHost Anda
  3. Tanyakan hak sudo pada host pelanggan itu
  4. Ubah perilaku aplikasi yang Anda gunakan untuk menguji koneksi (saya kira browser), misalnya https://addons.mozilla.org/en-US/firefox/addon/switchhosts/
tmow
sumber
4
-1 kata-kata buruk dan menggurui. Saya adalah penyedia hosting, dan itu adalah situs pelanggan sialan di server kami yang harus saya uji. Kami memiliki linux boot jaringan yang saya tidak punya akses admin, dan saya tidak percaya saya bisa mem-boot VM di dalamnya.
xenoterracide
@ xenoterracide tidak banyak bicara. Benar-benar tidak layak dengan apa yang Anda minta, kecuali Anda mengubah cara SOCKET dibuat.
tmow
1
@ xenoterracide BTW, tidak ada niat untuk menyinggung.
tmow
dan juga penyedia hosting ... Saya punya "hak sudo" sebenarnya, saya memiliki root nyata di setiap kotak, dan akses penuh ke semuanya ... kecuali desktop saya (eyeroll) tetapi jika mereka belum ingin mengubah server nama mereka .. Saya tidak bisa
menahannya
1
dengan LD_PRELOAD Anda dapat 'menimpa fungsi' tingkat rendah 'spesifik dan melakukan apa yang Anda inginkan, misalnya. menceritakan program tentang '/ etc / hosts' Anda sendiri open()dan panggilan tingkat rendah lainnya .. selama pemuatan kode dinamis dilakukan (.so)
akira