Runtime-modifiable IP address sets¶
From within maintenance() or other places, we may find that certain IP
addresses must be treated differently for a certain time.
This may be used to temporarily shunt traffic to another pool for example.
TimedIPSetRule() creates an object to which native IP addresses can be
added in ComboAddress form.
-
TimedIPSetRule() → TimedIPSetRule¶ Returns a
TimedIPSetRule.
-
class
TimedIPSetRule Can be used to handle IP addresses differently for a certain time.
-
:add(address, seconds)¶ Add an IP address to the set for the next
secondseconds.Parameters: - address (ComboAddress) – The address to add
- seconds (int) – Time to keep the address in the Rule
-
:cleanup()¶ Purge the set from expired IP addresses
-
:clear()¶ Clear the entire set
-
:slice()¶ Convert the TimedIPSetRule into a DNSRule that can be passed to
addAction()
-
A working example:
tisrElGoog=TimedIPSetRule()
tisrRest=TimedIPSetRule()
addAction(tisrElGoog:slice(), PoolAction("elgoog"))
addAction(tisrRest:slice(), PoolAction(""))
elgoogPeople=newNMG()
elgoogPeople:addMask("192.168.5.0/28")
function pickPool(dq)
if(elgoogPeople:match(dq.remoteaddr)) -- in real life, this would be external
then
print("Lua caught query for a googlePerson")
tisrElGoog:add(dq.remoteaddr, 10)
return DNSAction.Pool, "elgoog"
else
print("Lua caught query for restPerson")
tisrRest:add(dq.remoteaddr, 60)
return DNSAction.None, ""
end
end
addAction(AllRule(), LuaAction(pickPool))