7
29
2017
IIJの仮想ルータアプライアンスSEIL/x86を試す(APU2C4編)
仮想ルータアプライアンス SEIL/x86 を動かしてみる
IIJと言えば日本のインターネット業界の黎明期から関わって来た老舗で、IT業界に多少なりとも関わっていれば知らない人は居ないと言うくらい実績や技術力のあるISP(インターネットサービスプロバイダ)だ.IIJのISP事業は有名だが実はSEILシリーズというハードウェアアプライアンスタイプのルータ製品を販売していることはあまり知られていない.
実は私も、今回IPv6(IPoE)接続を導入するまでIIJのSEILというルータの存在を知らなかった.SEILのホームページにはハードウェアアプライアンス製品と共に、VMWareなどの仮想サーバ上で動作させることのできる仮想アプライアンスタイプの製品 “SEIL/x86 Fuji” が紹介されている.
SEIL/x86 Fujiが対応している仮想基板としてはVMWare、Hyper-V、KVMが利用可能で、それらの仮想基板用に作成されたイメージファイルが提供されている.正式サポートではないが物理マシン上で直接起動させることのできるイメージファイルも用意されているので、PC Engines社の APU2 などのX86系のCPUを搭載した小型PCで動かすことも可能だ.APU2はIntelチップを搭載したGigabit Ethernetポートが3つも備わっており、DC12Vの単一電源で動かすことが可能で発熱も少ないのでルータ用途には打って付けの機種だ.私はPC Engines社から直接購入しているが、スイッチサイエンスさんでも販売しているので、値段が高くても構わないのであれば簡単に入手する事が可能だ.
APU2C4上でSEIL/X86ソフトウェアルータを動かす
我が家にはPC Engines社のAPU2C4は2台あり、元々はlightMPD/upnpgwなどのデジタルオーディオ用に購入したものであるが、そのうちの1台をSEIL/X86用として流用することにした.
1. SEIL/X86のダウンロード
先ずはIIJの SEIL/X86ダウンロードページから、SEIL/X86のイメージ(ディスクイメージ形式【実験的提供】)をダウンロードする.”起動キーをリクエストする(未取得)” というリンクと”起動キーをリクエストしない(取得済)”という2つのリンクがあるので、最初であれば “起動キーをリクエストする(未取得)” を選んで ”起動キー” も一緒に取得する必要がある.
ダウンロードページに移る前に、メールアドレスの記入欄と利用許諾に同意するかどうかの設定画面が現れるので、画面に従って手続きを進める.”起動キー”は後ほどメールで送られてくることになる.今回は仮想サーバではなく物理サーバでの利用なので、”ディスクイメージ形式【実験的提供】 EXPERIMENTAL_seilx86-571-bootdisk.zip” を選択してイメージファイルをダウンロードする.ZIP圧縮されたファイルを解凍すると “bootdisk.img” というイメージファイルが1つだけ現れる.
2. ディスクイメージファイルから起動可能なOSイメージを作成する
この作業についてはBeagleBoneやRaspberry Piなどを扱った経験があれば簡単な作業だ.今回はMac OS X の”Terminal” 上での作業を紹介するが、UNIXコマンドの “dd” を使うので、自分のディスク環境に合わせてコマンドのパラメータを適宜変更して欲しい.この記事を参考にしてこの作業を行う人はエクスパートしかいないので説明の必要はないとは思うが、ddコマンドの書き込み指定先を誤ると悲惨な事(ディスクが消去されてしまう)になるので、初心者はこのコマンドを使わない方が無難だ.
iMac27:~ yasuaki$ mount
/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
/dev/disk2 on /Volumes/Home (hfs, local, journaled)
/dev/disk1s2 on /Volumes/MavericsBackup (hfs, local, journaled)
/dev/disk1s3 on /Volumes/Elcapitan (hfs, local, journaled)
/dev/disk0s4 on /Volumes/Win7Pro (ntfs, local, read-only, noowners)
/dev/disk0s7 on /Volumes/Sierra (hfs, local, journaled)
/dev/disk1s4 on /Volumes/SHARED (msdos, asynchronous, local, noowners)
/dev/disk1s7 on /Volumes/Data (hfs, local, journaled)
/dev/disk1s8 on /Volumes/Tmp (hfs, local, journaled)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
/dev/disk4s1 on /Volumes/UNTITLED (msdos, local, nodev, nosuid, noowners)
iMac27:~ yasuaki$
iMac27:~ yasuaki$ diskutil unmountDisk /dev/disk4s1
Unmount of all volumes on disk4 was successful
iMac27:~ yasuaki$ sudo dd if=/Volumes/Tmp/Downloads/bootdisk.img of=/dev/rdisk4
Password:
65536+0 records in
65536+0 records out
33554432 bytes transferred in 142.695229 secs (235148 bytes/sec)
iMac27:~ yasuaki$
SDカードへの書き込みが終わればSDカードを取り外してAPU2のSDカードスロットへ挿入してAPU2を起動させれば良い.確か以前のMac OS X はNetBSDで使われているUNIXレガシーなUFSファイルシステムもサポートされていたが、最近のMac OS X ではUFSは全くサポートされていないので、Mac OS X ではSDカードに書き込まれた内容を確認することができない.
中身を確認したければ、NetBSDやFreeBSDなどのBSD系のOSを立ち上げてSDカードをマウントしてみるしか方法は無さそうだ.
3. APU2C4のシリアルコンソールポートにアクセスできるようにする
APU2C4 にSDカードを差し込んで電源を入れると SEIL/X86 を起動させることができるのだが、APU2C4はビデオ系のチップを搭載しておらず、VGAやHDMIなどの画像出力ができない.USB系の画像アダプタを使えばコンソール画面が表示できるのかもしれないが、今回はオーソドックスに標準のシリアルコンソールポートを使ってコンソールからの入出力を行うこととする.ルータ用途なので余計な画面表示は無い方が理に適っている.
Macには最初からシリアルポートなど無いが、最近のPC系のマシンでもDB9-シリアルポートが付いている物は滅多にお目にかかれない.そこでUSB-Serial変換ケーブルの出番となるのだが、今回のAPU2C4のDB9-シリアルポートはホストコンピュータ側(DTE)なので、クロスケーブルが必要だ.生憎手持ちのシリアルクロスケーブルが無かったので、手持ちのパーツBOXからDB9-メスのコネクターを2個程探しだし、やっつけのクロスケーブルを作成した.
APU2C4のSDカードスロットにセットしてとDB-9シリアルクロスケーブルでコンソールポートにつなぐ
4. コンソールポートでSEIL/X86の起動を確認
APU2C4のSDカードスロットに作成したSEIL/X86起動イメージをセットし電源を入れればコンソール画面に起動メッセージが出力されて、SEIL/X86の起動を確認できるようになる.Mac OSであれば”Terminal”上で “screen”コマンド起動すれば良い.Windows系では TerTermなどのその手のアプリを使えば良いだろう.
iMac27:tmp yasuaki$ ls -la /dev/tty.usb*
crw-rw-rw- 1 root wheel 18, 8 Jul 29 20:36 /dev/tty.usbserial
iMac27:tmp yasuaki$ screen /dev/tty.usbserial 115200
PCEngines apu2
coreboot build 20170228
4080 MB ECC DRAM
SeaBIOS (version rel-1.10.0.1)
Press F10 key now for boot menu
Booting from Hard Disk...
NetBSD MBR boot
NetBSD/i386 ffsv1 Primary Bootstrap
|
>> NetBSD/i386 BIOS Boot, Revision 3.3
>> (releng@clz.tokyo.iiji.jp, Tue Jul 25 11:30:06 JST 2017)
>> Memory: 638/3668608 k
Press return to boot now, any other key for boot menu
booting hd0a:seilfirm.img - starting in 0
FIRMWARE-TYPE: SEIL/X86
firmware checksum ok
=== 【この先全く画面出力されなくなる】 ===
シリアルコンソール出力の内容からSEIL/X86がブートしている所までは確認できるが、コンソール出力が途中で打ち切られて全く表示されなくなってしまう.これではコンソールから初期設定すらできない.ネットワークがつながっていればtelnet 経由で設定は可能なようだが、コンソールポートが使えないルータなんて前代未聞だ.SEIl/X86はコンソール出力を途中でビデオコンソールに強制的に切り替えてしまうようだ.
ネットで調べていると、『ALIX.2D13 で SEIL/x86 を動かしてみた』(あたがわの日記)にAPU2シリーズの前身である ALIX.2D13 でのシリアルコンソール出力についての解説されていたので、この記事を参考にSEIL/X86の常時シリアルコンソール出力化を行った.
面倒なのは、Mac OS 上では直接UFS形式のディスクを編集できないため、一旦VMWare Fusion や Paralles 等の仮想化環境で、NetBSDやFreeBSDなどのBSD系OSを立ち上げてUFS形式のディスクを編集しなければならないことだ.Mac OS も元々はBSD系の流れを汲んでいた筈なのだが...
VMWare仮想環境上でNetBSDのインストーラを起動しユーティリティーのシェルを起動する
SDカードリーダをアタッチして一次的にマウントする
“boot.cfg”ファイルを作成
上記の作業の様子は、VMWare Fusion 上でNetBSD7.1のインストーラを起動し、インストールメニューの中にあるユーティリティーのシェルを起動して作業を行ったものである.今回は実際にはNetBSDをインストールせずにインストーラだけで済ませている.
再びAPU2C4にSDカードをセットして起動すると...
PCEngines apu2
coreboot build 20170228
4080 MB ECC DRAM
SeaBIOS (version rel-1.10.0.1)
Press F10 key now for boot menu
Booting from Hard Disk...
NetBSD MBR boot
NetBSD/i386 ffsv1 Primary Bootstrap
|
>> NetBSD/i386 BIOS Boot, Revision 3.3
>> (releng@clz.tokyo.iiji.jp, Tue Jul 25 11:30:06 JST 2017)
>> Memory: 638/3668608 k
Press return to boot now, any other key for boot menu
booting hd0a:seilfirm.img - starting in 0
FIRMWARE-TYPE: SEIL/X86
firmware checksum ok
WARNING: skipping large memory map entry: 0x100000000/0x1f000000/0x1
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
NetBSD 3.1_STABLE (SEILX86_MD) #0: Tue Jul 25 11:24:48 JST 2017
releng@clz.tokyo.iiji.jp:/disk2/home/releng/build/xb-5.71/5.71/src/work.i386/obj/sys/arch/i386/compile/SEILX86_MD
total memory = 3583 MB
avail memory = 3451 MB
BIOS32 rev. 0 found at 0xff046
mainbus0 (root)
cpu0 at mainbus0: (uniprocessor)
cpu0: AMD Unknown K8 (Athlon) (686-class), 1011.75 MHz, id 0x730f01
cpu0: features 178bfbff
cpu0: features 178bfbff
cpu0: features 178bfbff
cpu0: features2 36d8220b
cpu0: "AMD GX-412TC SOC "
pci0 at mainbus0 bus 0: configuration mode 1
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
pchb0 at pci0 dev 0 function 0
pchb0: Advanced Micro Devices product 0x1566 (rev. 0x00)
pchb1 at pci0 dev 2 function 0
pchb1: Advanced Micro Devices product 0x156b (rev. 0x00)
ppb0 at pci0 dev 2 function 2: Advanced Micro Devices product 0x1439 (rev. 0x00)
pci1 at ppb0 bus 1
pci1: i/o space, memory space enabled, rd/line, wr/inv ok
Intel I210 Ethernet (COPPER) (ethernet network, revision 0x03) at pci1 dev 0 function 0 not configured
ppb1 at pci0 dev 2 function 3: Advanced Micro Devices product 0x1439 (rev. 0x00)
pci2 at ppb1 bus 2
pci2: i/o space, memory space enabled, rd/line, wr/inv ok
Intel I210 Ethernet (COPPER) (ethernet network, revision 0x03) at pci2 dev 0 function 0 not configured
ppb2 at pci0 dev 2 function 4: Advanced Micro Devices product 0x1439 (rev. 0x00)
pci3 at ppb2 bus 3
pci3: i/o space, memory space enabled, rd/line, wr/inv ok
Intel I210 Ethernet (COPPER) (ethernet network, revision 0x03) at pci3 dev 0 function 0 not configured
Advanced Micro Devices product 0x1537 (miscellaneous crypto) at pci0 dev 8 function 0 not configured
Advanced Micro Devices product 0x7814 (USB serial bus, interface 0x30, revision 0x11) at pci0 dev 16 function 0 not configured
pciide0 at pci0 dev 17 function 0
pciide0: Advanced Micro Devices product 0x7800 (rev. 0x40)
pciide0: bus-master DMA support present, but unused (no driver support)
pciide0: primary channel configured to native-PCI mode
pci_intr_map: no mapping for pin A (line=00)
pciide0: couldn't map native-PCI interrupt
pciide0: secondary channel configured to native-PCI mode
pci_intr_map: no mapping for pin A (line=00)
pciide0: couldn't map native-PCI interrupt
ehci0 at pci0 dev 19 function 0: Advanced Micro Devices product 0x7808 (rev. 0x39)
pci_intr_map: no mapping for pin A (line=00)
ehci0: couldn't map interrupt
... 【途中省略】
pchb7: Advanced Micro Devices product 0x1585 (rev. 0x00)
isa0 at pcib0
lpt0 at isa0 port 0x378-0x37b irq 7
com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, working fifo
com0: console
com1 at isa0 port 0x2f8-0x2ff irq 3: ns16550a, working fifo
pcppi0 at isa0 port 0x61
midi0 at pcppi0: PC speaker
sysbeep0 at pcppi0
isapnp0 at isa0 port 0x279: ISA Plug 'n Play device support
npx0 at isa0 port 0xf0-0xffisapnp0: no ISA Plug 'n Play devices found
apm0 at mainbus0: Power Management spec V1.2
bridge: not found any Ethernet interface
IPsec Tunnel Interface Device: using access concentrater
mfil: mac address filter
md0: internal 36864 KB image area
Initializing SEIL IPsec Processing Engine v2.0
Copyright 2007 Internet Initiative Japan Inc.
Initialized H/W IPsec processing.
IPsec: SP Cache size = 2048
IPsec: SP Negative Cache size = 2048
IPsec: SA:SPI Cache size = 2048
IPsec: SA:SP Cache size = 2048
IPsec: Initialized Security Association Processing.
boot device:
root on md0a dumps on md0b
root file system type: ffs
Starting root file system check:
/dev/rmd0a: file system is clean; not checking
watchdog-timer
open: Device not configured
SEIL/x86 Startup
Copyright 2001 Internet Initiative Japan Inc.
SEIL/x86 Fuji Ver. 5.71 (Release)
Kernel Side Setup
building databases...
iipf: IPv4/IPv6 Packet Filter Enabled
flush all filter rules
add net 224.0.0.0: gateway 127.0.0.1
rc.seil
use fallback factory configuration
config |ooooooooooooooooooooooooooooooooooooooooooooooooooooo| done
evstatmgrd ipsecmgrd polld rteventd.
login: admin
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
Warning! Do not forget to set admin password.
#
# help
List of commands:
bye exit shell
clear clear information
date set date and time
exit exit shell
filter configure IP filter
filter6 configure IPv6 filter
help a support message's displayed
install-key install key
interface configure interfaces
load-from load configuration
logout exit shell
measure network performance test
ping ping command
ping6 ping6 command
quit exit shell
reboot reboot system
report-to report machine info for problem solution
set set command
show show information
ssh connect to remote ssh
sshd configure sshd
今度はログイン画面表示まできちんとコンソールポートに出力されている.
5. コンソールポートから初期設定を行う
コンソールポートから “admin” アカウントでログイン(パスワードはなし)して、IPアドレスやadminのパスワードを設定し、起動キーと機能キーを設定することでアプライアンスルータとして機能するようになる.後は用途に応じて各種設定を行えば良い.SEIL/X86の具体的な設定例については後日改めて紹介する予定だ.
次回は、SEIL/X86をさくらインターネットなどのVPS環境で稼働させる方法について紹介する予定だ.
追記:APU2C4で設定ができない!!!
SEIL/x86のディスクイメージをAPU2C4で起動し、シリアルコンソール経由でアクセスすることはできたが、現時点でSEIL/X86の各種設定を行う事ができていない.設定を行おうとすると次の様なエラーメッセージが表示されてしまい、全く先に進めない.VPS環境では問題無く動かす事ができたので、物理サーバ(APU2C4)の固有の問題かもしれない.
SEIL/x86 Fuji Ver. 5.71 (Release)
Kernel Side Setup
building databases...
iipf: IPv4/IPv6 Packet Filter Enabled
flush all filter rules
add net 224.0.0.0: gateway 127.0.0.1
rc.seil
use fallback factory configuration
config |ooooooooooooooooooooooooooooooooooooooooooooooooooooo| done
evstatmgrd ipsecmgrd polld rteventd.
login: admin
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
Warning! Do not forget to set admin password.
# interface lan0
^
error: no such keyword
#
テクニカルマニュアルの『起動キーまたは機能キーがインストールできない場合(SEIL/x86)』には、インストールキーが入力できない場合の原因について説明されているが、この中に ”・起動デバイスを認識しているか確認する” という項目が有り、起動デバイスを正常に認識していない場合は、正常にキーのインストールができない旨の記述が有る.今回はキーのインストールエラーその物では無いが、それ以前に主要設定コマンドが全く入力できない状態なので、起動ディスクを認識しているかどうか確かめてみた.
# show system
SEIL/x86 Fuji Ver. 5.71 (Release)
Arch : SEIL/x86
CPU : AMD GX-412TC SOC
Vendor : OEM
Serial : (unknown)
Host : ""
Bootdev :
Date : 2017/04/26 10:57:53 (JST)
Up : 2 minutes (since 2017/04/26 10:56:17)
Users : 1 user
Loadavg : 0.30 (1min), 0.14 (5min), 0.05 (15min)
CPU0 stat : Used 0%, Interrupts 0%
Memory : Total 3583MB, Used 187MB (5%), Avail 3395MB (94%)
# show status
# show status storage
# show status telnetd
telnetd: running
# show status interface
#
“Bootdev :
IIJが物理サーバ上で動かすことのできるこのディスクイメージの提供を『実験的提供』扱いにしているのは恐らくこの辺の問題があるからなのだろう.