You may want to look at xRDP protocol binding, when installing if IPv6 is enabled it will bind it services to it and ignore IPv4.

Solution is to disable IPv6 and reinstall xRDP

*Thank You*
Sean Hulbert


On 4/1/2026 2:48 AM, Nick Couchman wrote:

On Wed, Apr 1, 2026 at 3:20 AM Makarem Dandouna <[email protected]> wrote:


        Hello everyone,

        I am trying to connect to a Linux VM from Guacamole using the
        RDP protocol to access the desktop environment. I have two
        different configurations:

         1. *Direct Connection*:
            Guacamole connects directly to the Linux VM using the RDP
            protocol. The Linux VM has xrdp installed and running.
            This configuration works well, and I can successfully
            access the desktop of the VM.
         2. *Indirect Connection via Gateway*:
            In this configuration, the network flow is restricted, and
            direct communication between Guacamole and the target VM
            is not allowed for security reasons. To overcome this, I
            am using a gateway as an intermediary. The gateway can
            communicate directly with the Guacamole server over the
            network and can also establish a connection to the target
            VM through a Google IAP (Identity-Aware Proxy) tunnel.
            Below is a simple schema explaining the architecture of
            this solution.

        *Architecture*:

              * The Guacamole server communicates with the gateway
                using the RDP protocol on port 4200.
              * The gateway has an Nginx reverse proxy that binds port
                4200 to the local port 9200.
              * A gcloud command is used to open an IAP tunnel from
                the local port 9200 on the gateway to the remote port
                3389 on the target VM.
              * The target VM has an xrdp client listening on port 3389.


Does this configuration work with other RDP clients, like xfreerdp or the Microsoft Remote Desktop client? While Nginx is a fine reverse proxy, my experience is that it only proxies HTTP/S and WebSocket/S traffic, and is not a generic TCP/UDP proxy. The configuration you have, here, appears to be attempting to use Nginx to proxy RDP traffic, something that I do not believe Nginx is capable of doing. I could be wrong about that, but you might want to try something like HAProxy, instead, as that provides more generic TCP proxying capabilities. Or, if port 9200 is being opened to tunnel through to the RDP server, why not just allow Guacamole to connect directly to that port instead of the tunnel through Nginx/HAProxy? Some clarity on why you've decided to use Nginx, here, would be helpful.

Also, depending on how the Google IAP tunnel operates, and, in particular, how long it takes for that tunnel to be established, I could foresee some timing issues between that and the attempted RDP connection.

        *Error message on xrp side:*

        In /var/log/xrdp.log

        2026-03-27T15:41:47.626+0000] [INFO ] Socket 14: connection
        accepted from [::ffff:35.235.240.96]:46875

        [2026-03-27T15:41:47.629+0000] [INFO ] Using default X.509
        certificate: /etc/xrdp/cert.pem

        [2026-03-27T15:41:47.632+0000] [INFO ] Using default X.509 key
        file: /etc/xrdp/key.pem

        [2026-03-27T15:41:50.631+0000] [ERROR] libxrdp_force_read:
        header read error

        [2026-03-27T15:41:50.633+0000] [ERROR] [ITU-T X.224]
        Connection Sequence: CR-TPDU (Connection Request) failed

        [2026-03-27T15:41:50.634+0000] [ERROR] xrdp_sec_incoming:
        xrdp_iso_incoming failed

        [2026-03-27T15:41:50.635+0000] [ERROR] xrdp_rdp_incoming:
        xrdp_sec_incoming failed

        [2026-03-27T15:41:50.637+0000] [ERROR] xrdp_process_main_loop:
        libxrdp_process_incoming failed

        [2026-03-27T15:41:50.638+0000] [ERROR] xrdp_iso_send:
        trans_write_copy_s failed

        [2026-03-27T15:41:50.640+0000] [ERROR] Sending [ITU T.125]
        DisconnectProviderUltimatum failed

        *In the gateway side: *

        The gcloud command that creates the  iap tunnel is closed with
        just the message killed

        I can see in the logs of the reverse proxy :

        connect() failed (111: Connection refused) while connecting to
        upstream, client: <ip of guacamole server>, server:
        0.0.0.0:4200 <http://0.0.0.0:4200>, upstream: "127.0.0.1:9200
        <http://127.0.0.1:9200>", bytes from/to client:0/0, bytes
        from/to client:0/0,bêtes from/to upstream:0/


You probably need to look at the guacd log output along with increasing the verbosity of the Nginx logs to further diagnose this. Also, please be aware that your output posted from your xrdp logs has a public Internet IP address listed in it.

-NIck

Reply via email to