On 20 Jan 2014, at 16:41, Ed W <li...@wildgooses.com> wrote:

> On 18/01/2014 16:59, Lee Essen wrote:
>> Hi,
>> 
>> I’ve been a long time user of the ipset functionality of dnsmasq which has 
>> been fantastic for selective domain-based routing using iptables. Recently 
>> I’ve been looking at using a different device to handle my routing, separate 
>> to the dnsmasq instance … obviously that makes it difficult to make use of 
>> the ipset's.
>> 
>> Specifically I’m looking at a MikroTik device which can maintain it’s own 
>> lists (I’m sure it’s really ipsets under the covers.) In the same way as 
>> iptables, it can build “lists” based on src or dst address of incoming 
>> packets.
>> 
>> I started to look at adjusting the ipset code so that rather than add to 
>> sets, it would send a udp packet to a given address but with a src address 
>> matching the address that would have been added to the ipset … in that way 
>> you can match specific udp packets on a different machine and use that to 
>> build the “list”. Thus allowing the dnsmasq instance to be separate from 
>> your firewall.
>> 
>> In the process of trying to modify the code it was easier to add a more 
>> generic “action” concept than add individual support for udp sending. Plus 
>> you might want to do other things as well … potentially run a script/lua 
>> etc? (obviously with performance considered.)
>> 
>> So, I have put together a patch that changes the ipset functionality into 
>> “action”, where you can specify either ipset or udp as an action.
>> 
>> For example:
>> 
>> action=/google.com/google.co.uk/ipset=fred,udp=1.2.3.4:7800,udp=2.3.4.5:345
>> action=/sun.com/udp=10.0.0.1:4500
>> 
>> It’s only an idea, but I thought rather than keeping it as a personal patch 
>> I’d share it and see if anyone thinks it has any merit.
> 
> I have a slightly related requirement. I have a router with several internet 
> routes, one might be a very slow (dialup) satellite based service (300 
> bytes/sec) and another a broadband wifi connection. I need to constrain DNS 
> requests going to the satellite route quite significantly as it's easy to 
> flood the interface (in fact this is happening now as the roundtrip times 
> will often be 10-30 seconds for a response (queues on the remote side) and 
> the request might be repeated multiple times during that period, leading to 
> many duplicate answers and much wasted time).
> 
> What I really need is to possibly serve stale data while the dialup 
> connection is offline, and when online rate limit and possibly refuse to 
> serve certain requests, eg virus updaters, push messaging, etc.
> 
> Right now I have a situation where I can setup a firewall to allow only 
> POP/SMTP and DNS, but as soon as an ipad/laptop hits the connection, it's 
> getting initially close to saturated with DNS requests for push messages, 
> update ips, etc (connections to which will later get dropped by the firewall, 
> but the DNS lookups are killing me. We recently saw a badly behaving AV 
> scanner consuming several MB per hour in dns traffic checking for 
> updates...). Also packets are sent to every upstream DNS server, which is 
> sensible for when on wifi, but is halving the limited bandwidth when on 
> satellite
> 
> I am easing into considering whether to add a DNS proxy so that I can do all 
> kinds of scriptable stuff here, but it seems valuable to try and figure out 
> whether it could be more generally included into dnsmasq
> 
> I guess the generic solution here is something Simon has resisted in the 
> past, but something like an embedded fast interpreter (say lua) which can be 
> hooked into the request and reply chain to make decisions... I guess this is 
> something like squids ecap. Performance is obviously going to be affected, 
> but I guess such a requirement wouldn't be deployed for high performance 
> situations anyway...
> 
> So the more generic solution might cover situations such as:
> - Modify TTL in response
> - Rate limit/deny/route upstream requests based on some aspect of the source 
> request
> - Perform some action based on the response, eg update ipset, custom logging, 
> inform centralised fail2ban instance, etc.
> 
> I guess we should start with: has this got any wings at all?
> 
> I might be interested in sponsoring Simon to make such an enhancement. (I 
> think we have exchanged emails on a similar idea in the past?) Anyone else 
> want to pitch in?
> 
> Ed W

Hi Ed,

I really like Lus so I messed around with some code for this today, at least 
the reply bit … it’s pretty easy to get some really basic functionality, but 
there are a whole load of considerations. It would need to be outside of the 
existing ‘helper’ mechanism for scripts because it needs to wait for a result, 
plus there are issues with where you hook into, given caching etc.

Actually the more I played with it the more I convinced myself that it’s not 
such a good idea … at least for trying to implement as an afterthought. If 
dnsmasq had been built with it in mind it would probably be different.

I’m going to have a go at re-implementing my initial idea, but just with a 
different config option for ‘udp-send’ or something like that without the 
complexity of multiplexing the config, so that it happily co-exists with ipset 
and only provides udp functionality.

For you, couldn’t you implement something with iptables to limit bandwidth for 
dns traffic?

Regards,

Lee.


_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss

Reply via email to