新しいルーターとして使うために ASUS PN42 を買い、OPNsense をインストールしようとしたのですが、最初からつまずきました。本体の Realtek RTL8125B LAN ポートがインターフェースとしてまったく認識されなかったんです。
OPNsense は FreeBSD ベースなので、標準の Realtek ドライバーではこのチップを認識できないのが原因でした。LAN ポートが使えないのでインストールを進められず、インターネットにもつながらないのでドライバーをダウンロードすることもできません。この問題をどう乗り越えたかを残しておきます。
一時的なネットワークでインストールする
内蔵 LAN ポートが使えないので、まずは FreeBSD がそのまま認識できる別のネットワーク機器が必要です。
余っている USB LAN アダプターがあればそれを挿せばよく、なければスマートフォンを USB ケーブルでつないで USB テザリング をオンにしても大丈夫です。スマートフォンのテザリングは追加のドライバーなしでもきちんと認識されます。
この一時的なネットワークを WAN インターフェースに割り当てておけば、インストールを問題なく終えられ、インストール後もインターネット接続が維持されます。ドライバーのパッケージをひとつダウンロードするだけなので、速度はほとんど関係ありません。
Realtek ドライバーをインストールする
インストールが終わったら、OPNsense のコンソールメニューで 8 番のシェル(Shell)に入ります。そして FreeBSD ports の realtek-re-kmod パッケージをインストールします。Realtek の公式ドライバーをカーネルモジュールとしてパッケージ化したものです。
pkg install realtek-re-kmod
インストールが終わると、次のような案内が表示されます。
[1/1] Fetching realtek-re-kmod-1101.00.1403000.pkg: 100% 157 KiB
Checking integrity... (0 conflicting)
[1/1] Installing realtek-re-kmod-1101.00.1403000...
[1/1] Extracting realtek-re-kmod-1101.00.1403000: 100%
=====
Message from realtek-re-kmod-1101.00.1403000:
--
Add the following lines to your /boot/loader.conf
to override the built-in FreeBSD re(4) driver.
if_re_load="YES"
if_re_name="/boot/modules/if_re.ko"
By default, the size of allocated mbufs is enough
to receive the largest Ethernet frame supported
by the card. If your memory is highly fragmented,
trying to allocate contiguous pages (more than
4096 bytes) may result in driver hangs.
For this reason the value is tunable at boot time.
e.g. - if you don't need Jumbo frames you can lower
the memory requirements and avoid this issue with:
hw.re.max_rx_mbuf_sz="2048"
To enable Wake on LAN (WoL) support you might need
to set the following tunables:
hw.re.s5wol="1"
hw.re.s0_magic_packet="1"
If you experience network hangs with IPv6 enabled,
you might need to disable the checksum offloading
by adding the following parameters to the related
ifconfig line in your /etc/rc.conf file:
-rxcsum -txcsum -rxcsum6 -txcsum6
大事なのは最初の部分です。パッケージを入れるだけでは終わらず、起動時に FreeBSD 内蔵の re(4) ドライバーの代わりに、いまインストールしたカーネルモジュールを読み込むよう指定する必要があります。残りは必要に応じて使うチューニングオプションです。
| 設定 | 用途 |
|---|---|
hw.re.max_rx_mbuf_sz="2048" |
ジャンボフレームが不要なときにメモリ使用量を減らし、ドライバーの停止を防ぐ |
hw.re.s5wol, hw.re.s0_magic_packet |
Wake on LAN(WoL)を有効にする |
-rxcsum -txcsum -rxcsum6 -txcsum6 |
IPv6 使用時にネットワークが止まる場合にチェックサムオフロードを無効にする |
起動時に新しいドライバーを読み込む
案内には /boot/loader.conf に追加するよう書かれていますが、OPNsense ではアップデート時に上書きされることがあるので、/boot/loader.conf.local ファイルを作って書き込む必要があります。このファイルを作り、次の内容を書きます。
if_re_load="YES"
if_re_name="/boot/modules/if_re.ko"
hw.re.s5wol="1"
hw.re.s0_magic_packet="1"
上の 2 行が新しいドライバーを読み込む設定で、下の 2 行は WoL を使うために追加した設定です。WoL が不要なら上の 2 行だけで大丈夫です。
保存して再起動すると、RTL8125B の LAN ポートが正しく認識されます。あとは内蔵 LAN ポートを WAN/LAN に割り当て直し、一時的に使っていた USB LAN アダプターやスマートフォンを外せば完了です。
おわりに
手順を簡単にまとめると次のとおりです。
- スマートフォンの USB テザリング(または一時的な USB LAN)を WAN にして OPNsense をインストール
- コンソールのシェルで
pkg install realtek-re-kmodを実行してドライバーをインストール /boot/loader.conf.localにドライバーの読み込み設定を書いて再起動
同じチップセットのミニ PC で OPNsense を動かすつもりなら、最初からテザリング用のスマートフォンを手元に置いておくことをおすすめします。

