!!!rdgw on OpenBSD 7.5 ARMv7 on BBB {{category OpenBSD,nolink}}[rdgw|https://github.com/tamx/rdgw] は Microsoft の Remote Desktop Protocol を中継する Gateway サーバー の Go 実装。 ただ、rdgw には TLS 実装がないので、[centrifuge|https://github.com/tamx/centrifuge] などで TLS 接続の処理を行う必要がある。 これによって、HTTP(S) 経由で リモート デスクトップ のクライアントから接続が可能になる。 [BeagleBone Black|https://beagleboard.org/black] に入れた、[OpenBSD|https://www.openbsd.org/] で、ゲートウェイ サーバを構築する。 * GitHub - tamx/rdgw ** https://github.com/tamx/rdgw * GitHub - tamx/centrifuge ** https://github.com/tamx/centrifuge * 自作プログラム rdgw の紹介 ** https://zenn.dev/greek_academy/articles/article20240321-rdgw !!メモ Commits on Nov 4, 2025 で、websock を公式パッケージを使うように変更されているが、これ以降のソースでビルドすると、ストア版が画面描写で固まる(ログイン後ディスクトップが表示されるが、その後の画面更新がされない)。 MSTSC(Win32版)で、rdgw を使うと、rdgw のログインができない。 リクエストヘッダで Authorization が取れず、認証の要求が繰り返されているように見える。 ※バージョン 10.0.26100 (昔は使えた気がするのだが) !!!ビルド・インストール !!Go のインストール パッケージ で Go をインストールする。 $ doas pkg_add -U go !!ソース入手 git リポジトリから取得すればよいが、git コマンドがないので、リポジトリからソースファイルを取得し、ZIPを展開して、転送する。 !!ビルド $ cd rdgw $ go build go: downloading github.com/gobwas/ws v1.4.0 go: downloading github.com/tamx/golang-digest v0.0.0-20241001234009-a71988532f57 go: downloading golang.org/x/net v0.30.0 $ cd .. $ cd centrifuge $ go build go: downloading golang.org/x/crypto v0.23.0 go: downloading golang.org/x/net v0.25.0 go: downloading golang.org/x/text v0.15.0 $ cd .. !!修正 オリジナルの centrifuge は、HTTPS で待ち受ける際に、Let's Encrypt を使用して証明書を作成するようになっている。 ACME プロトコルでは、ドメイン検証のため http (80番ポート) の接続が必要必要となる(転送されて10080番ポートで待ち受けるようになっている)。 しかし、既に(80番ポートは)別サーバで使用しているので、centrifuge での証明書発行はできない。単純に事前に用意した証明書とキーファイルを使用するようにする。 cer, err := tls.LoadX509KeyPair("/etc/ssl/example.com.crt", "/etc/ssl/private/example.com.key") config := &tls.Config{Certificates: []tls.Certificate{cer}} ※実際には、ファイルパスを引数で渡せるようにする !!インストール !!実行 rdgw は、13389 番ポートで待ち受ける。ゲートウエイのユーザとパスワードは、 ''username:password'' で指定する。 ./rdgw/rdgw username:password centrifuge で https (443 番ポート) を待ち受けて、SSTP 接続は SoftEtherVPN の 5555 へ、RDGW 接続は rdgw の 13389 へ、それ以外は WEBサーバへ転送する。 SSTP 接続は、メソッドに '''SSTP''' を送ってくるが、Windows は最初の1文字、つまり '''S''' のみしか最初は送ってこないため、S のみとなる。 RDGW 接続は、'''RDG''' メソッド。 ./centrifuge/centrifuge -p :443/ssl localhost:80 RDG:localhost:13389 S:localhost:5555