Anda tidak dapat dengan mudah melakukan apa yang Anda inginkan.
Atau bagaimana cara mengonfigurasi Server Nama DNS yang berbeda untuk eth0 vs eth1?
Pencarian nama untuk nama host terjadi melalui pustaka sistem standar dan sama sekali tidak terkait dengan "koneksi" tertentu. Nyatanya, saat kueri DNS terjadi, ada tidak ada koneksi, karena aplikasi Anda bahkan belum menemukan alamat yang akan dihubungkan (itulah sebabnya aplikasi menggunakan DNS sejak awal).
Bagaimana saya membuatnya menghormati pengaturan DNS di ifcfg daripada default untuk resolv.conf?
Resolver Linux hanya memiliki satu konfigurasi global (/etc/resolv.conf
). Tidak ada pengaturan per-antarmuka, per-domain, atau per-koneksi dalam bentuk apa pun. Pengaturan di /etc/sysconfig/network-scripts/...
hanya digunakan untuk mengisi /etc/resolv.conf
, dan umumnya jika Anda menentukan DNS1
dan DNS2
dalam file-file ini, antarmuka terakhir yang muncul adalah apa yang Anda lihat di /etc/resolv.conf
.
Apakah ada cara yang lebih baik untuk menangani ini?
Bisakah Anda memberi tahu kami apa yang sebenarnya ingin Anda capai? Kami mungkin dapat menyarankan solusi yang lebih baik jika Anda dapat memberi tahu kami lebih banyak tentang situasi khusus Anda.
Permintaan DNS pada dasarnya adalah
- "apa alamat IP dari host1.domain1.com," atau
- "apa nama host 192.168.0.5."
Jadi tidak ada yang tahu pada saat "permintaan" kartu Ethernet mana yang akan dilibatkan. Apa yang Anda bisa tanyakan secara wajar adalah "semua permintaan yang diakhiri dengan 'domain1.com' harus ke 192.168.0.2, dan semua permintaan lainnya harus ke 10.0.0.2."
Demikian juga, "Semua permintaan DNS balik yang cocok dengan 192.168.0.0/24 harus menuju ke 192.168.0.2, dan sisanya harus mengarah ke 10.0.0.2."
Seperti yang dikatakan larsk, Linux tidak mendukung konfigurasi seperti itu. Namun, Anda dapat menjalankan server DNS minimal Anda sendiri yang mengimplementasikan logika di atas, dan meneruskan permintaan ke server DNS "nyata" yang sesuai.
Saya yakin dnsmasq dapat melakukan ini (lihat Bagaimana cara mengonfigurasi dnsmasq untuk meneruskan beberapa server DNS?). Tetapi sebelum saya mengetahuinya, saya memutar sendiri di Twisted:
from twisted.internet import reactor
from twisted.names import dns
from twisted.names import client, server
class Resolver(client.Resolver):
def queryUDP(self, queries, timeout=None):
if len(queries) > 0 and (str(queries[0].name).endswith('.domain1.com'):
self.servers = [('192.168.0.2', 53)]
else:
self.servers = [('10.0.0.2', 53)]
return client.Resolver.queryUDP(self, queries, timeout)
resolver = Resolver(servers=[('10.0', 53)])
factory = server.DNSServerFactory(clients=[resolver])
protocol = dns.DNSDatagramProtocol(factory)
reactor.listenUDP(53, protocol, interface='127.0.0.1')
reactor.listenTCP(53, factory, interface='127.0.0.1')
reactor.run()