<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>未分類 | エス・プロ</title>
	<atom:link href="https://s-pro4.com/cat/%e6%9c%aa%e5%88%86%e9%a1%9e/feed" rel="self" type="application/rss+xml" />
	<link>https://s-pro4.com</link>
	<description>パソコンとシステムの活用を考えます</description>
	<lastBuildDate>Tue, 22 Sep 2026 20:19:30 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.1</generator>

<image>
	<url>https://s-pro4.com/wp-content/uploads/2021/10/bb4c6ee1587184e454cc308581390f8d-150x150.png</url>
	<title>未分類 | エス・プロ</title>
	<link>https://s-pro4.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>RustDeskの自前サーバをVPSのWebARENAで構築する</title>
		<link>https://s-pro4.com/page-1434.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Tue, 22 Sep 2026 20:19:28 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=1434</guid>

					<description><![CDATA[リモートデスクトップサービスRustDeskについて以前の記事に書いた。リモートデスクトップアプリRustDeskを使ってみる RustDeskの公開サーバを使用していて決定的に困ることは現在は起きていないが、たまにログ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">リモートデスクトップサービスRustDeskについて以前の記事に書いた。<br><a href="https://s-pro4.com/page-1320.html" data-type="post" data-id="1320">リモートデスクトップアプリRustDeskを使ってみる</a></p>



<p class="wp-block-paragraph">RustDeskの公開サーバを使用していて決定的に困ることは現在は起きていないが、たまにログインを求められることはある。<br>自前サーバの利用を試してみたく、やってみることにした。</p>



<p class="wp-block-paragraph">また、WebARENAの初期構築についても書いた。<br><a href="https://s-pro4.com/page-1421.html" data-type="post" data-id="1421">VPS利用のためWebARENA Indigoを使用してみる</a><br><a href="https://s-pro4.com/page-1430.html" data-type="post" data-id="1430">VPS利用のためWebARENA Indigoを使用してみる　その2</a></p>



<p class="wp-block-paragraph">自前サーバ「セルフホスト」に関するドキュメントは下記<br><a href="https://rustdesk.com/docs/ja/self-host/" target="_blank" rel="noopener">https://rustdesk.com/docs/ja/self-host/</a></p>



<p class="wp-block-paragraph">ちょっと難しいのと、前回記事に書いた通り、<br>WebARENA＋ubuntu用として、ChatGPTに聞くと下記の手順を示された。<br>Step 1　WebARENA側のVPSを確認<br>Step 2　Ubuntuの初期確認・アップデート<br>Step 3　Dockerをインストール<br>Step 4　RustDesk Serverの配置・設定<br>Step 5　RustDesk Serverの起動・動作確認<br>Step 6　RustDeskクライアントを自前サーバーへ接続<br>Step 7　運用設定・最終確認</p>



<p class="wp-block-paragraph">今回はいよいよ本丸というかStep 3から進める。</p>



<h2 class="wp-block-heading">Step 3　Dockerをインストール</h2>



<p class="wp-block-paragraph">まずはDockerが入っているかどうか確認<br>$ docker --version<br>Command 'docker' not found, but can be installed with:<br>sudo snap install docker # version 29.8.0, or<br>sudo snap install docker # version 29.6.1<br>sudo apt install docker.io # version 29.1.3-0ubuntu3~24.04.2<br>sudo apt install podman-docker # version 4.9.3+ds1-1ubuntu0.2<br>See 'snap info ' for additional versions.</p>



<p class="wp-block-paragraph">入っていない。<br>親切にインストール手順まで案内してくれている。<br>しかし、今回はRustDesk向けなので、RustDesk公式ドキュメントが推奨する下記の方法に準じてインストールすることにした。</p>



<p class="wp-block-paragraph">(1)bash &lt;(wget -qO- https://get.docker.com)<br>(2)wget rustdesk.com/oss.yml -O compose.yml<br>(3)sudo docker compose up -d</p>



<p class="wp-block-paragraph">ここでもう少し丁寧にする。<br>・(1)に関してはインストール用スクリプトの中身を見てから実行するため、一旦ファイルに保存する手順とする。<br>　まぁ見てもあまりわからなかったけど。<br>・2回目のwget前にRustDeskディレクトリを作成し移動。<br>・2回目のwgetではhttps:// を明確に補うことにした。<br>・最後にコンテナ起動の前にdocder compose configで構文を確認する手順を入れた。<br>(1)wget https://get.docker.com -O get-docker.sh<br>(2)sudo sh get-docker.sh<br>(3)mkdir RustDesk<br>(4)cd RustDesk<br>(5)wget https://rustdesk.com/oss.yml -O compose.yml<br>(6)compose.ymlの内容を編集<br>(7)sudo docker compose config<br>(8)sudo docker compose up -d</p>



<p class="wp-block-paragraph">Step 3　(1)(2)<br>Step 4　(3)(4)(5)(6)(7)<br>Step 5　(8)<br>とする。</p>



<p class="wp-block-paragraph">(1)インストーラーをダウンロードしローカルに保存<br>$ wget https://get.docker.com -O get-docker.sh<br>--2026-09-19 21:40:13-- https://get.docker.com/<br>Resolving get.docker.com (get.docker.com)... 13.249.165.103, 13.249.165.78, 13.249.165.12, ...<br>Connecting to get.docker.com (get.docker.com)|13.249.165.103|:443... connected.<br>HTTP request sent, awaiting response... 200 OK<br>Length: 23731 (23K) [text/plain]<br>Saving to: ‘get-docker.sh’</p>



<p class="wp-block-paragraph">get-docker.sh 100%[===================================================&gt;] 23.17K --.-KB/s in 0s<br>2026-09-19 21:40:14 (86.1 MB/s) - ‘get-docker.sh’ saved [23731/23731]</p>



<p class="wp-block-paragraph">Dockerのインストーラーとなるスクリプトが get-docker.shとして保存された。</p>



<p class="wp-block-paragraph">(2)インストーラーを実行<br>$ sudo sh get-docker.sh<br>を実行しインストール。<br><br>インストールされたかどうかを確認<br>$ docker --version<br>Docker version 29.8.1, build 4a63305<br><br>$ sudo docker compose version<br>Docker Compose version v5.5.1</p>



<h2 class="wp-block-heading">Step 4　RustDesk Serverの配置・設定</h2>



<p class="wp-block-paragraph">(3)作業ディレクトリ作成<br>mkdir RustDesk</p>



<p class="wp-block-paragraph">(4)作業ディレクトリへ移動<br>cd RustDesk</p>



<p class="wp-block-paragraph">(5)設定ファイルをダウンロードしローカルに保存<br>$ wget https://rustdesk.com/oss.yml -O compose.yml<br>--2026-09-20 07:38:24-- https://rustdesk.com/oss.yml<br>Resolving rustdesk.com (rustdesk.com)... 172.66.167.80, 104.20.19.94, 2606:4700:10::ac42:a750, ...<br>Connecting to rustdesk.com (rustdesk.com)|172.66.167.80|:443... connected.<br>HTTP request sent, awaiting response... 200 OK<br>Length: 402 [application/octet-stream]<br>Saving to: ‘compose.yml’</p>



<p class="wp-block-paragraph">compose.yml 100%[===================================================&gt;] 402 --.-KB/s in 0s<br>2026-09-20 07:38:24 (108 MB/s) - ‘compose.yml’ saved [402/402]</p>



<p class="wp-block-paragraph">compose.ymlが保存された。</p>



<p class="wp-block-paragraph">(6)compose.ymlの内容を編集</p>



<p class="wp-block-paragraph">hbbsに常にリレーにするALWAYS_USE_RELAY=Yを入れる。後からわかったことだが、試験のときログに残らず本当に自前サーバを通っているのか？ となった。ChatGPTが言うには、P2Pが使えるときはリレーにならずログに残らないのではないかとのこと。公開サーバではなく自前サーバでリレーされていることを確認するために、一旦入れて、最後には外す。<br>もうひとつ、hbbrに公開鍵を登録する。<br>公開鍵は data/id_ed25519.pub に保存されたファイルの内容（文字列）</p>



<p class="wp-block-paragraph">編集前</p>



<pre class="wp-block-code"><code>services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs
    volumes:
      - ./data:/root
    network_mode: "host"
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./data:/root
    network_mode: "host"
    restart: unless-stopped</code></pre>



<p class="wp-block-paragraph">編集後</p>



<pre class="wp-block-code"><code>services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
<span data-color="#fcb900" style="--vk-highlighter-color: rgba(252, 185, 0, 0.7);" class="vk_highlighter">    environment:
      - ALWAYS_USE_RELAY=Y</span>
    command: hbbs
    volumes:
      - ./data:/root
    network_mode: "host"
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
<span data-color="#fcb900" style="--vk-highlighter-color: rgba(252, 185, 0, 0.7);" class="vk_highlighter">    environment:
      - KEY=&lt;公開鍵></span>
    command: hbbr
    volumes:
      - ./data:/root
    network_mode: "host"
    restart: unless-stopped</code></pre>



<p class="wp-block-paragraph">(7)設定ファイルのチェック<br>sudo docker compose config</p>



<pre class="wp-block-code"><code>name: rustdesk
services:
  hbbr:
    command:
      - hbbr
    container_name: hbbr
    environment:
      KEY: &lt;公開鍵>
    image: rustdesk/rustdesk-server:latest
    network_mode: host
    restart: unless-stopped
    volumes:
      - type: bind
        source: /home/ubuntu/RustDesk/data
        target: /root
        bind: {}
  hbbs:
    command:
      - hbbs
    container_name: hbbs
    depends_on:
      hbbr:
        condition: service_started
        required: true
    environment:
      ALWAYS_USE_RELAY: 'Y'
    image: rustdesk/rustdesk-server:latest
    network_mode: host
    restart: unless-stopped
    volumes:
      - type: bind
        source: /home/ubuntu/RustDesk/data
        target: /root
        bind: {}</code></pre>



<p class="wp-block-paragraph">設定が正しいこと、エラーがないことを確認する。</p>



<h2 class="wp-block-heading">Step 5　RustDesk Serverの起動・動作確認</h2>



<p class="wp-block-paragraph">(8)コンテナの起動<br>(cd RustDesk)<br>sudo docker compose up -d</p>



<p class="wp-block-paragraph">[+] up 6/6<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Image rustdesk/rustdesk-server:latest Pulled 3.6s<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Container hbbr Started 0.5s<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Container hbbs Started 0.5s</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="869" height="80" src="https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup2.jpg" alt="" class="wp-image-1435" srcset="https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup2.jpg 869w, https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup2-300x28.jpg 300w, https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup2-768x71.jpg 768w" sizes="(max-width: 869px) 100vw, 869px" /></figure>



<p class="wp-block-paragraph">正常に起動する。</p>



<p class="wp-block-paragraph">(9)コンテナが起動されていることの確認<br>$ sudo docker compose ps<br>NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS<br>hbbr rustdesk/rustdesk-server:latest "hbbr" hbbr About a minute ago Up About a minute<br>hbbs rustdesk/rustdesk-server:latest "hbbs" hbbs About a minute ago Up About a minute</p>



<figure class="wp-block-image size-full"><img decoding="async" width="785" height="62" src="https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup3.jpg" alt="" class="wp-image-1436" srcset="https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup3.jpg 785w, https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup3-300x24.jpg 300w, https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup3-768x61.jpg 768w" sizes="(max-width: 785px) 100vw, 785px" /></figure>



<p class="wp-block-paragraph">起動している</p>



<p class="wp-block-paragraph">(10)ログを確認<br>$ sudo docker compose logs --tail=50<br>特にエラー等はなし。</p>



<p class="wp-block-paragraph">(11)必要ポートの状態を確認<br>$ sudo ss -lntup | grep -E ':(21115|21116|21117|21118|21119)\b'<br>udp UNCONN 0 0 *:21116 <em>:</em> users:(("hbbs",pid=5392,fd=17))<br>tcp LISTEN 0 128 *:21119 <em>:</em> users:(("hbbr",pid=5345,fd=10))<br>tcp LISTEN 0 128 *:21118 <em>:</em> users:(("hbbs",pid=5392,fd=20))<br>tcp LISTEN 0 128 *:21117 <em>:</em> users:(("hbbr",pid=5345,fd=9))<br>tcp LISTEN 0 128 *:21116 <em>:</em> users:(("hbbs",pid=5392,fd=18))<br>tcp LISTEN 0 128 *:21115 <em>:</em> users:(("hbbs",pid=5392,fd=19))</p>



<p class="wp-block-paragraph">TCP　21115-21119はLISTEN、UDP 21116は待ち受けになっていて正常。</p>



<p class="wp-block-paragraph">一方WebARENAではファイアウォールを入れている。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1008" height="225" src="https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup5.jpg" alt="" class="wp-image-1437" srcset="https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup5.jpg 1008w, https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup5-300x67.jpg 300w, https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup5-768x171.jpg 768w" sizes="(max-width: 1008px) 100vw, 1008px" /></figure>



<p class="wp-block-paragraph">TCP 21115-21117とUDP 21116は通す。TCP 21118-21119は通さない。</p>



<p class="wp-block-paragraph">(12)外部からポートへのアクセスを確認<br>★TCP側確認<br>自分の端末(Mac)のターミナルから<br>$ nc -vz &lt;VPSのIPアドレス> 21115<br>Connection to &lt;VPSのIPアドレス> 21115 port [tcp/] succeeded!<br>$ nc -vz &lt;VPSのIPアドレス> 21116<br>Connection to &lt;VPSのIPアドレス> 21116 port [tcp/] succeeded!<br>$ nc -vz &lt;VPSのIPアドレス> 21117<br>Connection to &lt;VPSのIPアドレス> 21117 port [tcp/*] succeeded!</p>



<p class="wp-block-paragraph">すべて疎通成功。</p>



<p class="wp-block-paragraph">★UDP側確認<br>VPSでポートを監視状態にする<br>sudo tcpdump -ni any udp port 21116</p>



<p class="wp-block-paragraph">ログが流れているが、止めずにそのまま。</p>



<p class="wp-block-paragraph">自分の端末(Mac)からVPSのポートへecho<br>echo test | nc -u -w1 &lt;VPSのIPアドレス&gt; 21116</p>



<p class="wp-block-paragraph">VPSに下記のような行がでればOK。<br>ens10 In IP &lt;端末のIPアドレス>.&lt;端末のポート> > &lt;VPSのIPアドレス>.21116: UDP, length 5</p>



<p class="wp-block-paragraph">ここまででRustDeskサーバの起動と必要ポートのアクセスが確認できた。</p>



<h2 class="wp-block-heading">Step 6　RustDeskクライアントを自前サーバーへ接続</h2>



<p class="wp-block-paragraph">遠隔操作をする側、遠隔操作をされる側の両方（どちらもRustDeskクライアントという）で、自前サーバへ繋ぐ設定をする。<br>RustDeskを起動し、[設定]＞[ネットワーク]＞[認証/中継サーバー]<br>認証サーバ：サーバIPアドレス<br>中継サーバ：サーバIPアドレス<br>APIキー：空欄<br>Key：公開鍵</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="846" height="664" src="https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup4.jpg" alt="" class="wp-image-1439" srcset="https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup4.jpg 846w, https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup4-300x235.jpg 300w, https://s-pro4.com/wp-content/uploads/2026/09/RustDesk_server_setup4-768x603.jpg 768w" sizes="(max-width: 846px) 100vw, 846px" /></figure>



<p class="wp-block-paragraph">サーバでは下記のコマンドでポート21116を監視状態で待機させる。</p>



<p class="wp-block-paragraph">sudo tcpdump -ni any host &lt;サーバIPアドレス> and port 21116</p>



<p class="wp-block-paragraph">すると、下記のような行が出て待機させる。</p>



<p class="wp-block-paragraph">tcpdump: data link type LINUX_SLL2<br>tcpdump: verbose output suppressed, use -v[v]... for full protocol decode<br>listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes</p>



<p class="wp-block-paragraph">ここで、クライアントのRustDeskを再起動すると、ダンプの行が増えていく。<br>----------<br>23:59:45.516564 ens10 In IP &lt;クライアントIPアドレス>.36459 > &lt;サーバIPアドレス>.21116: UDP, length 15 23:59:45.516709 ens10 Out IP &lt;サーバIPアドレス>.21116 > &lt;クライアントIPアドレス>.36459: UDP, length 2 23:59:52.660607 ens10 In IP &lt;クライアントIPアドレス>.23996 > &lt;サーバIPアドレス>.21116: Flags [F.], seq 1, ack 1, win 2057, options [nop,nop,TS val 2888007100 ecr 3963494463], length 0 23:59:52.660828 ens10 Out IP &lt;サーバIPアドレス>.21116 > &lt;クライアントIPアドレス>.23996: Flags [F.], seq 1, ack 2, win 510, options [nop,nop,TS val 3963512531 ecr 2888007100], length 0 23:59:52.685546 ens10 In IP &lt;クライアントIPアドレス>.23996 > &lt;サーバIPアドレス>.21116: Flags [.], ack 2, win 2057, options [nop,nop,TS val 2888007128 ecr 3963512531], length 0 23:59:52.702757 ens10 In IP &lt;クライアントIPアドレス>.23861 > &lt;サーバIPアドレス>.21116: Flags [S], seq 4765219, win 65535, options [mss 1412,nop,wscale 6,nop,nop,TS val 2313083021 ecr 0,sackOK,eol], length 0 23:59:52.702827 ens10 Out IP &lt;サーバIPアドレス>.21116 > &lt;クライアントIPアドレス>.23861: Flags [S.], seq 1059828799, ack 4765220, win 65160, options [mss 1460,sackOK,TS val 3963512573 ecr 2313083021,nop,wscale 7], length 0 23:59:52.730407 ens10 In IP &lt;クライアントIPアドレス>.23861 > &lt;サーバIPアドレス>.21116: Flags [.], ack 1, win 2057, options [nop,nop,TS val 2313083048 ecr 3963512573], length 0<br>----------</p>



<p class="wp-block-paragraph">RustDeskクライアントからhbbs の21116へ通信していることが確認できた。<br>操作する側のクライアントと操作される側のクライアントそれぞれでこの確認を行う。</p>



<p class="wp-block-paragraph">この後は実際にクライアント同士を接続して、遠隔操作できる状態を作る。<br>実際に問題なくつながった。<br>では、「本当に自前サーバを経由しているか」をサーバ上でどう確認するかである。</p>



<p class="wp-block-paragraph">ChatGPTからは、<br>cd ~/RustDesk<br>sudo docker compose logs --tail=50 hbbs hbbr<br>これで、ログに現れるはずだと最初言われた。しかし、何も残らなかったのだ。<br>そこで、P2Pでいけるときは hbbr経由(リレー)しないのではないか？ との推論のもと、<br>compose.ymlに<br>environment:<br>  - ALWAYS_USE_RELAY=Y<br>を「テスト用に」入れた次第だ。</p>



<p class="wp-block-paragraph">ALWAYS_USE_RELAY=Y<br>のときは必ずリレーされ、<br>sudo docker compose logs --tail=50 hbbs hbbr<br>のログに下記のような接続がのこる。</p>



<p class="wp-block-paragraph">----------<br>hbbr | [2026-09-21 05:48:50.573495 +00:00] INFO [src/relay_server.rs:453] New relay request &lt;リクエストID> from [::ffff:&lt;操作する側IPアドレス>]:63750<br>hbbr | [2026-09-21 05:48:50.681926 +00:00] INFO [src/relay_server.rs:437] Relayrequest &lt;リクエストID> from [::ffff:&lt;操作される側IPアドレス>]:14219 got paired<br>hbbr | [2026-09-21 05:48:50.681994 +00:00] INFO [src/relay_server.rs:443] Both are raw<br>----------</p>



<p class="wp-block-paragraph">これで自前サーバを使っていることが確認できた。</p>



<p class="wp-block-paragraph">最終的には、<br>environment:<br>  - ALWAYS_USE_RELAY=Y<br>を削除し、<br>Docker Composeを再起動<br>sudo docker compose up -d</p>



<h2 class="wp-block-heading">Step 7　運用設定・最終確認</h2>



<p class="wp-block-paragraph">サーバ再起動後にも、Dockerが起動されるかどうかの確認。<br>コマンドは下記。</p>



<p class="wp-block-paragraph">sudo systemctl is-enabled docker</p>



<p class="wp-block-paragraph">enabled となれば問題ない。<br>しかし、実際にVPSを再起動してRustDesk再接続まで確認する。<br><br><br></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
