Commit 4c5185dc authored by Avery Pennarun's avatar Avery Pennarun

dns: extract 'nameserver' lines from /etc/resolv.conf

parent a2fcb08a
......@@ -82,8 +82,10 @@ def do_iptables(port, dnsport, subnets):
'--to-ports', str(port))
if dnsport:
nslist = resolvconf_nameservers()
for ip in nslist:
ipt_ttl('-A', chain, '-j', 'REDIRECT',
'--dest', '192.168.42.1/32',
'--dest', '%s/32' % ip,
'-p', 'udp',
'--dport', '53',
'--to-ports', str(dnsport))
......
......@@ -35,3 +35,26 @@ def list_contains_any(l, sub):
if i in l:
return True
return False
def resolvconf_nameservers():
l = []
for line in open('/etc/resolv.conf'):
words = line.lower().split()
if len(words) >= 2 and words[0] == 'nameserver':
l.append(words[1])
return l
def resolvconf_random_nameserver():
l = resolvconf_nameservers()
if l:
if len(l) > 1:
# don't import this unless we really need it
import random
random.shuffle(l)
return l[0]
else:
return '127.0.0.1'
......@@ -114,7 +114,7 @@ class DnsProxy(Handler):
self.mux = mux
self.chan = chan
self.sock.setsockopt(socket.SOL_IP, socket.IP_TTL, 42)
self.sock.connect(('192.168.42.1', 53))
self.sock.connect((resolvconf_random_nameserver(), 53))
self.sock.send(request)
def callback(self):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment