How to Configure MTU when using EDT across VPN solutions

If there is a modification to the MTU on the VPN, then EDT connections might fail and fall back to TCP. This is a limitation of the VPN which is not handling IP fragmentation properly.

The workaround involves lowering the ICA/EDT MSS to a known value that will not cause fragmentation.

This MTU value needs to be determined by the customer, for example by using a tool like mturoute.exe.

In the case of Azure-hosted NetScaler VPX, Azure limits MTU to 1400 on the Azure Gateway. Therefore the EDT MSS and Output Buffers Length must be set to 1350.

Steps

1. Define the EDT MSS and Output Buffers Length in the ICA file template in the Storefront server:

Open the default.ica file for editing (by default it is located in C:inetpubwwwrootCitrix<StoreName>App_Datadefault.ica)

Add the following options under the [Application] section:

OutBufLength=1480

udtMSS=1480 (add this line if using Receiver for Windows 4.7 – 4.12, Receiver for Mac 12.5 – 12.9, Receiver for Linux 13.6 – 13.10, Receiver for iOS 7.2 – 7.5.x, Receiver for Android 3.12.3 – 3.13.x, or Workspace app 1808 for Mac, Linux, iOS, or Android)

edtMSS=1480 (add this line if using Workspace app for Windows 1808+)

Note: 1480 was used as an example. Replace the value with the appropriate value determined by the customer, or with 1350 if using an Azure-hosted Citrix Gateway. The client and server will agree on sizes during the connection negotiation.

User-added image


2. Enable Receiver/Workspace app to read the custom EDT MSS and Output Buffers Length values.

If using Receiver for Windows 4.7- 4.12 (Receiver for Windows 4.9 CU4+ and Workspace app for Windows 1808+ do NOT require these modifications on the Client):

Create UDPStackParameters registry key, which is missing/off by default:

HKCUSOFTWARECitrixICA ClientEngineConfigurationAdvancedModulesUDPUDPStackParameters

User-added image


If using Receiver for Windows 4.7 / 4.8 / 4.9 / 4.9 CU1 / 4.9 CU2 / 4.9 CU3:

There is a legacy issue in these Receivers for Windows where OutbufLength, when passed in an ICA file, is ignored.

Even if the registry value is modified to “*”, meaning accept everything from the ICA file, the ICA file setting is still ignored.

For this to work, in addition to creating the “UDPStackParameters” key as mentioned above, it is also necessary to modify the OutbufLength value in the registry and set it to the desired value determined above (1480 in the example):

  • 64-bit Windows

    HKLMSOFTWAREWow6432NodeCitrixICA ClientEngineConfigurationAdvancedModulesTCP/IPOutbufLength
  • 32-bit Windows

    HKLMSOFTWARE CitrixICA ClientEngineConfigurationAdvancedModulesTCP/IPOutbufLength

If using Receiver for Mac:

Modify the appropriate App Property to allow Receiver to read the customer parameters in the ICA file. This property is set to NO by default.

To do this, open Terminal and run:

defaults write com.citrix.receiver.nomas UDPStackParameters -bool YES


If using Receiver for iOS:

Toggle the the “Read EDT stack parameter” option, which is disabled by default:

Settings > Advanced > Adaptive Transport Settings > Read EDT stack parameter

User-added image

Related:

Leave a Reply