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
_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss