Forum Discussion

ccook_14058's avatar
ccook_14058
Icon for Nimbostratus rankNimbostratus
Dec 15, 2011

Exchange 2010 activesync not working

using the following Irule

 

 

when HTTP_REQUEST {

 

if { [HTTP::header "User-Agent"] contains "MSRPC" } {

 

persist uie [HTTP::header "Authorization"] 3600

 

pool Exchange_2010__single_oa_pool

 

HTTP::class disable

 

}

 

elseif { [HTTP::uri] contains "Microsoft-Server-ActiveSync" } {

 

persist cookie

 

pool Exchange_2010__single_as_pool

 

HTTP::class disable

 

}

 

else {

 

persist cookie

 

pool Exchange_2010__single_owa_pool

 

}

 

}

 

 

 

 

Traffic always ends up at the owa pool no matter what, If I remove the Irule and set the default resource pool to go to the activesync pool, active sync will connect just fine. It is just when I am relying on the Irule to split up the traffic I am unable to connect to activesync.

 

 

 

The template also attached the following Irule to this virtual server

 

 

 

when HTTP_REQUEST {

 

if { not ([HTTP::uri] starts_with "/owa") } {

 

HTTP::uri /owa[HTTP::uri]

 

}

 

}

 

 

 

 

 

 

any suggestions?

 

 

 

  • Hamish's avatar
    Hamish
    Icon for Cirrocumulus rankCirrocumulus
    I'm not at work at the moment, but that's not the same as the URI used on my activesync servers. (Admittedly they're 2007, and I'm not a windows person. Did they really change the URI used between 2007 and 2010?)

     

     

    Q. Why are you disabling HTTP processing? (I leave it on so I can log the response code, timings etc).

     

     

     

    H

     

  • Delete the iRule that sets the HTTP::uri/owa[HTTP::uri]. It's probably firing first, and then when the second evaluation of HTTP_REQUEST is occurring, you're always matching the /owa URI. The template you used is probably more for an OWA install only, and does not take into consideration your additional requirements of sending other Exchange protocols to other pool members.

     

  • One way to confirm the above is to log the URI before the if statement.

     

     

    log local0. "URI = [HTTP::uri]"

     

     

    This will log into the file /var/log/ltm.
  • mikeshimkus_111's avatar
    mikeshimkus_111
    Historic F5 Account
    Here's a modified version of the iRule that will be included with the next version of the Exchange 2010 iApp. It includes log statements that you can remove if you like.

     

     

    when HTTP_REQUEST {

     

     

    switch -glob -- [string tolower [HTTP::path]] {

     

     

    "/microsoft-server-activesync" {

     

    log local0. "ActiveSync URI detected"

     

    persist source_addr

     

    pool Exchange_2010__single_as_pool

     

    return

     

    }

     

     

    "/rpc/rpcproxy.dll" {

     

    log local0. "OutlookAnywhere URI detected"

     

    switch -glob [string tolower [HTTP::header "User-Agent"]] {

     

    "msrpc" {

     

    if { [HTTP::cookie exists "OutlookSession"] } {

     

    persist uie [HTTP::cookie "OutlookSession"] 7200

     

    } else {

     

    persist uie [HTTP::header "Authorization"] 7200

     

    }

     

    }

     

    "*microsoft office*" {

     

    persist uie [HTTP::header "Authorization"] 7200

     

    }

     

    default {

     

    persist source_addr

     

    }

     

    }

     

    Finally, this assigns the Outlook Anywhere pool.

     

    pool Exchange_2010__single_oa_pool

     

    return

     

    }

     

     

    default {

     

    log local0. "Fall through to default"

     

    persist cookie

     

    pool Exchange_2010__single_owa_pool

     

    }

     

    }

     

    }

     

     

    Also, here's the iRule we recommend for your OWA redirect:

     

     

    when HTTP_REQUEST {

     

    if { ([HTTP::uri] == "/") } {

     

    HTTP::uri /owa/

     

    }

     

    }
    • Hank_Moody_3649's avatar
      Hank_Moody_3649
      Icon for Nimbostratus rankNimbostratus

      Quote: Also, here's the iRule we recommend for your OWA redirect:

       

      when HTTP_REQUEST { if { ([HTTP::uri] == "/") } { HTTP::uri /owa/ } }

       

      Does this work also for the 2016er iApp? We have also problems with activesync.. My iRule does look like this:

       

      priority 900 when HTTP_REQUEST { if { ([HTTP::uri] == "/") } { HTTP::redirect https://[HTTP::host]/owa/ } }

       

    • boneyard's avatar
      boneyard
      Icon for MVP rankMVP

      i doubt your active sync issues are related to the OWA redirect.

       

      if you used the 2016 iApp then that should take care of these things, there is no reason to fiddle with them unless you are doing some very different things.

       

  • Adding to Mike's comment, this may be useful as well, which is stated in the DG.

     

    If the BIG-IP system is located behind a device that performs network address translation (NAT), and you are experiencing issues with iOS devices and ActiveSync, we recommend you modify the appropriate persistence iRule to include a wildcard character.

     

    eg "/microsoft-server-activesync*"

     

    and/or

     

    "/rpc/rpcproxy.dll*"