3
2

More than 1 year has passed since last update.

xrdp でRDP Proxy ゲートウェイ を作る話(4) 〜設定編〜

Posted at

前回まで

Debian GNU/Linux 11上での package build方法をご紹介しました。

RedHat系、debian系のpackage build と インストールをご紹介したので、RDP Proxyとして xrdp を使うための設定方法をご案内します。

対象バージョン

記事執筆時点(2022/12/16)で、以下バージョンを対象とします。

  • xrdp v0.9.20
  • NeutrinoRDP git hash #836b738

xrdp の バージョン情報の確認

利用中のxrdpが RDP Proxy mode に対応しているかどうかを確認します。

xrdp -V で バージョン番号やbuild オプションを表示できます。
Configure optionsに --enable-neutrinordp  が含まれていることを確認します。

# xrdp -V の出力結果
# xrdp -V
Argument 0 - xrdp
Argument 1 - -V
xrdp 0.9.20
  A Remote Desktop Protocol Server.
  Copyright (C) 2004-2020 Jay Sorg, Neutrino Labs, and all contributors.
  See https://github.com/neutrinolabs/xrdp for more information.

  Configure options:
      --build=x86_64-redhat-linux-gnu
      --host=x86_64-redhat-linux-gnu
      --program-prefix=
      --disable-dependency-tracking
      --prefix=/usr
      --exec-prefix=/usr
      --bindir=/usr/bin
      --sbindir=/usr/sbin
      --sysconfdir=/etc
      --datadir=/usr/share
      --includedir=/usr/include
      --libdir=/usr/lib64
      --libexecdir=/usr/libexec
      --localstatedir=/var
      --sharedstatedir=/var/lib
      --mandir=/usr/share/man
      --infodir=/usr/share/info
      --enable-fuse
      --enable-pixman
      --enable-painter
      --enable-vsock
      --enable-ipv6
      --with-socketdir=/run/xrdp
      --with-imlib2
      --enable-neutrinordp
      --enable-devel-logging
      build_alias=x86_64-redhat-linux-gnu
      host_alias=x86_64-redhat-linux-gnu
      CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection 
      LDFLAGS=-Wl,-z,relro  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld
      PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig

  Compiled with OpenSSL 1.1.1k  FIPS 25 Mar 2021

これは xrdp project の github に issue を上げる場合に基本的に求められる情報なので憶えておいてください。

xrdpの設定ファイル

xrdp の設定ファイルの path は build オプションによって決まりますが、前回までにご紹介した rpm/deb package でインストールした場合には、/etc/xrdp/ 以下に格納されます。

/etc/xrdp/xrdp.ini が設定ファイルになります。

xrp.ini は単一ファイルで様々な設定項目が含まれています。
このうち、RDP Proxyの設定はファイル末尾の[neutrinordp-any]からのセクションとなります。

[neutrinordp-any]
name=neutrinordp-any
lib=libxrdpneutrinordp.so
ip=ask
port=ask3389
username=ask
password=ask

RDP Proxyのための基本設定

では実際に xrdp で RDP Proxy を設定していきます。

[neutrinordp-any]セクションの各パラメータの意味は以下のようになります。

パラメータ名 意味 備考
[neutrinordp-any] セクション名 次のセクション名が現れるまでがそのセクションの設定となる。
name 表示名 xrdp ログインスクリーンに表示される Session 名
lib モジュール指定 RDP Proxy使用時はlibxrdpneutrinordp.soを指定
ip RDP接続先アドレス askパラメータは任意入力
port RDP接続先TCPポート番号 ask3389は初期値3389として任意入力
username RDP接続先ユーザー名 askで任意入力
password RDP接続先パスワード askで任意入力

nameは xrdp のログインダイアログに出てくる Sessionのリストボックスに表示される名前です。

lib は xrdpログインスクリーンから読み出すモジュールの指定です。
libxrdpneutrinordp.so が NeutrinoRDPライブラリを用いて RDP Proxyを実行するモジュールです。このモジュールを指定したセクションは RDP Proxy として動作します。
ip port username password は RDP Proxy 接続先の情報を示します。

askを指定するとxrdpログインスクリーン上での任意入力となります。
ask直後に値を書くと、初期値がセットされた状態になります。
askを入れずに値を書くと、そのパラメータは固定値となり、ログインスクリーン上に表示されません。

標準の状態では以下のような画面になります。
xrdp3-1.jpg

RDP Proxyのための追加設定

ここまでの設定で xrdp の RDP Proxyで対象のリモートホストに接続はできますが、実運用上で様々な問題が出てきます。
実用性を高めるための追加設定をしていきます。コメントアウトされたパラメータを有効にしていくことで対応できます。
一部を有効にして対応していきます。

パフォーマンス設定

パラメータ名 推奨値 意味と解説
enable_dynamic_resizing false RDPクライアントの画面サイズを変更したときに動的に表示領域を追従させる。コメントにある通り、NeutrinoRdp が対応していないためfalseを指定する
perf.allow_client_experiencesettings true RDPクライアント側のパフォーマンス設定をProxy先に伝えるか。デフォルトでは送信しないので、壁紙やフォントが最低限のものになる。後述のperf.cursor_shadowパラメータを機能させるために trueにする。
perf.wallpaper
perf.font_smoothing
perf.desktop_composition
perf.full_window_drag
perf.menu_anims
perf.themes
好みに合わせて。 これらの設定はxrdp側でパフォーマンス設定を固定する。mstsc.exeパフォーマンスタブの設定に対応する。xrdp3-2.jpg
perf.cursor_shadow false マウスカーソルの影の有効無効の設定。NeutrinoRDP側の問題でマウスカーソルが黒い四角形になってしまう問題の回避のためfalseにする。

キーボードレイアウト設定

xrdp RDP Proxyのデフォルトではクライアント側のキーボードレイアウト情報をProxy先のRDPサーバに送信しません。
日本語キーボードを持つクライアントから RDP Proxy でリモートWindowsに接続すると、US 101/104 ASCIIキーボード配列として認識されてしまいます。リモートWindows側のレジストリを変更して106/109 日本語キーボードレイアウトに変更する回避策がありますが、それを行わずとも日本語キーボードレイアウトとして認識できるようになります。

パラメータ名 推奨値 意味と解説
neutrinordp.allow_client_keyboardLayout true RDPクライアント側のキーボードレイアウト情報をProxy先に送信するか否か。日本語キーボードを持つRDPクライアントを使う場合はtrueにする。
neutrinordp.override_keyboardLayout_mask 0x0000FFFF RDPクライアントが日本語Windowsの場合、サードパーティ製日本語IMEのインストールをした場合にkbd_layout情報の上位2byteが変化する。これをマスクして下位2byteのみとすることでkbd_layoutの値を常に一定にする。Proxy経由の接続先がWindowsの場合は設定しなくても問題ないが、xrdpの時には設定しても良い。

実際の設定例

今回ご紹介した設定項目を活用した具体的設定例です。

[RDP-Proxy-WinClient]
name=RDP-Proxy-forWin
lib=libxrdpneutrinordp.so
ip=ask192.168.0.
port=ask3389
username=ask
password=ask
enable_dynamic_resizing=false
perf.allow_client_experiencesettings=true
perf.full_window_drag=false
perf.menu_anims=false
perf.cursor_shadow=false
neutrinordp.allow_client_keyboardLayout=true

まとめ

今回はxrdp を RDP-Proxyとして利用する場合の設定についてご紹介しました。

次回予告

未定です。(local pam認証を使った 設定方法をご紹介するかもしれません。)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2