バードバスで水浴び(神奈川県秦野市権現山)


Date/Time: 2014:10:11 13:24:47
Camera: NIKON CORPORATION
Model: NIKON 1 V2
Exporsure Time: 1/400
FNumber: 5.0
Aperture Value: 4.6
Focal Length: 129.4

Close

y2blog » IIJの仮想ルータアプライアンスSEIL/x86を試す(APU2C4編)

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
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系の流れを汲んでいた筈なのだが...



NetBSD Installer Shell
VMWare仮想環境上でNetBSDのインストーラを起動しユーティリティーのシェルを起動する

NetBSD Installer Shell 02
SDカードリーダをアタッチして一次的にマウントする

Make a boot config file
“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 : となっており、起動ディスクドライブがきちんと認識されていないことが判明した.コマンド入力エラーの原因はどうやらこの辺に有りそうだ.起動時のコンソールメッセージでも”boot device” が “unknown” となっている.この記事の後で報告したVPS環境下でのコンソールメッセージでは”boot device” は “ld0″ ときちんと認識されている.この問題をどのように回避させれば良いかは現時点では分からないが、解決策が見つかったら報告する予定だ.


IIJが物理サーバ上で動かすことのできるこのディスクイメージの提供を『実験的提供』扱いにしているのは恐らくこの辺の問題があるからなのだろう.