トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

OpenBSD/rdgw

INDEX

rdgw on OpenBSD 7.5 ARMv7 on BBB

rdgw は Microsoft の Remote Desktop Protocol を中継する Gateway サーバー の Go 実装。ただ、rdgw には TLS 実装がないので、centrifuge などで TLS 接続の処理を行う必要がある。これによって、HTTP(S) 経由で リモート デスクトップ のクライアントから接続が可能になる。

BeagleBone Black に入れた、OpenBSD で、ゲートウェイ サーバを構築する。

 メモ

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へ。