banner
B1ueD0g

BlueDog's Home

上班使我怨气比鬼重!
x
telegram
email

ラズベリーパイにKaliをインストールする全設定プロセス

本指南详细介绍如何在ラズベリーパイ 5上以無表示屏 (headless) 方式部署 Kali Linux (XFCE デスクトップ環境)、并使用 FRP (Fast Reverse Proxy) 实现远程アクセス。内容涵盖从准备イメージ、焼き付け TF カード、システム初期化設定、到インストール一般的なツール、設定グラフィカルインターフェースと VNC サービス、以及通过 FRP 进行内网穿透远程连接的完整步骤。すべての操作は無画面環境に設計されており、明確なコマンドラインの例(注釈付き)と設定ファイルの例が提供されています。

関連ツールの紹介#

ハードウェアツールリスト#

  1. ラズベリーパイ 5-16G 版
    1. ラズベリーパイ 5 公式製品紹介:https://datasheets.raspberrypi.com/rpi5/raspberry-pi-5-product-brief.pdf
    2. ラズベリーパイ 5 機械モジュール&インターフェース図面:https://datasheets.raspberrypi.com/rpi5/raspberry-pi-5-mechanical-drawing.pdf
    3. ラズベリーパイ 5 公式入門文書:https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
  2. ラズベリーパイ 5 アルミ合金 CNC 超薄型ケース - ファン付き版(自分で淘宝で検索して購入してください)
  3. 公式 PD 充電器(Raspberry Pi 5 の性能は Raspberry Pi 4 よりも高く、使用電力が不足している電源では問題が発生する可能性があります。したがって、高品質の 5V 5A USB-C 電源の使用をお勧めします)
  4. TF カード - U3V30A2(64GB 以上)
  5. リーダー

ソフトウェアツールリスト#

  1. Kali 公式イメージ:https://kali.download/arm-images/kali-2025.2/kali-linux-2025.2-raspberry-pi-arm64.img.xz
  2. ラズベリーパイ公式ブートディスク作成ツール:https://downloads.raspberrypi.org/imager/
  3. VNC ツール:https://www.realvnc.com/en/connect/download/viewer/(筆者個人推奨)
  4. FRP:https://github.com/fatedier/frp

Kali ラズベリーパイイメージと TF カードの焼き付け準備#

イメージのダウンロード: Kali Linux 公式ウェブサイトにアクセスして、ラズベリーパイ用の最新 ARM64 イメージファイルを取得します。例えば、kali-linux-2025.2-raspberry-pi-arm64.img.xz イメージを使用します。これは XFCE デスクトップ環境を含み、ラズベリーパイ 5 ハードウェアをサポートしています。64GB 以上の高速 microSD TF カードを使用して、完全なシステムとツールセットを収容することをお勧めします。イメージをダウンロードした後、SHA256 チェック値を確認して、ファイルが完全であることを確認できます。

焼き付けツールの準備: Raspberry Pi 公式提供のイメージ書き込みツール Raspberry Pi Imager(Windows、macOS、Linux をサポート)をインストールします。Balena Etcher などのツールやコマンドライン dd を使用して焼き付けることもできますが、Raspberry Pi Imager は便利な事前設定オプションを提供します。

TF カードにイメージを書き込む:

  • TF カードをリーダーに挿入し、コンピュータに接続します。重要なデータをバックアップするか、新しいカードを使用してください。
  • Raspberry Pi Imager を開き、「オペレーティングシステムを選択 (Choose OS)」ボタンをクリックします。リストから **「Kali Linux」** を見つけます(「その他の特定目的の OS」で見つけることができます)。ラズベリーパイ 5 ハードウェアアーキテクチャに一致する 64 ビットの Kali Linux イメージを選択します。または、「カスタムイメージを使用する」でダウンロードしたイメージをアップロードします。
  • 「ストレージを選択 (Choose Storage)」をクリックし、ターゲット TF カードを選択します。(このステップを慎重に確認し、間違って書き込まないようにしてください!!!)
  • (オプション)事前にフォーマット:書き込みエラーが発生した場合は、SD カードフォーマッタなどのツールを使用して TF カードを完全に FAT32/exFAT 形式にフォーマットします。

「書き込む」をクリックする前に、Raspberry Pi Imager の高度なオプションを使用してシステムを事前設定し、ヘッドレスログインを実現します。

Raspberry Pi Imager を使用してイメージを書き込み、プリセットオプションを設定する#

高度な設定を開く: Raspberry Pi Imager でイメージとストレージデバイスを選択した後、ウィンドウ内のギアアイコンをクリックするか、ショートカットキー Ctrl+Shift+X を使用して高度なオプションメニューを開きます。Raspberry Pi Imager は、書き込み時にシステム設定を入力するための一連のプリセット設定オプションを提供します:

image-20250710223232323

  • SSH を有効にする: 「サービス」で「Enable SSH」にチェックを入れ、パスワード認証でのログインを許可します。これにより、システムが初めて起動する際に SSH サービスが自動的に開始されます。
    image-20250710223212345
  • ホスト名を設定する: 「ホスト名を設定 (Set hostname)」にシステムのホスト名を入力します。例えば、kali-pi と入力し、ローカルネットワーク内で名前を使ってラズベリーパイにアクセスできるようにします。
  • デフォルトのユーザー名 / パスワードを設定する: デフォルトアカウント(例えばユーザー名 kali)とパスワード(例えば kali)を入力します。Kali のデフォルトユーザー名 / パスワードは kali/kali です。カスタムユーザー名を使用する場合、Kali イメージには自動的に kali ユーザーが存在する可能性があるため、プロセスを簡素化するためにデフォルトを保持することをお勧めします。
  • Wi-Fi を設定する: Wi-Fi ネットワークの SSID(無線名)とパスワードを入力し、Wi-Fi の国 / 地域コードを選択します。国コードは重要で、Wi-Fi の所在地と一致する必要があります(例えば、中国ではCNと入力します)。これにより、ラズベリーパイが起動時に自動的に無線ネットワークに接続するための Wi-Fi 設定が生成されます。
  • 地域と言語設定: ローカル言語とキーボードを設定し、キーボードレイアウトは **「us」(英語)を選択し、タイムゾーンは「Asia/Shanghai」** または該当するタイムゾーンを選択します。正しい地域設定は、システムが中国語を表示し、正しいキーボードレイアウトを使用するのに役立ちます。
    image-20250710223159693

設定が完了したら、「保存」をクリックし、「書き込む」をクリックしてイメージの焼き付けを開始し、上記のプリセットオプションを適用します。

注意: コミュニティの経験に基づくと、Kali Linux 公式イメージはRaspberry Pi Imager の自動プリセット機能を完全にサポートしていません。つまり、Imager で SSH と Wi-Fi を設定しても、初回起動時に必ずしも有効になるわけではありません。無表示器の場合にリモート接続できるようにするために、手動での設定を行うことをお勧めします(以下を参照)。

書き込みが完了するまで待つ: 書き込みプロセスには数分から十数分かかる場合があります。完了後、Imager は書き込み結果を検証します。書き込みが成功した後、すぐにカードを取り出さないでください。いくつかの手動設定を行う必要があります(特に SSH が有効であり、Wi-Fi 設定が正しいことを確認するため)。

image-20250710224339976

初回起動前の手動設定(SSH と Wi-Fi の有効化)#

Kali Linux イメージは初回起動時にデフォルトで SSH が無効になっており、Raspberry Pi Imager を通じて Wi-Fi を自動設定することができません。したがって、ラズベリーパイを挿入して電源を入れる前に、以下の手動設定を実行して、システムがネットワークに接続でき、SSH ログインを許可することをお勧めします:

  • パーティションをマウントする: 書き込みが完了すると、コンピュータ上に 2 つの新しいパーティションが表示されます:1 つはbootという名前のブートパーティション(FAT32)、もう 1 つは Linux ルートファイルシステムパーティション(ext4、Windows では見えない場合があります)。主に操作するのはbootパーティション、つまり /boot パーティションです。

  • SSH を有効にする: bootパーティションのルートディレクトリに、拡張子なしの ssh という名前の空のファイルを作成します。これにより、システムが初回起動時に Kali が SSH サービスを有効にします。Windows では新しいテキストファイルを作成し、「ssh」と名付け(.txt 拡張子が付かないようにしてください)、Linux/macOS では次のコマンドを実行できます(boot が /mnt/boot にマウントされていると仮定します):

    # bootパーティションに空のsshファイルを作成してSSHを有効にする
    sudo touch /mnt/boot/ssh
    
  • Wi-Fi を設定する: ラズベリーパイを Wi-Fi 経由でインターネットに接続する必要がある場合は、bootパーティションのルートディレクトリに wpa_supplicant.conf ファイルを作成し、無線ネットワークの設定を記入します。ファイル内容の形式は以下の通りです(実際の Wi-Fi 情報に基づいて修正してください):

    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    country=CN  # CNをあなたの国コードに変更してください。例:US、UKなど
    
    network={
        ssid="Your_WiFi_SSID"        # Wi-Fi 名称
        psk="Your_WiFi_Password"     # Wi-Fi パスワード
        key_mgmt=WPA-PSK             # 暗号化タイプ、WPA2で一般的なWPA-PSK
    }
    
  • 上記の内容の Your_WiFi_SSID と Your_WiFi_Password を実際の無線ネットワーク名とパスワードに置き換えます。保存する際は、ファイル名がwpa_supplicant.confであることを確認してください(.txt 拡張子を付けないでください)。Kali は起動時に通常この設定ファイルを /etc/wpa_supplicant/ に移動し、Wi-Fi 接続に使用します。

以上の手順が完了したら、TF カードを取り出して取り外します。カードをラズベリーパイ 5 に挿入し、電源を接続して起動します。システムが初回起動設定を完了するまで約 1〜2 分待ちます。

同時に、ルーターで DHCP 静的 IP 割り当てを完了することをお勧めします。

image-20250711111216799

初回起動と SSH リモートログイン Kali#

ラズベリーパイに電源を入れると、前の設定に基づいて Wi-Fi に接続し、SSH サービスを有効にしようとします。次に、別のコンピュータから SSH を介してラズベリーパイの Kali システムにログインする必要があります:

  • ラズベリーパイの IP アドレスを探す: 無表示器環境でデバイスの IP を取得することが最初の課題です。ルーターの管理インターフェースにログインして新しく接続されたデバイスを確認することができます(ホスト名 kali-pi に基づいて、または新しい DHCP リストを確認することができます)、または nmap などのローカルネットワークスキャンツールを使用して、オープンな 22 ポートのホストを見つけることができます。もう 1 つの方法は、mDNS ホスト名を使用することです(ネットワークがサポートしている場合)、直接 SSH 接続を試みることができます kali-pi.local(前提として、ネットワーク内で DNS 解決が行われているか、コンピュータに Bonjour サービスがインストールされている必要があります)。

  • SSH 接続を使用する: ターミナルまたはコマンドプロンプトで次のコマンドを実行します(を実際のラズベリーパイの IP アドレスに置き換えます):

    ssh kali@<IP>
    
  • 予め設定したユーザー名 / パスワード(または Kali のデフォルト kali/kali)を使用した場合、ログインするためのパスワードを入力するように求められます。初回接続時にはホストキーを受け入れる必要があります。

  • パスワードを変更する: 初回ログイン後、セキュリティ上の理由から、デフォルトアカウントのパスワードをすぐに変更してください:

    sudo passwd kali
    
    • 指示に従って新しいパスワードを入力します。

これで、SSH を介してラズベリーパイ上の Kali システムに成功裏にログインしました。次に、システムの設定やソフトウェアのインストールを行うことができます。

ヒント: この時点でラズベリーパイに SSH 接続できない場合は、文末のよくある問題のトラブルシューティングセクションを参照してください。一般的な原因には、SSH が正常に有効になっていない、Wi-Fi が接続されていないなどが含まれます。有線ネットワーク接続や上記のファイルを再設定することで修正できます。

ソフトウェアソースを国内ミラーに変更する(更新速度を向上させる)#

Kali Linux のデフォルトソフトウェアソースは海外のサーバーにあり、国内で直接更新すると遅くなるか、失敗する可能性があります。ソフトウェアソースを国内ミラーソース(例えば、清華大学オープンソースミラーサイト)に切り替えて速度を向上させることができます。操作手順:

  1. ソースリストのバックアップ: ソースリストファイルを編集する前に、元のファイルをバックアップすることをお勧めします:

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
  2. /etc/apt/sources.list を編集する: vim、nano などのエディタを使用してこのファイルを開き、元の公式ソース行をコメントアウトし、ファイルの先頭に国内ソースアドレスを追加します。例えば、清華大学の Kali ミラーソースを追加します:

    sudo nano /etc/apt/sources.list
    
    # 中科大源、阿里源なども使用可能です。ここでは清華TUNA源を例にします。
    # 清華大学 Kali ミラーソース
    deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware
    deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware
    
  3. 上記の 2 行はそれぞれバイナリソフトウェアパッケージソースとソースソースのアドレスを指定しています。kali-rolling は Kali のローリングアップデートブランチで、main(メイン)、contrib(貢献)、non-free(非自由)およびnon-free-firmware(非自由ファームウェア)コンポーネントを含みます。実際のニーズに応じてすべてのコンポーネントを含めるようにしてください。ドライバーやツールが不足しないようにします。

  4. APT キーを更新する(必要に応じて): ソースを変更した後、更新を実行すると公開鍵が無効などのエラーが発生した場合は、次のコマンドを実行して Kali 公式リポジトリの公開鍵をインポートします。

    sudo wget -q -O - https://archive.kali.org/archive-key.asc | sudo apt-key add -
    

    その後、更新コマンドを再実行し、変更を保存してエディタを終了します。

システムを更新し、パッケージをアップグレードする#

ソースを変更した後、まずシステムの更新を実行し、最新のパッチとインデックスをインストールします:

# ソフトウェアパッケージインデックスを更新する
sudo apt update -y
# インストール済みのソフトウェアパッケージをアップグレードする
sudo apt -y full-upgrade -y

上記のコマンドは APT パッケージリストを更新し、すべての利用可能なアップグレードを適用します。Kali(Debian)では、依存関係の変更を処理するために full-upgrade(または dist-upgrade)を使用することをお勧めします。このプロセスには、特にイメージバージョンが最新でない場合、しばらく時間がかかることがあります。完了するまで辛抱強く待ち、プロンプトが表示された場合は、Y を押して確認するか、q を押して詳細情報の表示をスキップします。

システムのアップグレードが完了したら、ラズベリーパイを再起動することをお勧めします(sudo reboot)、これによりカーネルなどの更新が有効になります。再起動後、再度 SSH でログインして次のステップを続けます。

kali-linux-everything ツールセットをインストールする#

Kali Linux は複数のツールセットメタパッケージを提供しており、その中のkali-linux-everythingは Kali の「ほぼすべての」ツールを含んでいます。十分なストレージスペースと帯域幅がある場合、このツールセットを一括インストールして、ラズベリーパイ上で完全なペネトレーションテストツールを備えることができます。

sudo apt install -y kali-linux-everything
バージョン名簡単な説明使用シーン
Installer / Default標準インストール版、基本システムと一般的なペネトレーションテストツールのみを含む一般的なペネトレーションテスト環境、ネットワーク接続更新に適している
Live ISO起動可能で、インストール不要(GUI と一部ツールを含む)一時的なテスト、USB ドライブの携帯システム、証拠収集
Netinst最小化インストール、ネットワーク接続が必要高度なカスタマイズインストール、軽量仮想マシンや自動デプロイに適している
Largeほとんどの主流 Kali ツールを含むインストールパッケージペネトレーションテスターが一般的に使用し、デプロイ後はほとんど追加インストールが不要
EverythingKali リポジトリ内のすべてのツールを含む、インストールイメージは 20GB 以上オフライン環境のデプロイ、大規模なターゲット、完全なツールチェーンの準備
機能モジュールDefault/InstallerLargeEverything
kali-linux-default ツールセット
top10、wireless、web などの分類ツール⛔️(手動インストール)✅(ほとんどを含む)✅(すべて)
すべての Kali メタパッケージ(metapackage)⛔️一部✅ 全部
ツール総数(粗い推定)100–200300–400600+

このコマンドは数 GB のデータをダウンロードする可能性があります(完全なインストールサイズは 20GB を超える可能性があります)。ネットワークが安定しており、TF カードに十分な空き容量があることを確認してください(64GB 以上のカードを使用する理由です)。ネットワーク速度に応じて、このプロセスは長時間続く可能性があります。インストール中、APT は自動的に依存関係を処理し、ソフトウェアを設定します。対話的なプロンプトが表示された場合は、デフォルトを選択するか、必要に応じて選択してください。

完了後、ラズベリーパイ上の Kali には完全なツールセットが備わり、さまざまなセキュリティテストの準備が整います。

グラフィカルインターフェースと VNC サービスの設定(リモートデスクトップ)#

無表示器の場合でも、Kali のグラフィックデスクトップ(XFCE)を使用して特定のツールを実行したり、完全なデスクトップ体験を得たりする必要がある場合があります。そのため、システムが起動時にグラフィカルインターフェースを起動し、VNCを介してリモートデスクトップアクセスを実現するように設定します。

デフォルトの起動をグラフィカルインターフェースに設定する#

Kali Linux ラズベリーパイイメージは、デフォルトでテキストコンソールに起動する可能性があります。システムが起動後に XFCE デスクトップ環境に入ることを希望する場合、システムターゲットをグラフィックモードに調整する必要があります:

# システムのデフォルトランレベルをグラフィカルインターフェースに設定する
sudo systemctl set-default graphical.target

上記のコマンドを実行すると、システムはデフォルトで表示マネージャー(例えば LightDM)を起動してグラフィカルインターフェースに入ろうとします。無表示器環境の場合、ラズベリーパイがディスプレイに接続されていない場合、デフォルトでは X サーバーが実際にインターフェースを表示できない可能性があります。ただし、VNC を介して仮想表示を作成することはできます。

注意: ラズベリーパイが常に物理ディスプレイなしである場合、graphical.target はデスクトップサービスを起動しますが、HDMI 接続がない場合、デフォルトの:0 表示出力が作成されない可能性があります。後で VNC 仮想デスクトップを使用してこの問題を解決します。将来的にディスプレイを接続してローカル操作を行う必要がある場合は、この設定を保持して直接デスクトップに入るのが便利です。

TigerVNC サービスをインストールする#

TigerVNCは性能の良い VNC サーバーの実装です。ラズベリーパイ上で仮想デスクトップセッションを実行するためにこれを選択します。インストールコマンド:

sudo apt install -y xfce4 xfce4-goodies tigervnc-standalone-server tigervnc-common autocutsel
  • tigervnc-standalone-server は TigerVNC サーバープログラムをインストールします。
  • tigervnc-common は関連する一般的なファイルを提供します。
  • autocutsel ツールは VNC セッションとローカルクリップボード間でクリップボードを同期します(コピー / ペースト)

インストールが完了したら、VNC アクセスパスワードを設定し、設定を初期化します:

# 通常のユーザーに切り替える(現在rootでログインしている場合はkaliユーザーに戻してください)
exit            # kaliユーザーで操作することを確認

# VNCパスワードを設定する(パスワードを入力して確認するように求められます)
vncpasswd

# 初回VNCサービスを起動する(設定ファイルを生成し、VNCセッション :1 を作成)
vncserver :1

初めて vncserver :1 を実行すると、アクセスパスワードを設定するように求められ(長さは 8 文字以内)、オプションで「読み取り専用」パスワードを設定できます(ここではnを選択し、読み取り専用パスワードは不要です)。その後、次のような情報が出力され、番号:1 の VNC デスクトップが起動したことを示します(対応する TCP ポート 5901)。

VNC サービスは 5900 ポートで起動し、デスクトップ環境のために新しいポートを作成する必要があります。ここで 1 は + 1 であり、5901 ポートに対応します。vncserver :2 の場合は 5902 ポートになります。

New 'X' desktop is kali:1
Creating default startup script /home/kali/.vnc/xstartup
Starting applications specified in /home/kali/.vnc/xstartup
Log file is /home/kali/.vnc/kali:1.log

これは TigerVNC がバックグラウンドで仮想デスクトップセッションを起動したことを示しています。デフォルトでは、この仮想デスクトップには灰色の背景と X ターミナルしかない可能性があります(または、まだ正しく設定されていないために終了する可能性があります)。次に、XFCE デスクトップ環境を起動するための設定を行います。

先ほど起動した VNC セッションを停止します:

vncserver -kill :1

これにより、セッションが終了し、設定ファイルを編集して再起動できるようになります。

VNC の XFCE デスクトップセッションを設定する#

TigerVNC(および TightVNC)のデフォルトの起動スクリプトは~/.vnc/xstartup にあり、初回実行時に生成されます。XFCE4 デスクトップ環境を起動するためにこれを変更する必要があります。そうしないと、VNC 接続後に灰色の画面と X カーソルしか表示されない可能性があります。ファイルを編集します:

sudo nano ~/.vnc/xstartup

その内容を以下のように置き換えます:

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &   # XFCE4デスクトップセッションを起動
autocutsel -fork  # クリップボード同期を起動

上記の設定により、VNC 仮想セッションが起動するたびに、残留する可能性のあるセッション環境変数がクリアされ、XFCE4 デスクトップがバックグラウンドで起動し、autocutsel がクリップボード共有をサポートします。ファイルを保存してエディタを終了します。

xstartup スクリプトに実行権限を付与します:

sudo chmod +x ~/.vnc/xstartup

注意: xstartup ファイルの権限は実行可能でなければなりません。そうでないと、TigerVNC はそれを無視し、XFCE デスクトップを起動できません。

VNC 接続を手動でテストする#

現在、VNC サービスを手動で起動し、リモートデスクトップアクセスが可能かどうかをテストします:

# 再度VNCセッション :1 を起動する
vncserver :1 -geometry 1280x800 -depth 24

ここでは、解像度を 1280x800、色深度を 24 ビットに指定しています。必要に応じて、-geometry パラメータを調整して適切な仮想画面解像度を設定できます(一般的には 1920x1080、2560×1440 など)。

起動に成功したら、PC 上で VNC Viewer(TigerVNC Viewer、RealVNC Viewer など)を使用して、ラズベリーパイの IP とポートに接続します。例えば:

192.168.1.25:5901

パスワードの入力を求められたら、以前に設定した VNC パスワードを入力すると、Kali XFCE デスクトップ環境の画面が表示されます。この時点で、無表示器のラズベリーパイ上でリモートでグラフィカルインターフェースを使用しています。

接続後に灰色の画面や黒い画面が表示された場合、xstartup の設定が誤っているか、実行権限が付与されていない可能性があります。~/.vnc/xstartup の内容が上記と一致しているか、実行可能であることを確認してください。また、前のステップで vncserver -kill を実行してから編集し、再起動する必要があります。そうしないと、古いインスタンスが新しい設定を読み込まない可能性があります。

vncserver -kill :1

image-20250711092623134

VNC サービスを自動起動するように設定する#

ラズベリーパイが起動するたびに VNC サービスを自動的に開始するために、systemd サービスを設定して VNC サーバーを管理します。Kali 上で新しい systemd ユニットファイルを作成します:

sudo nano /etc/systemd/system/vncserver@.service

以下の内容を入力して保存します:

[Unit]
Description=Start TightVNC (TigerVNC) server at startup
After=syslog.target network.target

[Service]
Type=forking
User=bluedog
Group=bluedog
WorkingDirectory=/home/bluedog
PIDFile=/home/bluedog/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1920x1080 :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

上記の設定では、% i はインスタンス番号を表します。例えば、vncserver@1.serviceは % i を 1 に置き換え、:1 セッションを起動します。サービスを kali ユーザーとして実行するように設定し、起動前に残留する:1 インスタンスを終了し、起動時に解像度を 1920x1080、色深度を 24 ビットに設定します。必要に応じて変更できます。

ファイルを保存した後、systemd 設定をリフレッシュし、サービスを起動および有効化します:

sudo systemctl daemon-reload
sudo systemctl start vncserver@1.service    # VNCサービスインスタンス :1 を起動
sudo systemctl enable vncserver@1.service   # 自動起動を設定

これで、ラズベリーパイが再起動しても、システム起動中に自動的に VNC サービスが開始され、いつでもリモートでデスクトップに接続できます。

ヒント: デフォルトの VNC サービスはローカルのすべてのインターフェースの 5901 ポートをリッスンします。これは LAN 内でのみアクセス可能です。インターネット経由でアクセスする必要がある場合は、以下の FRP 内網穿透設定を組み合わせることをお勧めします。または、ネットワーク環境が安全であり、複雑な VNC パスワードを設定してください。

VNC の解像度を動的に調整する#

デフォルトの vnc クライアントは、クライアントの画面サイズに合わせて vnc の解像度を動的に調整することをサポートしていません。ただし、手動で変更できます。

xrandr

image-20250711093944551

現在サポートされている解像度が表示されます。

xrandr --output VNC-0 --mode 2560x1440

実行後、現在の vnc ウィンドウのサイズが対応する解像度に調整されます。

FRP を設定してリモートアクセスを実現する(内網穿透)#

多くの実際のシーンでは、ラズベリーパイが内網にあるか、パブリック IP がなく、インターネット経由で直接接続できない場合があります。FRP を使用して内網穿透を実現し、ラズベリーパイの SSH および VNC サービスをパブリックサーバーにマッピングして、いつでもリモートでラズベリーパイにアクセスできるようにします。

**FRP (Fast Reverse Proxy)** は、クライアントとサーバーで構成されています:

  • FRP サーバー (frps) は、パブリック IP またはクラウドサーバーにデプロイされ、クライアントからの接続をリッスンし、リモートアクセス用にポートを開放します。
  • FRP クライアント (frpc) は、ラズベリーパイなどの内網デバイスにデプロイされ、FRP サーバーに積極的に接続し、ローカルサービスポートをマッピングします。

以下では、固定パブリック IP またはドメイン名を持つサーバーを FRP サーバーとして使用することを前提とします(またはクラウドサーバーを使用します)。このサーバーを中継として使用し、ラズベリーパイの SSH および VNC ポートをマッピングします。

サーバーで FRP サービスを設定する (frps)#

(すでに FRP サーバーが実行されている場合は、このセクションをスキップできます。)クラウドサーバーで:

  1. frp をダウンロードする: FRP 公式リポジトリから最新バージョンを取得します。https://github.com/fatedier/frp/releases をブラウズして最新バージョンのダウンロードリンクを見つけることができます。例えば、ここでは最新バージョンが v0.61.0 で、Linux amd64 プラットフォームに対応しています:

    wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
    tar -xzf frp_0.61.0_linux_amd64.tar.gz
    cd frp_0.61.0_linux_amd64
    
  2. frps を設定する: 解凍したディレクトリ内で frps.toml を見つけ(存在しない場合は作成します)、以下の設定を書き込みます:

########################################
#  Fast Reverse Proxy Server (frps)    #                                     
#  位置:阿里云 ECS 4*.**.**.**0         #
########################################

# [common]
# ───────── 基础监听 ─────────
bindAddr = "0.0.0.0"          # すべてのIPv4をリッスン(IPv6が必要な場合は":::"に変更)
bindPort = 7501               # frpc側のserverPortは一致する必要があり、クラウドサーバーで対応するポートを開放する必要があります
# ───────── 認証トークン ─────────
auth.token = "自分のパスワードに設定してください"        # クライアントのauth.tokenは同じでなければなりません
# ───────── ドメイン転送ポート ─────
# ドメイン解析はまだ有効になっていないため、80/443を直接閉じて、ポートの重複を避けます
# vhostHTTPPort  = 0
# vhostHTTPSPort = 0
# ───────── ログ設定 ─────────
# logFile    = "/root/frp/frps.log"   # カスタムログパス
# logLevel   = "info"                 # オプション:trace, debug, info, warn, error
# logMaxDays = 7                      # ログ保持日数
# ───────── オプション:ダッシュボード ─────
# dashboardPort = 7501             # Web UIポート
# dashboardUser = "自分のユーザー名に設定してください"
# dashboardPwd  = "自分のパスワードに設定してください"
# ───────── オプション:TLS強化 ────
# mTLSが必要な場合は、有効にします:
# authenticationMethod = "token,tls"
# tlsOnly              = true
# 証明書関連のフィールドは公式の例を参照

subdomainHost = "あれば自分のドメインに設定してください"
  1. frps を起動する: フロントエンドで直接実行できます:
sudo ./frps -c ./frps/frps.toml

または、バックグラウンドサービスとして実行します:

nohup ./frps -c ./frps/frps.toml &>/var/log/frps.log &
  1. サーバーのファイアウォールが必要なポート(例えば TCP 7000、SSH の 6000、VNC の 6001 など)を開放していることを確認します。

  2. frps を自動起動するように設定する: 新しい systemd サービスを /etc/systemd/system/frps.service に作成し、以下の内容を書き込みます:

    [Unit]
    Description=Fast Reverse Proxy Server (frps)
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/root/frp/frps -c /root/frp/frps.toml               # 自分のパスに注意してください!
    Restart=on-failure
    LimitNOFILE=65535
    
    [Install]
    WantedBy=multi-user.target
    

    保存後、サービスを有効化します:

    sudo systemctl daemon-reload
    sudo systemctl enable frps
    sudo systemctl start frps
    

ラズベリーパイで FRP クライアントを設定する (frpc)#

Kali ラズベリーパイに戻ります:

  1. frpc をダウンロードする: ラズベリーパイアーキテクチャに基づいて FRP クライアントの Linux ARM64 バージョンをダウンロードします。バージョンはサーバーと一致する必要があります。
cd /tmp
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_arm64.tar.gz
tar xzf frp_0.61.0_linux_arm64.tar.gz
cd frp_0.61.0_linux_arm64
sudo cp frpc /usr/bin/              # frpc実行可能ファイルをパスにインストール
sudo cp frpc.toml /etc/frpc/frpc.toml      # デフォルト設定ファイルを/etcにコピー
  1. 上記は v0.61.0 の例です。実際の最新バージョン番号に置き換えてください。解凍後、frpc 実行可能ファイルを /usr/bin に配置し、直接実行できるようにします。サンプル設定をリネームして /etc に配置し、統一管理を容易にします。

  2. frpc を設定する: /etc/frpc/frpc.toml ファイルを編集し、実際のニーズに基づいて変更します。ラズベリーパイの SSH(22 ポート)と VNC(5901 ポート)をサーバーの対応ポートにマッピングしたい場合、対応する設定は以下のようになります:

###############################################################################
#  Fast Reverse Proxy Client (frpc)
#  ホスト:Raspberry Pi Kali — 192.168.**.**(自分のIPアドレスに切り替えてください)
###############################################################################

#############################
# frps接続情報
#############################
serverAddr     = "4*.**.**.**0"   # アリクラウドのパブリックIP
serverPort     = 7501               # frps.bindPort
loginFailExit  = false              # 切断しても終了せず、再接続を続ける

[auth]
  method = "token"
  token  = "自分のパスワードに設定してください"        # frps.tokenと一致させる

#############################
# ポートマッピング(TCP)
#############################
[[proxies]]                # SSH
  name       = "kalissh"
  type       = "tcp"
  localIP    = "192.168.**.**"
  localPort  = 22
  remotePort = 5022          # frps.allowPorts & セキュリティグループで開放済み

[[proxies]]                # VNC
  name       = "kalivnc"
  type       = "tcp"
  localIP    = "127.0.0.1"(ここはループバックアドレスを使用する必要があります!!!)
  localPort  = 5901
  remotePort = 5901          # frps.allowPorts & セキュリティグループで開放済み

[common] セクションに FRP サーバーのアドレス、ポート、認証トークンなどの共通パラメータを入力します。次に、2 つのトンネルを定義します:[ssh] と [vnc]、それぞれローカルの SSH サービス(192.168.*0.**:22)と VNC サービス(127.0.0.1:5901)を FRP を介して公開します。remote_port は FRP サーバーで開放されたポート番号を指定します。必要に応じて変更できますが、サーバーのファイアウォール設定に対応させる必要があります。

  1. frpc を自動起動するように設定する: 新しい systemd サービスを /etc/systemd/system/frpc.service に作成し、以下の内容を書き込みます:
[Unit]
Description=Fast Reverse Proxy Client (frpc)
After=network.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/home/username/frp/frpc -c /home/username/frp/frpc.toml   # 自分のパスに注意してください!
Restart=always
RestartSec=3
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

保存後、サービスを有効化します:

sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc

これで、ラズベリーパイが起動する際に自動的に frpc が実行され、ネットワークが準備でき次第 FRP サーバーに接続します。

  1. 接続を確認する: ラズベリーパイ上で sudo systemctl status frpc を実行してログを確認し、サーバーに正常に接続されていることを確認します。エラーがないことを確認します。問題がある場合は、/var/log/syslog または /var/log/frpc.log(ログ出力を設定した場合)を確認してください。

サーバー上でも、frps ログを確認するか、ss -tnl を使用して対応するポートがリッスンされていることを確認できます。

  1. リモートアクセス: 現在、どのネットワーク環境でも、FRP サーバーの IP / ドメイン名 + ポートにアクセスすることでラズベリーパイを管理できます:
  • SSH アクセス:ssh kali@<サーバー IP> -p 6000(FRP の 5022 ポートを介してラズベリーパイの 22 ポートに転送します)。初めて使用する場合は、この組み合わせを~/.ssh/config に追加して、迅速に接続できるようにします。
  • VNC アクセス:VNC Viewer で <サーバー IP>:6001 に接続します。これは FRP サーバーの 6001 ポートを介してラズベリーパイの 5901 に転送されます。以前に設定した VNC パスワードを入力すると、リモートデスクトップ制御が可能になります。

FRP を介して、通信は指定したトークンで検証され、(TLS を有効にした場合は)暗号化されて転送されるため、一定の安全性が確保されます。さらに安全にするために、SSH はキー認証を使用し、パスワードログインを無効にするなどの追加の強化策を講じることをお勧めします。

これで、ラズベリーパイがどこにあっても(たとえ NAT 制限のある環境にあっても)、FRP クライアントとサーバーが接続されている限り、いつでも FRP トンネルを介してリモート SSH または VNC で Kali システムにアクセスできるようになりました。

その他のソフトウェアと試行錯誤#

ログインウェルカム画面のカスタマイズ#

image-20250711110405304

コンポーネント機能
/etc/update-motd.d/*一連の実行可能スクリプトで、数字のプレフィックスに従って順次実行され、出力を結合して動的 MOTDを生成します。
/etc/motd静的 MOTD テキスト。内容が存在する場合、動的 MOTD の後に追加されます。
pam_lastlog.soPAM によって呼び出され、Last login 記録を自動的に出力します。
/etc/issue.net + Banner 指令SSH セッションバナー。ASCII バナーを再利用し、ローカル / リモートで一貫性を持たせます。

ファイル構造と実行順序

/etc/update-motd.d/
├── 00-header     # ASCIIバナー
├── 10-sysinfo    # システム状態
└── 20-network    # ネットワーク情報

数字のプレフィックスが実行の順序を決定します。出力順序は表示順序です。

ASCII バナーの作成#

  1. オンライン生成

  2. ローカル生成

figlet -f slant "BlueDog"
toilet -f big -F metal "BlueDog"

生成された文字アートをコピーしておきます。

00-header の作成#

sudo tee /etc/update-motd.d/00-header >/dev/null <<'EOF'
#!/bin/bash
clear   # 上画面の残留を防ぐ

# ---------------- ASCIIバナー -----------------
cat <<'BANNER'
 ,---,.    ,--,                                  ,---,                            
  ,'  .'  \ ,--.'|                                .'  .' `\                          
,---.' .' | |  | :             ,--,             ,---.'     \     ,---.               
|   |  |: | :  : '           ,'_ /|             |   |  .`\  |   '   ,'\    ,----._,. 
:   :  :  / |  ' |      .--. |  | :     ,---.   :   : |  '  |  /   /   |  /   /  ' / 
:   |    ;  '  | |    ,'_ /| :  . |    /     \  |   ' '  ;  : .   ; ,. : |   :     | 
|   :     \ |  | :    |  ' | |  . .   /    /  | '   | ;  .  | '   | |: : |   | .\  . 
|   |   . | '  : |__  |  | ' |  | |  .    ' / | |   | :  |  ' '   | .; : .   ; ';  | 
'   :  '; | |  | '.'| :  | : ;  ; |  '   ;   /| '   : | /  ;  |   :    | '   .   . | 
|   |  | ;  ;  :    ; '  :  `--'   \ '   |  / | |   | '` ,/    \   \  /   `---`-'| | 
|   :   /   |  ,   /  :  ,      .-./ |   :    | ;   :  .'       `----'    .'__/\_: | 
|   | ,'     ---`-'    `--`----'      \   \  /  |   ,.'                   |   :    : 
`----'                                 `----'   '---'                      \   \  /  
                                                                            `--`-'   
BANNER

echo "-------------------------------------------------------------------------------------"
EOF
sudo chmod +x /etc/update-motd.d/00-header

10-sysinfo の作成#

sudo tee /etc/update-motd.d/10-sysinfo >/dev/null <<'EOF'
#!/bin/bash
OS="$(lsb_release -ds)"
KERNEL="$(uname -r)"
MEM_USED="$(free -h --si | awk 'NR==2 {print $3 "/" $2}')"
DISK_ROOT="$(df -h / | awk 'NR==2 {print $3 "/" $2 " (" $5 ")"}')"
CPU_TEMP="$(vcgencmd measure_temp | cut -d= -f2)"

printf "🖥  システム:  %s  |  カーネル: %s\n" "$OS" "$KERNEL"
printf "💾  メモリ:  %s\n" "$MEM_USED"
printf "📦  ディスク:  %s\n" "$DISK_ROOT"
printf "🌡  温度:  %s\n" "$CPU_TEMP"
echo "-------------------------------------------------------------------------------------"
EOF
sudo chmod +x /etc/update-motd.d/10-sysinfo

20-network の作成#

sudo tee /etc/update-motd.d/20-network >/dev/null <<'EOF'
#!/bin/bash
IP=$(hostname -I | awk '{print $1}')
SSID=$(iwgetid -r 2>/dev/null || echo "オフライン")

printf "🌐  IP アドレス: %s\n" "$IP"
printf "📶  Wi-Fi SSID: %s\n" "$SSID"
echo "-------------------------------------------------------------------------------------"
EOF
sudo chmod +x /etc/update-motd.d/20-network

デフォルトの /etc/motd をクリアする#

sudo mv /etc/motd /etc/motd.bak   # バックアップ
sudo touch /etc/motd              # 空のファイルを作成

これにより、Last login を保持し、GPL/Warranty の説明を除去します。


SSH バナーの同期(オプション)#

sudo cp /etc/update-motd.d/00-header /etc/issue.net
sudo sed -i 's@^#Banner none@Banner /etc/issue.net@' /etc/ssh/sshd_config
sudo systemctl restart ssh

ファン&速度調整制御#

まず、ラズベリーパイ 5 のファンは 65 度で回転を開始し、タスクや大モデルタスクがない場合は基本的に回転しません。

また、gpiozero + RPi.GPIO はラズベリーパイ 5 を完全にサポートしていないため、GPIO にアクセスするとエラーが発生します。

image-20250711111602896

そのため、config.txt のパラメータを使用してRP1 コントローラーのファン自動調速機能を有効にする必要があります。ネイティブで 1〜3 の温度制御レベルをサポートします(温度トリガー + PWM デューティサイクルの組み合わせ)。

多段温度制御ファン設定方法(config.txt)

/boot/firmware/config.txt(ラズベリーパイ 5 はこのパスを使用)に以下の設定を追加する必要があります:

# ラズベリーパイ 5 ファン三段自動調速設定
dtparam=cooling_fan=on

# 段階1:40°Cで開始し、ファンは60%の速度で動作(153/255)
dtparam=fan_temp1=40000,fan_temp1_hyst=5000,fan_temp1_speed=153

# 段階2:50°Cで開始し、ファンは80%の速度で動作(204/255)
dtparam=fan_temp2=50000,fan_temp2_hyst=5000,fan_temp2_speed=204

# 段階3:55°Cで開始し、ファンは全速で動作(255/255)
dtparam=fan_temp3=55000,fan_temp3_hyst=5000,fan_temp3_speed=255

コアメカニズムは、CPU 温度が特定の温度しきい値を超えると、対応する速度に切り替わり、低い段階に戻ることはなく、温度が対応するヒステリシスしきい値を下回るまで続きます。

ヒステリシスパラメータを追加で設定できます(設定をお勧めします):

dtparam=fan_temp3_hyst=5000   # 第三段階は50°Cに下がるまで停止しない

Wi-Fi の複数ネットワーク自動切り替え設定(家庭用 + モバイルホットスポット)#

Kali はデフォルトで wpa_supplicant を使用して Wi-Fi を管理します。

  1. Wi-Fi 設定ファイルを編集します:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

2 つのネットワークを追加します(優先順位に従って自動切り替え):

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN

network={
    ssid="あなたの家庭WiFi"
    psk="あなたの家庭パスワード"
    priority=10
}

network={
    ssid="あなたのモバイルホットスポット"
    psk="あなたのホットスポットパスワード"
    priority=5
}
  • priority の数値が大きいほど、優先的に接続されます。
  • 利用可能なシーンでは、上の Wi-Fi が優先的に自動接続されます。

保存後、ネットワークサービスを再起動するか、直接再起動します:

sudo wpa_cli -i wlan0 reconfigure

入力法をインストールする#

Google ピンインと Fcitx をインストールします。

sudo apt install fcitx fcitx-googlepinyin

image-20250711101408562

入力法フレームワークを切り替えます。

im-config

image-20250711101523278

入力法の設定が完了したら、必ずシステムを再起動して変更を有効にしてください。

image-20250711103900755

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。