概要
この記事では、ルータアプライアンス用ベアボーンPCに、OpenWrt をインストールして小型ルータとして利用する手順を記載する。
なお、本記事は VyOSで作る小型ルータ: HUNSN RS34g の OpenWrt 版焼き直しである。
はじめに
2年前に、VyOS を利用して自作ルータを構築したが、諸々運用面で問題が出てきた。
- VyOS では Nuro Biz (法人用) の DHCPv6-PD による IPv6 プレフィックスを正しく受信できなかった
- VyOS には IPv6 ND Proxy 機能が実装されていない
- VyOS を無償で使用するには Rolling release (いわゆるα版/β版に近い品質) を利用する以外の選択肢がない
- LTS版は 有償サブスクリプション のみ、5年縛りで年額 $1600 (150円換算で24万円) が最低ラインであるため、個人としてはとても手が出ず、法人用としても高額な部類である。毎年法人用ルータが購入できるレベル。
欲しい機能を満たせない上に、ハードウェアが安価でも金額メリットがほぼないため 2024年頃から OpenWrt に切り換えて使っている。さぼって記事にできていなかったので改めてまとめておく。
OpenWrt の特徴 (2025年10月時点)
- 元々は、市販ルーターのファームウェアを Linux ベースで書き直すプロジェクトからスタート
- 2004年頃から現在に至るまでオープンソースとして活発に開発が続いており、広くコミュニティに支えられている
- 無償版しか存在しない
- OpenWrt をベースにした市販ルータも存在する
- Generic x86版は通常の PC ハードウェア/仮想環境でも動作
- 豊富な追加パッケージによりカスタマイズが可能
- 既存ルータのファームウェア置換を念頭に設計されているため、残念ながら簡単に導入できるインストーラーは存在しない
- 本記事ではインストール問題を緩和するための手順を紹介
ハードウェア
2025年10月補足: 日本の Amazon では、HUNSN (深圳市漢松科技有限公司) 社の製品はすべて「在庫切れ」となっていて既に入手不可能である。代わりに AIOPCWA (発音不明) というメーカーのデザイン同一の製品がリコメンドで表示される。HUNSN 社自体は存在しているようなのだが、AIOPCWA というメーカー(ブランド?)は検索しても情報が出てこない。
今選択するのであれば、Amazon で “AIOPCWA Firewall” を検索し、Intel N100/N150 の約3~4万円の製品を狙うことをお勧めする。
以下 2023年4月当時の情報: Amazon で売っているルータアプライアンス製品から HUNSN RS34g を選択。 HUNSN社の公式サイト によると、組み込み系や工業系のアプライアンス製品を多く出している 中国・深圳のメーカーである。低消費電力・ファンレスで、作りもしっかりしており、パフォーマンスも十分期待できる。
機器仕様・構成
| 正面 | 背面 | 内部 |
|---|---|---|
|
|
|
| 項目 | 構成 |
|---|---|
| メーカー/型番 | HUNSN RS43g |
| シャーシ | アルミ・ファンレス |
| CPU | Intel® Celeron® Prosessor J4125, 4C4T, 4Mキャッシュ, 2.70GHz |
| ストレージ | mSATA スロット (追加購入: Transcend mSATA SSD 64GB TS64GMSA230S) |
| メモリ | SODIMM DDR4-2400 スロット×2 (追加購入: CFD販売 PC4-19200(DDR4-2400) 8GB×1枚 D4N2400PS-8G) |
| 拡張スロット | mini PCIE スロット Wi-Fi モジュール登載可 |
| 外部インターフェース | USB3.0×2, HDMI, VGA, 電源ボタン, リセットホール |
| 有線LAN | 2.5GbE Intel I226-V b3 ×4 |
| 電源 | ACアダプター 12V/3A |
| 消費電力 | 最大 10W |
| サイズ/重量 | 126 x 134 x 40.6mm / 1.2Kg |
構築手順
(1) 作業用PCで事前準備
インスト-ル作業用 USB Live Linux を用意
MX Linux: USBメモリで起動・軽量メンテナンス用ディストリビューション の記事に従って USB live linux を作成する。
OpenWrt イメージの用意
作業用 PC のブラウザ等で、下記のフォルダを辿り、
OpenWrt Stable Release > (最新バージョン)/targets/x86/64/
generic-ext4-combined-efi.img.gz をダウンロードする。
実際のファイル名は openwrt-24.10.4-x86-64-generic-ext4-combined-efi.img.gz という感じになる。
上記記事内の Windows PC → MX Linux でのファイル交換方法 に従って、ダウンロードしたイメージファイルを MX Linux USB メモリのトップフォルダにコピーしておく。
(2) ルータPCで基本設定
ルータPCに書き込み
- ルータPCに MX Linux USB を挿す
- ルータPCを起動しながら BIOS メニュー
- BIOS の boot デバイス選択で、USB メモリを選択し、bootする
- 機種によるが、HUNSN RS34g の場合は
- BIOS メニュー[Save & Exit]タブ > [Boot Override] グループ内から USB メモリの名前を探して [Enter]
- UEFI の方を選択
- MX Linux が起動するまで待つ
- MX Linux にログインしたら、右クリックでターミナル起動 (Open Terminal Here)
sudo su -
[sudo] demo のパスワード:
## (内蔵 SSD デバイス名を確認)
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 2.3G 1 loop /live/linux
loop1 7:1 0 4G 0 loop /live/persist-root
sda 8:0 0 59.6G 0 disk
├─sda1 8:1 0 16M 0 part
├─sda2 8:2 0 59.6G 0 part
└─sda128 259:0 0 239K 0 part
sdb 8:16 1 28.9G 0 disk
└─sdb1 8:17 1 28.9G 0 part /home/demo/Live-usb-storage
/root/Live-usb-storage
/live/boot-dev
↑ /dev/sda が内蔵SSDデバイス、/dev/sdb は MX Linux USB とアタリを付ける
## (MX Linux USB メモリのトップフォルダへ移動)
cd /live/boot-dev/
## (イメージファイルがあることを確認)
ls *.img.gz
## (SSD 内蔵ストレージへイメージを書き込む)
zcat openwrt-24.10.4-x86-64-generic-ext4-combined-efi.img.gz > /dev/sda
## (数秒で完了する)
exit
ルータ PC の MX Linux をシャットダウンし、MX Linux USB メモリを抜いておく。
ルータPCで OpenWrt を起動
ルータ PC の電源を入れる。OpenWrt イメージの書き込みが成功していれば、内蔵 SSD 側から起動するはず。
- BIOS から Grub、OpenWrt の起動をモニタで確認
- 表示が止まったら [Enter] でログインできる
BusyBox v1.36.1 (2025-10-19 16:37:45 UTC) built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 24.10.4, r28959-29397011cc
-----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
- OpenWrt の root パスワードを設定
root@OpenWrt:~# passwd
Changing password for root
New password:
Retype password:
passwd: password for root changed by root
- ifconfig コマンドで、“br-lan” インターフェースに 192.168.1.1 (Mask 255.255.255.0) が設定されていることを確認する。
root@OpenWrt:~# ifconfig
br-lan Link encap:Ethernet HWaddr 60:BE:B4:09:CA:AB
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::62be:b4ff:fe09:caab/64 Scope:Link
inet6 addr: fde1:7c9a:bbd7::1/60 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14199 errors:0 dropped:1294 overruns:0 frame:0
TX packets:1313 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3520810 (3.3 MiB) TX bytes:165257 (161.3 KiB)
eth0 Link encap:Ethernet HWaddr 60:BE:B4:09:CA:AB
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14433 errors:0 dropped:178 overruns:0 frame:0
TX packets:1316 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3766844 (3.5 MiB) TX bytes:165523 (161.6 KiB)
Memory:a1600000-a16fffff
eth1 Link encap:Ethernet HWaddr 60:BE:B4:09:CA:AC
inet6 addr: fe80::62be:b4ff:fe09:caac/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0 KiB) TX bytes:0 (0 KiB)
Memory:a1400000-a14fffff
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:737 errors:0 dropped:0 overruns:0 frame:0
TX packets:737 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:58665 (57.2 KiB) TX bytes:58665 (57.2 KiB)
- HUNSN RS34g のように 4 ポートの PC の場合は、下記の初期状態になっている
| 物理ポート | OpenWrt I/F名 | 状態 |
|---|---|---|
| ETH0 | eth0 | br-lan ブリッジに割当 |
| ETH1 | eth1 | WAN (DHCPクライアント) |
| ETH2 | eth2 | (割当なし) |
| ETH3 | eth3 | (割当なし) |
| — | br-lan | LAN (DHCPサーバ) |
- ETH1 に自宅/社内 LAN を接続し、DHCP でアドレスが取得できるか確認
- ifconfig コマンドで eth1 にアドレスが付与されることを確認
- 既存 LAN が 192.168.1.x と同じセグメントの場合は衝突してうまく動作しない可能性がある
- ※うっかり ETH0 を 自宅/社内 LAN に接続すると、DHCP サーバ多重設置となり事故が発生するため、絶対に間違えないこと
OpenWrt LAN 側のアドレスを事前に変更する場合
次項で OpenWrt の WAN 側に接続しようとしている既存ネットワークが、192.168.1.0/24 と被っている場合は、この後の作業が失敗する。 OpenWrt の LAN 側のアドレスをあらかじめ変更する場合は、下記のコマンドを直結のキーボードを使って入力する。
# 変更したい OpenWrt LAN 側 IP を設定 (例)
uci set network.lan.ipaddr='192.0.2.1'
uci set network.lan.netmask='255.255.255.0'
uci commit
service network restart
(3) 作業用PCからSSHでリモート設定
作業用PCをルータPCに接続
- 作業用 PC の LAN 端子と、ルータ PC の LAN 側 (ETH0) を、LAN ケーブルで接続
- 標準の LAN 端子と別に USB-LAN アダプタなどで増設した2つめの LAN 端子を使うと便利
- ルータ PC の WAN 側 (ETH1) を自宅/社内 LAN に接続したままとする
- 作業用 PC の、ルータPCに接続した方の IPv4 アドレスを変更
- IPv4 アドレス: 192.168.1.200/255.255.255.0
- LAN 側の IP を前項で変更している場合は、192.0.2.200/255.255.255.0 等に変更し、以下アドレスを読み替える
- デフォルトゲートウェイ/DNS: 設定しない
- IPv4 アドレス: 192.168.1.200/255.255.255.0
- PC の PowerShell ターミナルから ping 192.168.1.1 (または変更した OpenWrt LAN IP アドレス) で応答があるか確認してみる
PS C:\> ping 192.168.1.1
192.168.1.1 に ping を送信しています 32 バイトのデータ:
192.168.1.1 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.1.1 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.1.1 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.1.1 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.1.1 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
作業用PC から ルータPC にSSHで接続
ここからは、Windows 標準の ssh クライアントまたは RLogin 等のアプリで ルータ PC に ssh 接続し、リモートで作業する。
- ssh接続先: 192.168.1.1
- ユーザー: root
- パスワード: (先ほど設定したもの)
BusyBox v1.36.1 (2025-10-19 16:37:45 UTC) built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 24.10.4, r28959-29397011cc
-----------------------------------------------------
root@OpenWrt:~#
OpenWrt インターネット疎通を確認
ETH1 で DHCP にてIPアドレス、DNSサーバIP を取得し、OpenWrt サイトの名前解決できればOK。
root@OpenWrt:~# nslookup www.openwrt.org
Server: 127.0.0.1
Address: 127.0.0.1:53
Non-authoritative answer:
www.openwrt.org canonical name = wiki-03.infra.openwrt.org
Name: wiki-03.infra.openwrt.org
Address: 64.226.122.113
Non-authoritative answer:
www.openwrt.org canonical name = wiki-03.infra.openwrt.org
Name: wiki-03.infra.openwrt.org
Address: 2a03:b0c0:3:d0::1a51:c001
※ OpenWrt はデフォルトで dnsmasq による DNS キャッシュが動作しているため、Server アドレスは常に 127.0.0.1 (ローカルホスト) になる
パーティション拡張
- イメージを書き込んで起動した OpenWrt は、デフォルトで / ファイルシステムが 100MB ほどしか確保されない
- SSD の容量最大までパーティションサイズを拡げる
ストレージ容量確認 (拡張前)
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 98.3M 25.5M 70.7M 27% / #← rootの空きが少ない
tmpfs 3.8G 260.0K 3.8G 0% /tmp
/dev/sda1 16.0M 6.3M 9.7M 39% /boot
/dev/sda1 16.0M 6.3M 9.7M 39% /boot
tmpfs 512.0K 0 512.0K 0% /dev
パッケージ追加
opkg update
opkg install parted losetup resize2fs
パーティション拡張スクリプトをダウンロードして実行、再起動
cd /tmp
wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/expand_root?codeblock=0"
. ./expand-root.sh
reboot
再起動と同時に ssh が切断される。3回ほど再起動が走る。 完了後、再度 SSH でログインして容量を確認する。
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 58.8G 27.1M 58.8G 0% / # ←rootの空きが増えている
tmpfs 3.8G 232.0K 3.8G 0% /tmp
/dev/sda1 16.0M 6.3M 9.7M 39% /boot
/dev/sda1 16.0M 6.3M 9.7M 39% /boot
tmpfs 512.0K 0 512.0K 0% /dev
その他のパッケージ追加
- OpenWrt のデフォルトイメージから不足しているものを追加する。
- 各種パッケージのアップデート
# パッケージリスト取得
opkg update
# CPU 機能
opkg install acpid irqbalance luci-app-irqbalance intel-microcode
# Intel Graphics ドライバ
opkg install i915-firmware
# メンテナンス系
opkg install htop less diffutils vim-full procps-ng-ps procps-ng-w pciutils ethtool lsblk
# 監視系
opkg install lm-sensors collectd-mod-sensors collectd-mod-thermal collectd-mod-irq lldpd luci-app-lldpd owut luci-app-attendedsysupgrade luci-app-statistics snmpd luci-app-snmpd fstrim openssh-sftp-server avahi-utils
# Wireguard VPN
opkg install wireguard-tools luci-proto-wireguard
# 日本語化
opkg install luci-i18n-base-ja luci-i18n-attendedsysupgrade-ja luci-i18n-firewall-ja luci-i18n-package-manager-ja luci-i18n-statistics-ja luci-i18n-irqbalance-ja
# vim 設定
touch ~/.vimrc
# 全パッケージ更新
opkg list-upgradable | cut -f 1 -d ' ' | xargs -r opkg upgrade
# 再起動
reboot
ネットワーク設定
下記の方針に沿って変更。
- 物理ポート割当変更
| 物理ポート | OpenWrt I/F名 | 状態 |
|---|---|---|
| ETH0 | eth0 | br-lan ブリッジに割当 |
| ETH1 | eth1 | br-lan ブリッジに割当★ |
| ETH2 | eth2 | br-lan ブリッジに割当★ |
| ETH3 | eth3 | WAN (DHCPクライアント)★ |
| — | br-lan | LAN (+DHCPサーバ) |
- NTP サーバを NICT に変更
- その他 Ethernet チューニング
OpenWrt のコンフィグ設定用コマンド UCI (Unified Configuration Interface) を使って設定してゆく。Web UI でも可能だが、手順が極めて多くなるため、この記事では CLI ベースの手順で記載する。
# LAN
uci set network.lan.defaultroute='0'
uci set network.lan.delegate='0'
uci delete network.@device[0].ports
uci add_list network.@device[0].ports='eth0'
uci add_list network.@device[0].ports='eth1'
uci add_list network.@device[0].ports='eth2'
uci set network.lan.proto='static'
uci set network.lan.device='br-lan'
uci set network.lan.ip6assign='64'
# WAN
uci set network.wan.device='eth3'
uci set network.wan.delegate='0'
# WAN6
uci set network.wan6.device='eth3'
uci set network.wan6.proto='dhcpv6'
uci set network.wan6.reqaddress='try'
uci set network.wan6.reqprefix='auto'
# tuning
uci set firewall.@defaults[0].flow_offloading='1'
uci set firewall.@defaults[0].flow_offloading_hw='0'
uci set network.globals.packet_steering='1'
uci set irqbalance.irqbalance.enabled='1'
# ホスト名・タイムゾーンその他設定
# uci set system.@system[0]=system
uci set system.@system[0].hostname='homerouter0'
uci set system.@system[0].timezone='JST-9'
uci set system.@system[0].zonename='Asia/Tokyo'
# NTP 参照先サーバ、配布先設定
uci set system.ntp=timeserver
uci set system.ntp.enable_server='1'
uci set system.ntp.use_dhcp='0'
uci set system.ntp.interface='lan'
uci delete system.ntp.server
uci add_list system.ntp.server='ntp.nict.jp'
uci commit
# クライアントの多い環境に対応するため NAT 追跡テーブルサイズを拡張
# デフォルト 4096 → 20000
# ※ CPU パワーに応じて調整
cat <<'__EOT__' >> /etc/sysctl.conf
net.netfilter.nf_conntrack_expect_max=20000
__EOT__
# パケットドロップ防止のため、NIC のリングバッファサイズを変更: 256 → 512
# ※ 環境により要調整
cat <<'__EOT__' > /etc/rc.local
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
ethtool -G eth0 rx 512 tx 512
ethtool -G eth1 rx 512 tx 512
ethtool -G eth2 rx 512 tx 512
ethtool -G eth3 rx 512 tx 512
exit 0
__EOT__
# 設定が終わったら再起動
reboot
ルータPCの配線変更
この例ではルータ PC の WAN 側ポートを変更しているので、再起動中に ETH1 → ETH3 に LAN ケーブルを差し替える。
(4) 作業用PCのブラウザから OpenWrt 設定画面
デフォルト値の場合は下記 URL を開く、LAN側アドレスを変更している場合は読み替える。
http://192.168.1.1/
パスワードは、先ほど変更した root パスワードを入力。
概要の画面が出ることを確認。
下にスクロールして、物理ポート eth0 / eth3 がリンクアップしていること、WAN 側のアドレスが自宅/社内 IPv4 DHCP / IPv6 SLAAC 等から取得できていることを確認。画面の例では、自宅環境の IPv6 Upstream も自動設定されている。
後続作業
ここまでできたら基本設定は完了である。あとは各種ドキュメントを見ながら自分の環境用にカスタマイズすればよい。
参考
- OpenWrt Project
- 公式サイト
- OpenWrt 解説動画プレイリスト (YouTube)
- “OneMarcFifty” 氏による OpenWrt 解説動画リスト。字幕+日本語自動翻訳で見ることをお勧め。
- How to configure OpenWrt as Firewall for your home network and Guest Wifi and IPTables explained
- OpenWrt ルータの基本 Firewall 設定を WebUI (LuCI) で設定する解説
- IPv6 with OpenWrt (YouTube)