rdgw on OpenBSD 7.5 ARMv7 on BBB
rdgw は Microsoft の Remote Desktop Protocol を中継する Gateway サーバー の Go 実装。ただ、rdgw には TLS 実装がないので、centrifuge などで TLS 接続の処理を行う必要がある。これによって、HTTP(S) 経由で リモート デスクトップ のクライアントから接続が可能になる。
BeagleBone Black に入れた、OpenBSD で、ゲートウェイ サーバを構築する。
- GitHub - tamx/rdgw
- GitHub - tamx/centrifuge
- 自作プログラム 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
最終更新時間:2026年04月19日 22時16分48秒 指摘や意見などあればSandBoxのBBSへ。