🏠

Jetson で WireGuard を使う(要カーネルビルド)

2025/02/13に公開

https://zenn.dev/19931/articles/380fc2d8cb67a3

はじめに

Jetson を外出先からいじりたい場合は、VPN が欲しい時があると思います。Jetson Linux はデフォルトで WireGuard モジュールが無効になっているので、カーネルビルドをしてインストールします。本記事ではホストコンピュータを使わずに全工程を Jetson 上で行います。

基本的には公式ドキュメントに従えばよいのですが、若干情報が足りていないので補足を含めて書いていきます。なお、Jetson Linux のバージョンによって手順が異なるので、ドキュメントの参照先には気をつけてください。

カーネルの準備

なにはともあれ、バックアップを取ります。

$ sudo cp /boot/Image /boot/Image.default

もし以降の作業に失敗して起動しなくなった時は、Ubuntu Server for ARM などをUSBストレージからブートして書き戻します。OS が NVMe SSD にインストールしてある場合は、eMMC から起動して操作すればよいです。ちなみに Jetson の UEFI shell は ext4 のファイル操作ができません。

Jetson Linux のソースコードをダウンロードして解凍します。ダウンロード元はこちらDriver Package (BSP) Sources です。

$ wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.3/sources/public_sources.tbz2
$ tar xf public_sources.tbz2
$ cd Linux_for_Tegra/source
$ tar xf kernel_src.tbz2
$ tar xf kernel_oot_modules_src.tbz2
$ tar xf nvidia_kernel_display_driver_source.tbz2

現状のカーネルコンフィグをコピーして、必要な設定を追加します。

$ zcat /proc/config.gz > kernel/kernel-jammy-src/arch/arm64/configs/defconfig
kernel/kernel-jammy-src/arch/arm64/configs/defconfig
+ CONFIG_WIREGUARD=y
+ CONFIG_IP_ADVANCED_ROUTER=y
+ CONFIG_IP_MULTIPLE_TABLES=y

コンパイルに必要なパッケージをインストールします。nvidia-jetpack はインストール済みの前提です。検証時は nftables がうまく動かず、強制的に iptables に切り替えるために nftables をアンインストールしました。

$ sudo apt install libssl-dev
$ sudo apt remove nftables

いよいよコンパイルです。10分以上かかります。

$ make -C kernel
$ export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src
$ make modules

インストール

カスタムカーネルをインストールします。

$ sudo -E make install -C kernel
$ sudo -E make modules_install
$ sudo nv-update-initrd
$ sudo reboot

ようやく WireGuard をインストールします。

$ sudo apt -y install wireguard

無事に使える

/etc/wireguard/wg0.conf を編集したら、WireGuard を有効にします。

$ sudo systemctl enable --now wg-quick@wg0

これで Jetson で WireGuard を使えるようになりました。

Discussion