Forum Discussion
Logan_Ramirez_5
Dec 08, 2005Nimbostratus
conditional SNAT
We have a relatively simple environment: two data centers, one web server in each, one bigip in each. Basic pool in each office for web servers consists of (a) local web server and (b) other data center virtual server containing the other web server.
So, if local web down --> send to BIGIP in other DC to get serviced.
Recently, however, deployed an MPLS network with a couple of additional routers which has stopped this functionality from working (because I cannot, or do not know, how to get all of those routers to change their default gateway based on a web server failure).
While I could solve this by SNATTING all requests to the web server (the issue is the return path to the customer does not make it out because of incorrect default gateways in all intermediate routers), we use the IP logs for security auditing, etc.
What would be great is if when a external web request gets serviced by BIGIP, if it send the packet to the local web server, it does not SNAT, however, if it needs to send it to the other web server in the 2nd DC, it SNATS.
Being fairly new to iRules, I have no idea how to write this...would love some help...
- Logan_Ramirez_5NimbostratusI believe that did it!
when LB_SELECTED { if {[IP::addr [LB::server addr] equals "[insert server in pool you do not want to SNAT for here]"]} { snat none } }
- G__Wesley_RoberHistoric F5 AccountHi,
class NoNATNets { network 10.30.1.0 mask 255.255.255.0 network 10.30.100.0 mask 255.255.255.0 } pool gateway { member 10.30.1.254:any member 10.30.1.253:any } snat SNATInternal { automap origin 0.0.0.0 mask 0.0.0.0 vlan internal enable } rule DisableSnatWithClass { when CLIENT_ACCEPTED { if {[matchclass [IP::local_addr] eq $::NoNATNets]} { log "Matching NoNAT List, disabling SNAT: [IP::local_addr]" snat none forward } else { log "No Match in NoNAT List, allowing SNAT: [IP::local_addr]" pool gateway } } } virtual Outbound { destination any:any profile myfastl4 pool gateway rule DisableSnatWithClass vlans internal enable }
- Logan_Ramirez_5NimbostratusYes! This is awesome information!
- G__Wesley_RoberHistoric F5 AccountYou are most welcome. I ran out of gas last night, but here are the other (simpler) versions I came up with that may be useful for someone who has forwarding virtuals.
virtual ToExternalVLAN { destination 10.30.1.0:any ip forward mask 255.255.255.0 profile myfastl4 vlans external enable }
rule DisableSnat2NET { when CLIENT_ACCEPTED { if {[IP::addr [IP::local_addr] equals "10.30.1.0/24"]} { log "Not going to SNAT to destination: [IP::local_addr]" snat none } else { log "SNAT to destination: [IP::local_addr]" } }
rule JustDisableSNAT { The winner when CLIENT_ACCEPTED { log "Disabling SNAT" snat none }
Recent Discussions
Related Content
DevCentral Quicklinks
* 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
Discover DevCentral Connects