FortiGate 50Eを見付けた後、ならば他のFortiGateにもMarvell SoCを搭載している機種が無いかと探して見つけ、悩んだ末に確保してサポートを行いマージされました。
まとめていきます。
仕様
既にサポート済のFortiGate 50Eと同様に、ほとんどの機種でFortiSOCまたはIntel CPUを搭載するFortiGateの中ではかなり珍しく、Marvellの汎用SoCである88F6820を搭載。 差別化の為か、SoCやRAM、ネットワーク周りでいくらか50Eから削られた仕様となっています。
- SoC: Marvell Armada 385 88F6820
- RAM: DDR3 1024MiB (MT41K256M8DA-125 x4)
- Flash: SPI-NOR 128MiB (MX66L1G45GMI-10G)
- WAN/LAN: 1000Mbps x1/1000Mbps x4
- USB: USB 3.0 Type-A x1
- UART: "CONSOLE", 所謂Ciscoケーブル互換
その他詳細については、雑記を参照。
OpenWrt化
ブートローダが主に復旧用としてファームウェア投入機能を持つ為、それを使用してinitramfsイメージを踏み台とする なお、 "FG-30E" と称する
FG-30Eのブートメニューを表示させる
電源を接続しブートする途中、
Please wait for OS to boot, or press any key to display configuration menu
と表示されたタイミングで適当なキーを押下し、ブートメニューに入るコンソールポートのbaudrateを9600bpsに設定
ブートメニュー上で
[I]: System information.
から[S]: Set serial port baudrate.
を呼び出し、baudrateを9600に設定するTFTPサーバを用意
ブートメニュー上で
[R]: Review TFTP parameters.
を呼び出してTFTP関連の情報を表示し、それに従ってTFTPサーバを用意する
なお、PCはTFTP関連情報内で示されているポートに接続する
また、OpenWrtのinitramfsイメージはimage.out
にリネームの上TFTPフォルダに配置するTFTPでinitramfsイメージをダウンロード
ブートメニュー上で
[T]: Initiate TFTP firmware transfer.
を呼び出してTFTPを実行し、initramfsイメージをサーバからダウンロードするinitramfsイメージを実行
TFTPサーバからのダウンロードが完了後、
Save as Default firmware/Backup firmware/Run image without saving:[D/B/R]?
と表示されたら R キーを押下し、Flashには書き込まずブートするメーカーファームウェアをバックアップ
もし将来的にメーカーファームウェアに書き戻す可能性がある場合など、必要であればメーカーファームウェアをバックアップする
dd
を用い、 /proc/mtd を確認の上- firmware-info
- kernel
- rootfs
を最低限取り出し、scp等でPCに転送し保管する
例)
root@OpenWrt:/# mkdir /tmp/mtd root@OpenWrt:/# cd /tmp/mtd root@OpenWrt:/tmp/mtd# cat /proc/mtd dev: size erasesize name mtd0: 001c0000 00010000 "u-boot" mtd1: 00010000 00010000 "firmware-info" mtd2: 00010000 00010000 "dtb" mtd3: 00010000 00010000 "u-boot-env" mtd4: 00010000 00010000 "board-info" mtd5: 00600000 00010000 "kernel" mtd6: 01800000 00010000 "rootfs" mtd7: 00600000 00010000 "kn2" mtd8: 01800000 00010000 "rfs2" mtd9: 01200000 00010000 "part1" mtd10: 01200000 00010000 "part2" mtd11: 01e00000 00010000 "config" root@OpenWrt:/tmp/mtd# dd if=/dev/mtdblock1 of=mtd1_firmware-info.bin 128+0 records in 128+0 records out root@OpenWrt:/tmp/mtd# dd if=/dev/mtdblock5 of=mtd5_kernel.bin 12288+0 records in 12288+0 records out root@OpenWrt:/tmp/mtd# dd if=/dev/mtdblock6 of=mtd6_rootfs.bin 49152+0 records in 49152+0 records out
バックアップをデバイスに書き戻す際は、
mtd
コマンドを用いて書き込むmtd write <backup image> <target partition>
例)
mtd write mtd1_firmware-info.bin firmware-info mtd verify mtd1_firmware-info.bin firmware-info # 書き込まれたデータが元データと一致するか検証
OpenWrt上でsysupgradeを実行
scpなどを用いてsysupgradeイメージをデバイス上にアップロード(またはダウンロード)し、sysupgradeを実行する
完了
Flashへの書き込みが完了後再起動され、OpenWrtで起動する
この時メーカーファームウェアで起動してしまう場合は、ブートメニューに入った上で[B]: Boot with backup firmware and set as default.
を呼び出し、デフォルトのOSイメージをOpenWrtを書き込んだ1番目の方に切り替える
備考
SoC自体はFortiGate 50Eと同じ88F6820ながら、動作クロックは50Eの1.60GHzに対して30Eでは1.33GHzに落とされている。
今回のサポートにおいて、CONSOLEポートのbaudrateはFortiGateで広くデフォルトとして使用されている9600bpsを前提としている。
その他の値に設定されていた場合、Linux Kernelのdmesgが出力されないなどのトラブルが起きる為注意する。WAN1, WAN2ポートはデフォルトでブリッジを構成している為、上流が1系統である場合はどちらに接続しても問題無い。
ただし、それぞれで別系統のWANを利用する場合、ブリッジを解除しそれぞれにOpenWrtの仮想インターフェースを割り当て直す。OpenWrtのサポートにおいては、Flash内に2組存在するOSイメージ領域のうち1つ目の最小限を利用するよう構成しており、もう片方のメーカーファームウェアに対しての影響は恐らく無いと思われる。
この為、ブートメニューにおいて[B]: Boot with backup firmware ~
を選択することで、必要に応じてOpenWrtとメーカーファームウェアを切り替えてブートできる。中古などで入手する場合、本機種のDCジャックは特殊であり通常の丸形プラグを持つACアダプタを使用できない為、基本的にはACアダプタが付属するものの選択を推奨。
なお、嵌合するプラグはMolex 5557-02Rであり、自作することは可能(例)。
作業時の色々
基本的には一部を除いてFortiGate 50Eと共通のハードウェアであり、それ故にDeviceTreeなどのコードを仕立てるのは比較的容易であった。
しかしながら何故かLANからWANへのNATが不安定となる症状を長らく起こしており、SoCのEthernetとSwitch (88E6176) 間の接続に起因すると思われたものの、しばらく解決できずサポートの投げ込みを保留していた。
最近になってLinux Kernelにおいていくつか88E6xxxのDSAサポートにおける修正が入っており、試したところほぼ解決していた為、サポートを投げ込んだ。前述の通りハードウェアはFortiGate 50Eと大半が共通であり、それ故に使用されている基板も50Eと同一であった。
色々
今回の機種もFortiGate 50Eと同様に、日本国内におけるOpenWrt目的としては貴重な有線機。
50Eには及ばないながらも大容量のRAMを搭載し、USB 3.0ポートも搭載することから様々な用途に活用できると思われる。
ただ、ヤフオク等で50Eが安価に数が出ている為、敢えて30Eを選ぶ意義は薄いところではある。