Application virtualization, IoT and Cloud Computing, Blog of Sacha Thomet

Citrix CVAD and MTU Discovery

Recently I saw an increased number of issues by connecting to Citrix virtual desktops and apps. Desktops were connected from private devices over a Citrix ADC (aka Netscaler) but virtual apps were connected from our internal network from different branch offices.
I wrote a blog article some weeks ago: Issues by accessing Citrix Virtual Apps and Desktops on a pure IPv6 Internet Provider with enabled EDT

Our first workaround for this issue was to disable the UDP based EDT protocol which is now the default for Citrix Virtual Apps and Desktops. But this is not really our intended solution because all the benefits of EDT get lost, so we just did it on client-side with a reg hack, but so we have to identify all the clients with issues. (see the recent blog article)

Further analysis of this issue showed that the root cause of this issue is on the MTU, which means the Maximum Transmission Unit or simplified said Package size.
I found out that our branch offices has a smaller MTU than 1500 what is the default, the reason is a crypto-tunnel which is configured to all our branches. So there will be a fragmentation of the packages, in some cases the fragmentation causes problems because the payload is no more enough that a session launch will work. It looks like EDT is much more sensible on that than the classic ICA protocol on TCP.

Solution 1: How to configure MSS when using EDT on networks with non-standard MTU
In the recent blog article, I called Citrix “please fix that” but they already started on this at this point. In this article, you can see how to configure EDT for non-standard MTUs https://support.citrix.com/article/CTX231821 e.g. put the MTU to 1480 with the default.ica
The disadvantage of this solution is that the MTU is lowered for all connections, also it’s needed to figure out which MTU fits best. The benefit of this solution that it works on every platform with the exception of Android.

Solution 2: enable MTU Discovery
An even smarter option Citrix introduces on the background with CVAD 19.12, this is MTU Discovery for EDT. This feature gives the possibility to have the best MTU for each session. MTU discovery is not a invention by Citrix, just new on EDT. You can read more about MTU discovery here:
https://en.wikipedia.org/wiki/Path_MTU_Discovery

I tried to visualize these 3 scenarios:

standard, MTU set to 1500

Default configuration, MTU to 1500

The default is that MTU of 1500 bytes are sent, if the MTU on the path is somewhere smaller the package gets fragmented, what is not a big issue but in real life we see that it can be a problem.

MTU reduced to 1380 bytes according to the mentioned Citrix article
(Change in default.ica on StoreFront)

Now packaged of 1380 bytes are transmitted.
Is the possible MTU somewhere on the path smaller than 1380, the packages are still fragmented. Example on this picture, the BYOD client from the Internet.
Also, the MTU is lowered when not needed, in this example the Client in the HQ
+ This solution works on all platforms except Android.

MTU with MTU Discovery (Registry Setting on VDA)

MTU Discovery alway use best MTU

+ The MTU is figured out optimal and individually for every session. First, the Session will start with 1024 bytes and the MTU will be increased during the Session.
– Needs Citrix Workspace App for Windows 19.11 or newer.
– If the connection goes over an ADC its a minimum required version 13.0.52.24 or 12.1.56.22. If you are on a lower version the MTU perhaps remains on 1024 bytes!

You can check your EDT MTU with this command:
ctxsession -v

MTU Discovery is today not active as a default, you need to activate it on the VDA with a Registry Key, the VDA must be at minimum 19.12, details here: https://docs.citrix.com/en-us/citrix-virtual-apps-desktops/technical-overview/hdx/adaptive-transport.html#edt-mtu-discovery

Update 5.6.2020 – Combine solutions 1 and 2 and have the best config!
For our case, we have separated Storefront Servers for access via ADC, so I decided to implement a solution with the best of both worlds… I set the MTU in the default.ica to 1300 and I enable MTU Discovery – so Apple macOS can use the setting from the default.ica and Windows computers have the optimal value with MTU discovery

Technical:
on VDA, add this DWORD: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\icawd
Name: MtuDiscovery
Type: DWORD
Data: 00000001

default.ica, add this lines:
OutBufLength=1300
udtMSS=1300
edtMSS=1300

If MTU Discovery is active, means enabled and accessed from a Citrix Workplace App the MTU Discovery override the value set in the default.ica, what is very helpful!

How do you configure MTU on your Citrix with EDT environment? Leave a comment!

14 Responses to Citrix CVAD and MTU Discovery

  • Makes me wonder if that what causing the fautly64000ms on network latency and ICA RTT?

  • How do you do d out what MTU your supposed to use?

    • That’s not so easy, especially if you don’t have control of your endpoints. It’s more or less try & error and best guess … I’ve done first the Autodiscovery part and I tested with Windows computers in these “problematic” networks. mostly I had an MTU of 1464, so for now I decided to set the MTU in the default.ica (for Mac, iOS, and Linux) to 1450. Of course, that’s no guarantee that all will be 100% fine, but a much better chance than before.

  • How can I make sure that MTU Discovery is working? I tested in my environment and I just see MTU in 1500.

    • This does not mean that it doesn’t work, in an ideal case you have actually an MTU of 1500.

      • Ok, but is there a way to confirm that discovery is working?

        • use a network with a lower MTU to test.

          • I’ve changed on my windows client by netsh to 1498, but nothing changed on VDA. Should my client MTU reflect on VDA, right?

          • Yes, e.g. I set my MTU to 1360 (netsh interface ipv4 set subinterface “Ethernet” mtu = 1362 store = persistent) then I reconnect to my Citrix Session which had an EDT MTU of 1498 then I can see that it’s now on 1360.
            If this does not happen check:
            – Do you have a supported ADC Netscaler Version (if the connection goes over Netscaler ADC)
            – is the Registry key set on the VDA
            – do you have Citrix Workspace App for Windows Version 19.12 or greater?
            – Do you have CVAD 1912 or greater

  • We are using VDA 2006, Citrix Workspace 2006, Citrix Netscaler 12.1.57.18 and registry key was set. What version of Citrix ADC do you have?

    • I’m on 12.1 Build 57.18. Does it work internally without the ADC?

      • Internally I Didn’t test. But we are using other ADC to internal access too! All my access is by GW.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Follow me on Twitter