CentOS 8にWindowsからリモートデスクトップ接続する方法【xrdpの設定・トラブル対処】

Linux

WindowsからLinuxサーバーに接続する場合、SSHを使用することが一般的です。

ただし、GUI(グラフィカルユーザーインターフェース)で操作したい場合や、Linuxのデスクトップ環境をWindowsから遠隔操作したい場合もあります。

このような場合に利用できるのが、xrdpです。

xrdpは、Windows標準のリモートデスクトップ接続(mstsc.exe)からLinuxに接続できるようにするソフトウェアです。

今回は、CentOS Linux 8にxrdpをインストールし、Windowsからリモートデスクトップ接続するまでの手順を紹介します。

また、接続できない場合に確認すべきポイントについても解説します。

注意:CentOS Linux 8は2021年12月31日にサポートが終了しています。

本記事は、既存のCentOS 8環境の保守や検証を目的とした参考情報です。新規構築では、Rocky LinuxやAlmaLinuxなど、サポート中のディストリビューションを使用してください。

サポート終了に伴い、標準リポジトリからのパッケージインストールが失敗する場合があります。本記事のコマンドは、必要なパッケージを取得できる環境を前提としています。

1. 今回の構成

今回の接続構成は以下のとおりです。

項目内容
接続元Windows 10 / Windows 11
接続先CentOS Linux 8
リモート接続ソフトxrdp
接続プロトコルRDP(Remote Desktop Protocol)
使用ポートTCP 3389
LinuxデスクトップGNOMEなどのGUI環境
認証Linuxのローカルユーザー

接続イメージ:

Windows PC
  │
  │ リモートデスクトップ接続(mstsc)
  │ TCP 3389
  ▼
CentOS Linux 8
  │
  ├─ xrdp
  ├─ xrdp-sesman
  └─ GUIデスクトップ環境

Windows側に専用のリモート接続ソフトをインストールする必要はありません。

2. CentOS 8にGUIがインストールされているか確認

最初に、CentOS側のGUI環境を確認します。

systemctl get-default

実行結果の例:

graphical.target

graphical.targetであれば、GUI起動がデフォルトに設定されています。

一方、以下の場合はCUI起動がデフォルトです。

multi-user.target

ただし、graphical.targetであることだけでは、GUI関連パッケージが正常にインストールされているとは断定できません。

必要に応じて、GUI環境を追加します。

dnf groupinstall "Server with GUI"

GUIをデフォルトの起動ターゲットにする場合は、以下を実行します。

systemctl set-default graphical.target

必要に応じて再起動します。

reboot

なお、GUIをインストールするとメモリやディスクの使用量が増加します。

サーバー用途でGUIが必須でなければ、SSHによる管理の方が適している場合もあります。

3. EPELリポジトリを追加

xrdpをインストールするため、EPELリポジトリを追加します。

EPEL(Extra Packages for Enterprise Linux)は、Enterprise Linux系ディストリビューション向けの追加パッケージリポジトリです。

dnf install epel-release -y

リポジトリが登録されているか確認します。

dnf repolist

EPEL関連のリポジトリが表示されることを確認してください。

CentOS 8はサポート終了済みのため、リポジトリの参照先によってはパッケージを取得できないことがあります。

この場合、xrdpの設定以前に、OSのリポジトリ構成を確認する必要があります。

4. xrdpをインストール

xrdpをインストールします。

dnf install xrdp -y

インストールされたパッケージを確認します。

rpm -qa | grep xrdp

続いて、サービスの自動起動と起動を設定します。

systemctl enable --now xrdp

サービスの状態を確認します。

systemctl status xrdp

以下のように表示されれば、サービスは起動しています。

Active: active (running)

ただし、サービスが起動していることと、Windowsから正常にログインできることは別です。

この段階では、xrdpプロセスが起動していることを確認できただけです。

5. TCP 3389の待受状態を確認

次に、xrdpがRDP接続を待ち受けているか確認します。

ss -tlnp | grep 3389

正常な場合の出力例:

LISTEN 0 128 0.0.0.0:3389 0.0.0.0:*

TCP 3389で待ち受けていることが確認できます。

ここで何も表示されない場合は、xrdpのサービス状態や設定ファイルを確認してください。

systemctl status xrdp
journalctl -u xrdp -b --no-pager

xrdpの待受ポートは、通常、以下の設定ファイルで確認できます。

grep '^port=' /etc/xrdp/xrdp.ini

6. firewalldでRDP通信を許可

WindowsからCentOSに接続するためには、TCP 3389への通信を許可する必要があります。

まず、firewalldの状態を確認します。

systemctl status firewalld

firewalldが有効な場合は、RDP用ポートを許可します。

firewall-cmd --permanent --add-port=3389/tcp

設定を反映します。

firewall-cmd --reload

設定を確認します。

firewall-cmd --list-ports

以下が表示されれば、TCP 3389の許可設定が登録されています。

3389/tcp

なお、複数のfirewalldゾーンを使用している場合は、接続元インターフェースに適用されているゾーンを確認してください。

firewall-cmd --get-active-zones

実運用では、接続元IPアドレスを限定することも検討してください。

TCP 3389をインターネットへ直接公開することは推奨しません。 社外から接続する場合は、VPNや踏み台サーバーなどを経由する構成が適切です。

既存環境でfirewalldを停止していた場合

今回の元の検証環境では、以下のコマンドでfirewalldを停止していました。

systemctl disable firewalld
systemctl stop firewalld

ただし、この方法ではRDP以外の通信についてもホスト側ファイアウォールによる制御が失われます。

そのため、新規設定や本番環境では、firewalldを停止するのではなく、必要な通信だけを許可する方法を推奨します。

7. SELinuxの状態を確認

SELinux(Security-Enhanced Linux)は、Linuxのプロセスやファイルへのアクセスを制御するセキュリティ機能です。

まず、現在の状態を確認します。

getenforce

実行結果は以下のいずれかです。

状態意味
EnforcingSELinuxによるアクセス制御を実施
Permissive制御違反を記録するが、原則として遮断しない
DisabledSELinuxが無効

xrdpを使用するために、必ずSELinuxを無効化する必要があるわけではありません。

まずはEnforcingのまま動作確認することを推奨します。

SELinuxが原因か切り分ける場合

接続できず、SELinuxによる拒否が疑われる場合は、検証目的で一時的にPermissiveへ変更できます。

setenforce 0

状態を確認します。

getenforce
Permissive

この状態で接続できるようになった場合、SELinuxのポリシーやアクセス拒否ログを調査します。

ausearch -m AVC,USER_AVC -ts recent

調査後はEnforcingに戻します。

setenforce 1

SELinuxを恒久的にDisabledにすることは、原則として推奨しません。

元の検証環境ではSELinuxを無効化していましたが、原因の切り分けを行わずに無効化する方法は、本番環境の設定手順として適切ではありません。

8. リモートデスクトップ接続用ユーザーを作成

WindowsからログインするLinuxユーザーを作成します。

useradd testuser

パスワードを設定します。

passwd testuser

ユーザーが作成されたか確認します。

id testuser

ログインには、Linux側のユーザー名とパスワードを使用します。

管理者権限が不要な場合は、一般ユーザーで接続することを推奨します。

9. Windowsからリモートデスクトップ接続

Windows側で、キーボードの「Windowsキー + R」を押します。

以下を入力して実行します。

mstsc

Windows標準の「リモート デスクトップ接続」が起動します。

接続先にCentOSのIPアドレスを入力します。

192.168.x.x

接続すると、xrdpのログイン画面が表示されます。

ユーザー名とパスワードを入力します。

ユーザー名:testuser
パスワード:設定したパスワード

接続に成功すると、Linuxのデスクトップ画面が表示されます。

環境によっては、xrdpのログイン画面で「Xorg」などのセッション方式を選択する必要があります。また、GUIセッションが起動しない場合は、xorgxrdpなどの関連パッケージの有無も確認してください。

10. リモートデスクトップ接続できない場合の確認方法

xrdpで接続できない場合、闇雲に設定を変更するのではなく、通信経路とサービスの状態を順番に確認することが重要です。

① WindowsからTCP 3389へ接続できるか

Windows PowerShellで以下を実行します。

Test-NetConnection 192.168.x.x -Port 3389

正常に接続できる場合の例:

TcpTestSucceeded : True

Falseの場合は、次の項目を確認します。

  • CentOS側でxrdpが起動しているか
  • TCP 3389で待ち受けているか
  • firewalldで通信が許可されているか
  • ネットワーク機器や上位ファイアウォールで遮断されていないか

なお、TcpTestSucceeded : TrueはTCP接続が成立したことを示すものであり、RDPの認証やGUIログインの成功を保証するものではありません。

② xrdpサービスが起動しているか

systemctl status xrdp

サービスが停止している場合は、ログを確認します。

journalctl -u xrdp -b --no-pager

必要に応じて、xrdpのセッション管理サービスも確認します。

systemctl status xrdp-sesman

③ xrdpのログを確認

xrdpのログは、一般的に以下の場所に記録されます。

/var/log/xrdp.log
/var/log/xrdp-sesman.log

リアルタイムでログを確認する場合:

tail -f /var/log/xrdp.log
tail -f /var/log/xrdp-sesman.log

認証エラーやセッション起動失敗などの原因を調査する際に役立ちます。

④ 認証後に黒い画面になる場合

Windowsから接続できても、認証後に黒い画面のまま進まない場合があります。

この場合、ネットワーク疎通よりも、GUIセッションの起動処理に問題がある可能性があります。

以下を確認してください。

rpm -qa | grep -E 'xrdp|xorgxrdp'
systemctl status xrdp-sesman

また、GUI環境のインストール状況や、同じユーザーで既存のデスクトップセッションが起動していないかも確認します。

xrdpのログに加え、必要に応じてXorgやユーザーセッション関連のログも調査します。

⑤ 接続直後に切断される場合

接続直後に切断される場合は、認証失敗、セッション起動失敗、GUI環境の不整合などが考えられます。

まずは以下のログを確認します。

tail -n 100 /var/log/xrdp-sesman.log

サービスを再起動して改善するか確認する場合は、接続中のユーザーがいないことを確認した上で実施してください。

systemctl restart xrdp

11. ネットワークSEとして確認しておきたいポイント

リモートデスクトップ接続のトラブルでは、問題が発生している箇所を切り分けることが重要です。

確認箇所確認コマンド判断できること
サービスsystemctl status xrdpxrdpが起動しているか
ポート待受ss -tlnp | grep 3389TCP 3389で待受しているか
ホストFWfirewall-cmd --list-all対象ゾーンの許可設定
Windowsからの疎通Test-NetConnectionTCP接続が成立するか
認証・セッションxrdp-sesman.logログイン処理の問題
SELinuxausearchアクセス拒否の有無

特に重要なのは、「接続できない」と「接続後にログインできない」を区別することです。

TCP 3389に接続できない場合は、まずネットワークやファイアウォールを確認します。

一方、xrdpのログイン画面まで表示される場合は、認証やデスクトップセッションの問題を優先して調査します。

このように切り分けることで、不要な設定変更を減らせます。

まとめ

CentOS 8にxrdpをインストールすることで、Windows標準のリモートデスクトップ接続からLinuxのGUI環境を操作できます。

今回のポイントは以下のとおりです。

  • GUI環境がインストールされているか確認する
  • EPELからxrdpをインストールする
  • xrdpサービスとTCP 3389の待受を確認する
  • firewalldでは必要な通信のみを許可する
  • SELinuxは安易に無効化せず、ログから原因を調査する
  • 接続できない場合は、通信・認証・GUIセッションを分けて切り分ける

CentOS Linux 8はすでにサポートが終了しているため、新規環境での採用は推奨しません。

既存環境でxrdpを利用する場合も、セキュリティリスクを把握した上で、可能な限りサポート中のOSへの移行を検討してください。

コメント

タイトルとURLをコピーしました