CentOS/Rocky Linuxでxrdpに接続できないときの確認方法

Windows

CentOSやRocky Linuxにxrdpをインストールしたものの、Windowsの「リモート デスクトップ接続」から接続できないことがあります。

xrdpで接続できない場合、闇雲に設定を変更するのではなく、

xrdpサービス → ポート → Firewall → SELinux → ログ

の順番で確認すると原因を切り分けやすくなります。

この記事では、CentOS/Rocky Linuxでxrdpに接続できない場合の確認方法を紹介します。

1. xrdpが起動しているか確認する

最初にxrdpサービスの状態を確認します。

systemctl status xrdp

正常に起動していれば、次のように表示されます。

Active: active (running)

inactive や failed になっている場合は、xrdpを起動します。

sudo systemctl start xrdp

OS起動時にも自動的にxrdpを起動したい場合は、次のコマンドを実行します。

sudo systemctl enable xrdp

両方をまとめて実行することもできます。

sudo systemctl enable --now xrdp

再度確認します。

systemctl status xrdp

ここでxrdp自体が起動しない場合は、Windows側を調査する前にxrdpのログを確認した方がよいでしょう。

2. TCP 3389番ポートで待ち受けているか確認する

xrdpは通常TCP 3389番ポートを使用します。

ssコマンドで確認します。

sudo ss -lntp | grep 3389

例えば、次のようにLISTENしていればxrdpが3389番ポートを待ち受けています。

LISTEN 0 2 0.0.0.0:3389 0.0.0.0:*

何も表示されない場合は、xrdpが正常に待ち受けていない可能性があります。

その場合は、

systemctl status xrdp

とログを確認します。

3. firewalldで3389/TCPが許可されているか確認する

xrdpが正常に起動していても、Linux側のFirewallで3389/TCPが遮断されていればWindowsから接続できません。

まず設定を確認します。

sudo firewall-cmd --list-all

または、

sudo firewall-cmd --list-ports

3389/TCPを許可する場合は、環境に応じた適切なゾーンを確認したうえで設定します。

例えば使用中のゾーンに追加する場合は、

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

設定後、

sudo firewall-cmd --list-ports

で、

3389/tcp

が表示されることを確認します。

注意: インターネットへ3389/TCPをそのまま公開することは推奨しません。社内LANやVPNなど、必要な接続元だけから利用できる構成にします。

4. Windowsから3389番ポートまで到達できるか確認する

Linux側だけでなくWindows側からも確認します。

PowerShellを開いて、

Test-NetConnection LinuxサーバーのIPアドレス -Port 3389

を実行します。

例えば、

Test-NetConnection 192.168.1.100 -Port 3389

です。

結果の、

TcpTestSucceeded : True

なら、少なくともWindowsからLinuxサーバーの3389/TCPまでは到達しています。

Falseなら、

  • Linux側firewalld
  • ネットワーク経路
  • IPアドレス
  • ルーターやFirewall
  • xrdpの待ち受け状態

などを確認します。

ここで重要なのは、RDP画面の問題とネットワークの問題を分離することです。

5. SELinuxを確認する

CentOS/Rocky LinuxではSELinuxが有効になっていることがあります。

状態を確認します。

getenforce

例えば、

Enforcing

ならSELinuxが有効です。

SELinuxが原因と思われる場合でも、いきなり恒久的に無効化するのはおすすめしません。

まずログを確認します。

sudo ausearch -m AVC -ts recent

SELinuxによる拒否が発生していないか確認して、必要なポリシーや設定を検討します。

「接続できないからSELinuxを無効化する」という対処だけで終わらせないことが重要です。

6. xrdpのログを確認する

ここまで問題がなければ、ログを確認します。

主に確認するのは、

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

です。

例えば、

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

リアルタイムで確認するなら、

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

としてからWindowsから接続すると、接続時に何が起きているのか確認しやすくなります。

systemdのログも確認しておきます。

sudo journalctl -u xrdp

直近だけ確認するなら、

sudo journalctl -u xrdp --since "10 minutes ago"

なども便利です。

7. 「接続できない」と「接続後に黒画面」は分けて考える

xrdpでは、

WindowsからLinuxサーバーそのものに接続できない

場合と、

ログインまではできるが、その後黒い画面になる

場合では調査する場所が違います。

例えば、

Test-NetConnection → False

ならネットワークやFirewallなどを先に調査します。

一方、

Test-NetConnection → True
ログイン画面も表示される
認証後に黒画面

なら、単純な3389/TCPの疎通問題ではありません。

デスクトップ環境、セッション、Xorg、xrdp-sesmanなどを調査する必要があります。

この2つを分けるだけでも、トラブルシューティングがかなり楽になります。

確認する順番

xrdpで接続できないときは、私は次の順番で確認するのがおすすめです。

① systemctl status xrdp
        ↓
② ss -lntp | grep 3389
        ↓
③ firewall-cmd
        ↓
④ Test-NetConnection
        ↓
⑤ SELinux
        ↓
⑥ xrdp.log / xrdp-sesman.log
        ↓
⑦ デスクトップ・セッション関連

上から順番に確認すれば、

サービスなのか
ネットワークなのか
Firewallなのか
認証・セッションなのか

を切り分けやすくなります。

まとめ

CentOS/Rocky Linuxでxrdpに接続できない場合は、最初から設定変更を繰り返すのではなく、一つずつ切り分けていくことが重要です。

特に、

systemctl status xrdp
sudo ss -lntp | grep 3389
sudo firewall-cmd --list-all
sudo tail -n 100 /var/log/xrdp.log
sudo tail -n 100 /var/log/xrdp-sesman.log

Windows側では、

Test-NetConnection LinuxサーバーのIPアドレス -Port 3389

を覚えておくと、障害調査に役立ちます。


コメント

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