Remote Desktop Gateway in Go for deploying on Linux/BSD/Kubernetes
Find a file
2020-07-20 15:57:34 +02:00
.github/workflows Add more documentation 2020-07-18 19:42:06 +02:00
config Clean up config handling 2020-07-19 14:37:31 +02:00
protocol Rename to proper 2020-07-20 15:57:34 +02:00
transport more cleanups 2020-07-20 12:52:46 +02:00
download.go Refactor config and improve security 2020-07-18 19:17:53 +02:00
errors.go More refactor 2020-07-20 15:51:23 +02:00
go.mod Add more documentation 2020-07-18 19:42:06 +02:00
http.go First working version 2020-06-30 09:40:53 +02:00
LICENSE Add license file 2020-07-13 13:06:57 +02:00
main.go More refactor 2020-07-20 15:51:23 +02:00
README.md Minor doc update 2020-07-18 20:20:37 +02:00

GO Remote Desktop Gateway

Go

Star us on GitHub — it helps!

RDPGW is an implementation of the Remote Desktop Gateway protocol. This allows you to connect with the official Microsoft clients to remote desktops over HTTPS. These desktops could be, for example, XRDP desktops running in containers on Kubernetes.

AIM

RDPGW aims to provide a full open source replacement for MS Remote Desktop Gateway, including access policies.

How to build

cd rdpgw
go build -o rdpgw .

Configuration

By default the configuration is read from rdpgw.yaml. Below is a template.

# web server configuration. 
server:
 # TLS certificate files (required)
 certFile: server.pem
 keyFile: key.pem
 # gateway address advertised in the rdp files
 gatewayAddress: localhost
 # port to listen on
 port: 443
 # list of acceptable desktop hosts to connect to
 farmHosts:
  - localhost:3389
 # Allow the user to connect to any host (insecure)
 enableOverride: false
 # Set the desktop host to connect to filled in by the claims from oidc
 hostTemplate: my-{{ preferred_username }}-host:3389

# Open ID Connect specific settings (required)
openId:
 providerUrl: http://keycloak/auth/realms/test
 clientId: rdpgw
 clientSecret: your-secret

# enabled / disabled capabilities
caps:
 SmartCardAuth: false
 tokenAuth: true
 # connection timeout in minutes, 0 is limitless
 idleTimeout: 10
 DisablePrinter: true
 DisablePort: true
 DisablePnp: true
 DisableDrive: true

Use

Point your browser to https://your-gateway/connect. After authentication and RDP file will download to your desktop. This file can be opened by one of the remote desktop clients and it will try to connect to the gateway and desktop host behind it.

TODO

  • Integrate Open Policy Agent
  • Integrate GOKRB5
  • Integrate uber-go/zap
  • Integrate prometheus
  • Research: TLS defragmentation