Forum Discussion
iRule DNS response code
I have several DNS nodes that I am sending traffic to.
I would like to write a rule that selects either a new pool or node if in the event one of my servers responds with a serv fail rcode in the DNS header in the DNS response.
Is this possible?
- PeteWhiteEmployee
Hi Phil,
I assume that you want to send the CURRENT request to the other node ie not subsequent requests ( as that is simple, just do an LB::reselect )
On the basis that you can do anything on the BIG-IP, yes it is possible. How it is possible is a bit more complex. 😀
Essentially, to do this you have to store the request data for all DNS requests and in the case of failure then you send them to a different node. The first point is that this means you will be storing a lot of extra data which will cause higher memory utilisation and is probably not a good idea - do not store client data on intermediate devices.
If you still want to do it, you can grab the payload and store it, if you get a serv fail then send the payload via sideband to the other node and respond to the client with the response ( i'll leave you to ponder what to do if you receive a second serv fail ).
If you want to do this in a nice, systemic and scalable way you can use the Message Routing Framework (MRF) function but that needs a bit more thought on your part.
Pseudocode:
when DNS_REQUEST { UDP::collect } when CLIENT_DATA { set payload [UDP::payload] } when DNS_RESPONSE { if response == servfail set sb [connect -proto UDP <destination>] send $sb $payload recv $sb response UDP::respond $response } }
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com