@@ -83,7 +83,7 @@ def _ipt_ttl(family, *args):
8383# multiple copies shouldn't have overlapping subnets, or only the most-
8484# recently-started one will win (because we use "-I OUTPUT 1" instead of
8585# "-A OUTPUT").
86- def do_iptables_nat (port , dnsport , family , subnets , udp ):
86+ def do_iptables_nat (port , dnsport , nslist , family , subnets , udp ):
8787 # only ipv4 supported with NAT
8888 if family != socket .AF_INET :
8989 raise Exception (
@@ -134,7 +134,6 @@ def ipt_ttl(*args):
134134 '--to-ports' , str (port ))
135135
136136 if dnsport :
137- nslist = resolvconf_nameservers ()
138137 for f , ip in filter (lambda i : i [0 ] == family , nslist ):
139138 ipt_ttl ('-A' , chain , '-j' , 'REDIRECT' ,
140139 '--dest' , '%s/32' % ip ,
@@ -143,7 +142,7 @@ def ipt_ttl(*args):
143142 '--to-ports' , str (dnsport ))
144143
145144
146- def do_iptables_tproxy (port , dnsport , family , subnets , udp ):
145+ def do_iptables_tproxy (port , dnsport , nslist , family , subnets , udp ):
147146 if family not in [socket .AF_INET , socket .AF_INET6 ]:
148147 raise Exception (
149148 'Address family "%s" unsupported by tproxy method'
@@ -194,7 +193,6 @@ def ipt_ttl(*args):
194193 '-m' , 'udp' , '-p' , 'udp' )
195194
196195 if dnsport :
197- nslist = resolvconf_nameservers ()
198196 for f , ip in filter (lambda i : i [0 ] == family , nslist ):
199197 ipt ('-A' , mark_chain , '-j' , 'MARK' , '--set-mark' , '1' ,
200198 '--dest' , '%s/32' % ip ,
@@ -442,7 +440,6 @@ def do_ipfw(port, dnsport, family, subnets, udp):
442440 IPPROTO_DIVERT )
443441 divertsock .bind (('0.0.0.0' , port )) # IP field is ignored
444442
445- nslist = resolvconf_nameservers ()
446443 for f , ip in filter (lambda i : i [0 ] == family , nslist ):
447444 # relabel and then catch outgoing DNS requests
448445 ipfw ('add' , sport , 'divert' , sport ,
@@ -483,7 +480,7 @@ def pfctl(args, stdin = None):
483480
484481_pf_context = {'started_by_sshuttle' : False , 'Xtoken' :'' }
485482
486- def do_pf (port , dnsport , family , subnets , udp ):
483+ def do_pf (port , dnsport , nslist , family , subnets , udp ):
487484 global _pf_started_by_sshuttle
488485 tables = []
489486 translating_rules = []
@@ -502,7 +499,6 @@ def do_pf(port, dnsport, family, subnets, udp):
502499 filtering_rules .append ('pass out route-to lo0 inet proto tcp to <forward_subnets> keep state' )
503500
504501 if dnsport :
505- nslist = resolvconf_nameservers ()
506502 tables .append ('table <dns_servers> {%s}' % ',' .join ([ns [1 ] for ns in nslist ]))
507503 translating_rules .append ('rdr pass on lo0 proto udp to <dns_servers> port 53 -> 127.0.0.1 port %r' % dnsport )
508504 filtering_rules .append ('pass out route-to lo0 inet proto udp to <dns_servers> port 53 keep state' )
@@ -690,7 +686,7 @@ def pf_add_anchor_rule(type, name):
690686# exit. In case that fails, it's not the end of the world; future runs will
691687# supercede it in the transproxy list, at least, so the leftover rules
692688# are hopefully harmless.
693- def main (port_v6 , port_v4 , dnsport_v6 , dnsport_v4 , method , udp , syslog ):
689+ def main (port_v6 , port_v4 , dnsport_v6 , dnsport_v4 , nslist , method , udp , syslog ):
694690 assert (port_v6 >= 0 )
695691 assert (port_v6 <= 65535 )
696692 assert (port_v4 >= 0 )
@@ -777,14 +773,14 @@ def main(port_v6, port_v4, dnsport_v6, dnsport_v4, method, udp, syslog):
777773 subnets_v6 = filter (lambda i : i [0 ] == socket .AF_INET6 , subnets )
778774 if port_v6 :
779775 do_wait = do_it (
780- port_v6 , dnsport_v6 , socket .AF_INET6 , subnets_v6 , udp )
776+ port_v6 , dnsport_v6 , nslist , socket .AF_INET6 , subnets_v6 , udp )
781777 elif len (subnets_v6 ) > 0 :
782778 debug1 ("IPv6 subnets defined but IPv6 disabled\n " )
783779
784780 subnets_v4 = filter (lambda i : i [0 ] == socket .AF_INET , subnets )
785781 if port_v4 :
786782 do_wait = do_it (
787- port_v4 , dnsport_v4 , socket .AF_INET , subnets_v4 , udp )
783+ port_v4 , dnsport_v4 , nslist , socket .AF_INET , subnets_v4 , udp )
788784 elif len (subnets_v4 ) > 0 :
789785 debug1 ('IPv4 subnets defined but IPv4 disabled\n ' )
790786
@@ -826,7 +822,7 @@ def main(port_v6, port_v4, dnsport_v6, dnsport_v4, method, udp, syslog):
826822 except :
827823 pass
828824 if port_v6 :
829- do_it (port_v6 , 0 , socket .AF_INET6 , [], udp )
825+ do_it (port_v6 , 0 , [], socket .AF_INET6 , [], udp )
830826 if port_v4 :
831- do_it (port_v4 , 0 , socket .AF_INET , [], udp )
827+ do_it (port_v4 , 0 , [], socket .AF_INET , [], udp )
832828 restore_etc_hosts (port_v6 or port_v4 )
0 commit comments