@@ -83,7 +83,7 @@ def _ipt_ttl(family, *args):
83
83
# multiple copies shouldn't have overlapping subnets, or only the most-
84
84
# recently-started one will win (because we use "-I OUTPUT 1" instead of
85
85
# "-A OUTPUT").
86
- def do_iptables_nat (port , dnsport , family , subnets , udp ):
86
+ def do_iptables_nat (port , dnsport , nslist , family , subnets , udp ):
87
87
# only ipv4 supported with NAT
88
88
if family != socket .AF_INET :
89
89
raise Exception (
@@ -134,7 +134,6 @@ def ipt_ttl(*args):
134
134
'--to-ports' , str (port ))
135
135
136
136
if dnsport :
137
- nslist = resolvconf_nameservers ()
138
137
for f , ip in filter (lambda i : i [0 ] == family , nslist ):
139
138
ipt_ttl ('-A' , chain , '-j' , 'REDIRECT' ,
140
139
'--dest' , '%s/32' % ip ,
@@ -143,7 +142,7 @@ def ipt_ttl(*args):
143
142
'--to-ports' , str (dnsport ))
144
143
145
144
146
- def do_iptables_tproxy (port , dnsport , family , subnets , udp ):
145
+ def do_iptables_tproxy (port , dnsport , nslist , family , subnets , udp ):
147
146
if family not in [socket .AF_INET , socket .AF_INET6 ]:
148
147
raise Exception (
149
148
'Address family "%s" unsupported by tproxy method'
@@ -194,7 +193,6 @@ def ipt_ttl(*args):
194
193
'-m' , 'udp' , '-p' , 'udp' )
195
194
196
195
if dnsport :
197
- nslist = resolvconf_nameservers ()
198
196
for f , ip in filter (lambda i : i [0 ] == family , nslist ):
199
197
ipt ('-A' , mark_chain , '-j' , 'MARK' , '--set-mark' , '1' ,
200
198
'--dest' , '%s/32' % ip ,
@@ -442,7 +440,6 @@ def do_ipfw(port, dnsport, family, subnets, udp):
442
440
IPPROTO_DIVERT )
443
441
divertsock .bind (('0.0.0.0' , port )) # IP field is ignored
444
442
445
- nslist = resolvconf_nameservers ()
446
443
for f , ip in filter (lambda i : i [0 ] == family , nslist ):
447
444
# relabel and then catch outgoing DNS requests
448
445
ipfw ('add' , sport , 'divert' , sport ,
@@ -483,7 +480,7 @@ def pfctl(args, stdin = None):
483
480
484
481
_pf_context = {'started_by_sshuttle' : False , 'Xtoken' :'' }
485
482
486
- def do_pf (port , dnsport , family , subnets , udp ):
483
+ def do_pf (port , dnsport , nslist , family , subnets , udp ):
487
484
global _pf_started_by_sshuttle
488
485
tables = []
489
486
translating_rules = []
@@ -502,7 +499,6 @@ def do_pf(port, dnsport, family, subnets, udp):
502
499
filtering_rules .append ('pass out route-to lo0 inet proto tcp to <forward_subnets> keep state' )
503
500
504
501
if dnsport :
505
- nslist = resolvconf_nameservers ()
506
502
tables .append ('table <dns_servers> {%s}' % ',' .join ([ns [1 ] for ns in nslist ]))
507
503
translating_rules .append ('rdr pass on lo0 proto udp to <dns_servers> port 53 -> 127.0.0.1 port %r' % dnsport )
508
504
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):
690
686
# exit. In case that fails, it's not the end of the world; future runs will
691
687
# supercede it in the transproxy list, at least, so the leftover rules
692
688
# 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 ):
694
690
assert (port_v6 >= 0 )
695
691
assert (port_v6 <= 65535 )
696
692
assert (port_v4 >= 0 )
@@ -777,14 +773,14 @@ def main(port_v6, port_v4, dnsport_v6, dnsport_v4, method, udp, syslog):
777
773
subnets_v6 = filter (lambda i : i [0 ] == socket .AF_INET6 , subnets )
778
774
if port_v6 :
779
775
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 )
781
777
elif len (subnets_v6 ) > 0 :
782
778
debug1 ("IPv6 subnets defined but IPv6 disabled\n " )
783
779
784
780
subnets_v4 = filter (lambda i : i [0 ] == socket .AF_INET , subnets )
785
781
if port_v4 :
786
782
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 )
788
784
elif len (subnets_v4 ) > 0 :
789
785
debug1 ('IPv4 subnets defined but IPv4 disabled\n ' )
790
786
@@ -826,7 +822,7 @@ def main(port_v6, port_v4, dnsport_v6, dnsport_v4, method, udp, syslog):
826
822
except :
827
823
pass
828
824
if port_v6 :
829
- do_it (port_v6 , 0 , socket .AF_INET6 , [], udp )
825
+ do_it (port_v6 , 0 , [], socket .AF_INET6 , [], udp )
830
826
if port_v4 :
831
- do_it (port_v4 , 0 , socket .AF_INET , [], udp )
827
+ do_it (port_v4 , 0 , [], socket .AF_INET , [], udp )
832
828
restore_etc_hosts (port_v6 or port_v4 )
0 commit comments