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
second
seconds.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))