I'm getting a really strange error every time I try to edit a Schema.  You open the schema and can edit the `General` tab.  However, when you click on the `Design` or `Metadata Design` tabs and no fields show up.  After a few seconds the following message pops up on the Info Bar:

![enter image description here][1] 

Here is the full stacktrace from the Event Viewer log:

> Communication with the underlying transaction manager has failed. The
> MSDTC transaction manager was unable to push the transaction to the
> destination transaction manager due to communication problems.
> Possible causes are: a firewall is present and it doesn't have an
> exception for the MSDTC process, the two machines cannot find each
> other by their NetBIOS names, or the support for network transactions
> is not enabled for one of the two transaction managers. (Exception
> from HRESULT: 0x8004D02A)


> Component: Tridion.ContentManager.CoreService Errorcode: 0 User: NT AUTHORITY\NETWORK SERVICE   StackTrace Information Details:    at
> System.Transactions.Oletx.ITransactionShim.Export(UInt32
> whereaboutsSize, Byte[] whereabouts, Int32& cookieIndex, UInt32&
> cookieSize, CoTaskMemHandle& cookieBuffer)    at
> System.Transactions.TransactionInterop.GetExportCookie(Transaction
> transaction, Byte[] whereabouts)    at
> System.Transactions.TransactionInterop.GetExportCookie(Transaction
> transaction, Byte[] whereabouts)    at
> System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction
> tx)    at
> System.Data.ProviderBase.DbConnectionPool.PrepareConnection(DbConnection
> owningObject, DbConnectionInternal obj, Transaction transaction)    at
> System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection
> owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean
> allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions
> userOptions, DbConnectionInternal& connection)    at
> System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection
> owningObject, TaskCompletionSource`1 retry, DbConnectionOptions
> userOptions, DbConnectionInternal& connection)    at
> System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection
> owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions
> userOptions, DbConnectionInternal oldConnection, DbConnectionInternal&
> connection)    at
> System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection
> outerConnection, DbConnectionFactory connectionFactory,
> TaskCompletionSource`1 retry, DbConnectionOptions userOptions)    at
> System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1
> retry)    at
> System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1
> retry)    at System.Data.SqlClient.SqlConnection.Open()    at
> Tridion.ContentManager.Data.AdoNet.Sql.SqlDatabaseUtilities.GetConnection()
> at
> Tridion.ContentManager.Data.AdoNet.Sql.SqlDatabaseUtilities.GetStoredProcedureCommand(StoredProcedureInvocation
> storedProcedureInvocation)    at
> Tridion.ContentManager.Data.AdoNet.Sql.SqlDatabaseUtilities.Execute(StoredProcedureInvocation
> storedProcedureInvocation)    at
> Tridion.ContentManager.Data.AdoNet.IdentifiableObjectDataMapper.Read(TcmUri
> id, StoredProcedureInvocation spInvocation)    at
> Tridion.ContentManager.Data.AdoNet.IdentifiableObjectDataMapper.Tridion.ContentManager.Data.IIdentifiableObjectDataMapper.Read(TcmUri
> id)    at Tridion.ContentManager.Session.GetDataObject(TcmUri id)   
> at Tridion.ContentManager.IdentifiableObject.Load(LoadFlags flags,
> Boolean forceReload)    at
> Tridion.ContentManager.ContentManagement.VersionedItem.Load(LoadFlags
> flags, Boolean forceReload)    at
> Tridion.ContentManager.IdentifiableObject.Load(LoadFlags flags)    at
> Tridion.ContentManager.CoreService.CoreServiceBase.GetSubject(String
> id, ReadOptions readOptions)    at
> Tridion.ContentManager.CoreService.CoreServiceBase.Save(IdentifiableObjectData
> deltaData, ReadOptions readBackOptions)    at SyncInvokeSave(Object ,
> Object[] , Object[] )    at
> System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object
> instance, Object[] inputs, Object[]& outputs)    at
> Tridion.ContentManager.CoreService.CoreServiceInvoker.Invoke(Object
> instance, Object[] inputs, Object[]& outputs)    at
> System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&
> rpc)    at
> System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&
> rpc)    at
> System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&
> rpc)    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean
> isOperationContextSet)


Our CM is hosted on Amazon EC2 and is set to only be accessible via the client's VPN.

Things we've tried:

 1. Verified that this happens for all users - yep, it's a show stopper for all, not just me.
 2. Verified that this happens in various browsers - yep, same problem in IE11 and Chrome
 3. Verified that we can create and edit other Tridion items just fine (e.g. Components, Pages, Categories, Keywords, Folders, SGs).
 4. Got the network guys to check if it's a firewall issue - They say they've checked the firewall settings and everything is open.
 5. Read the following article: http://support.microsoft.com/kb/250367 and http://blog.eldert.net/wcf-sql-adapter-using-msdtc-cross-domain/, but without a network guy by my side I can't verify any network settings.

The articles suggest updating various firewall settings, however, would it make sense that Tridion functionality other than editing Schemas would also be broken?  We can edit and do all other functional stuff just fine.  So why does this only happen when editing Schemas?
Has anyone else encountered this error and can pinpoint the cause of the issue (other than a high-level "it's somewhere in your network/firewall)?

  [1]: https://i.sstatic.net/5tDtv.png