那須連山


Date/Time: 2019:11:17 11:51:28
Camera: Apple
Model: iPhone SE
Exporsure Time: 1/2024
FNumber: 2.2
Aperture Value: 2.3
Focal Length: 4.2

Close

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

7

30

2017

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

さくらインターネットのVPS上でSEIL/x86を稼働させてみた


前回に引き続き、IIJの仮想アプライアンス型ルータソフトウェア SEIL/x86 のインストールについて紹介することにする.SEIL/x86自体はルータソフトウェアなので基本的には様々な物理ハードウェア、仮想環境で動くように作られている.VMware、Hyper-V、KVM 環境用の仮想イメージが用意されているので動作させる仮想環境に合わせてインストールすれば良いので特に難しいことはない.


今回さくらインターネットのVPS上でSEIL/x86を動かす目的は、自前の IPv6/IPv4 ゲートウェイを構築したかったからだ.先の記事で IPv6(IPoE:DS-Lite)方式による高速インターネット接続環境の構築について紹介したが、インターネットマルチフィード社が提供する TransixサービスではIPv6/IPv4の変換がインターネットマルチフィード社で行われ、一つのグローバルIPv4アドレスに多数のユーザからのアクセスが紐付けられてしまう.同じグローバルIPアドレスの共有は困った問題を引き起こすので、できれば自分専用のグローバルIPv4アドレスを使いたいところだ.


IPv6/IPv4変換を行うルータが自分の管理下にあれば、IPv6/IPv4変換ルータを日本国内のみならず海外に置くことも可能だ.Apple TVなどのビデオコンテンツを観る際も、国外のサーバ上でIPv6/IPv4ゲートウェイを動かし、そこを経由させる事で各種コンテンツの国外アクセス制限を回避することも可能だ.インターリンク社のサービスでセカイVPNというサービスがあるが、同じような事が自分専用のサービスとして構築可能と言うことだ.


VPS環境での制約事項


IIJのSEILブログで、様々なSEIL/x86の事例が紹介されているので、どのような記事があるのか一度目を通しておいて欲しい.このブログの中に、『さくらのクラウドでSEIL/x86を動かす』という記事があり、さくらのクラウド環境でSEIL/x86をインストールする方法が紹介されている.


さくらのクラウドを用いれば簡単なのは分かっていても、さくらのVPSとクラウドではほぼ同じスペックの仮想マシンインスタンスでも数倍の値段の開きがある.仮想マシンインスタンス自体はKVMベースでほぼ共通の物だと思われるが、管理機能やオプションサービスなどで付加価値を付けたものと解釈すれば良いだろう.勿論、貧乏人の私は同じ性能であれば安い方を選択するのでVPSサービスという事になる.このブログも現在はさくらのVPSで動いているので、さくらのVPSの扱いには慣れている.


さくらのVPSに限らず、多くのVPSサービスはKVMベースの仮想システムを使っていると思われる.KVM環境の上でゲストOSを走らせ、その上でまたKVM環境を構築することも可能ではあるが、仮想環境の上にさらに仮想環境を構築するのは現実的では無いので、KVMイメージの利用は選択肢から外れる.また、VMWareもHyper-V環境も外部クラウド上に用意するのは費用的に観ても非現実的だ.


さて今回クラウドサービスではなく安価で手軽なVPSサービスを使うことで、SEIL/x86のインストールは一筋縄では行かなくなることを覚悟しなければならない.ブログ記事で紹介されているさくらのクラウドでは、物理マシン用のディスクイメージをクラウド管理コンソールを通じてアップロードして、それを対象となる仮想サーバインスタンスにサーバテンプレートとしてアタッチし、それをデプロイすれば済むのでとても簡単にSEIL/x86の構築が可能だ.


残念ながら、さくらのVPSにはユーザが自分用のサーバテンプレートを用意し、それをデプロイする機能は無い.有るのはさくらインターネットが予め用意したサーバテンプレートだけだ.勿論自分専用のISOイメージをアップロードしてそのISOイメージからブートさせOSをインストールることが可能なので、インストール用の専用カスタマイズISOイメージを作成すれば何とかなるかもしれない.今回はそんな大層な手間を掛けることは出来ないので、比較的楽な方法でVPS環境にSEIL/x86をインストール方法を紹介する.


先ずは、VPS上で物理サーバ用のディスクイメージ “bootdisk.img” をブートさせることができるかどうか試してみることにする.さくらのVPSでのISOアップロードはイメージファイルの拡張子が “.iso” でなければ認識してくれないので、とりあえず “bootdisk.img”ファイルの拡張子だけを変更してアップロードし、Fake ISOイメージからの起動起動を試みた.


VPS ISO Boot Failure
ディスクイメージ “bootdisk.img” の拡張子を “.iso” に変えてもブートさせることはできない

結果はご覧の通りで、このFake ISOイメージからは起動させることはできなかった.”bootdisk.img”はNetBSDの物理的な起動ディスクイメージでファイル形式は “UFS” だ.通常のISOブータブルディスクイメージではないのでこれをブートさせるのは困難だろう.


ddコマンドによる強制ディスク領域書き換え方法


“bootdisk.img” から起動させることができないのであれば、NetBSDのインストーラディスクイメージを使ってインストーラーを起動し、インストールユーティリティーに含まれているシェルを起動して、ddコマンドで”bootdisk.img”をディスク領域に直接書き込んでしまう方法を考えた.


残念ながらこの方法はまだ試行錯誤中で、上手く行ったり行かなかったりしてきちんとしたインストール手順が確立できていない.後日上手く行ったら具体的な手順を紹介することにする.


…という訳で今回はもう少し穏やかなSEIL/x86のインストール方法を紹介することにしよう.


NetBSDを通常インストールしてから、OS設定を変更してSEIL/x86のOSイメージを起動させる方法


さくらのVPSでのISOイメージディスクのアップロード方法やOSインストールの方法については今回は紹介しないので、分からない場合はさくらのホームページのマニュアルがあるのでそれを参考にすると良いだろう.
  ・ 『VPS ISOイメージインストール


SEIL/x86でベースとなるOSはNetBSDなので、とりあえず最新のNetBSD7系列のISOイメージをダウンロードしておく.今回は64bit版の “amd64” を選択した.このNetBSD7は初期起動環境の構築が目的なのでとりあえずNetBSDが起動すれば良い.


 ・“How to get NetBSD”

インストールする構成は “Minimal Install” で十分だ.とりあえずインストールが終わったら rootのパスワード設定などの最低限の設定を済ませておく.さくらのVPSのVNCコンソールはコピー&ペーストができなかったり、画面が80×24キャラクタしかないので、とりあえずsshでアクセスできるようにしておくとこの後の作業が楽だ.一旦仮想サーバをシャットダウンさせて、必要に応じてセカンド仮想NIC(eth1) を内部ネットワークに接続しておく.



Minimal Setup
再起動の前にrootパスワードやsshなどの最低限の設定を済ませておく

Assign the 2nd IF
仮想マシンをシャットダウンし、必要に応じて 2nd 仮想NICを設定しておく

この後、NetBSDを通常起動させ root アカウントでログインし、SEIL/x86を起動させるための設定を行うことになるが、その前に少し面倒な作業が必要だ.面倒な作業というのは、SEIL/x86のディスクイメージ “bootdisk.img” をUFS形式のディスクを取り扱える(読み込める)環境を用意し、ディスクイメージからルートパーティション配下の幾つかのファイルを救い出す作業が必要になる.


イメージファイルの中身を取り出す方法は色々とあるが、今回は前の記事『IIJの仮想ルータアプライアンスSEIL/x86を試す(APU2C4編)』で紹介した、Mac上のVMWare仮想環境にインストールしたNetBSD環境にディスクイメージをマウントして取り出した.



SD Card Contents
“boot”, “seilfirm.img” の2つが今回必要なファイル(”boot.cfg”はAPU2C4用の追加設定なので不要)

取り出した “boot”, “seilfirm.img” の2つのファイルを、VPS上のNetBSDに転送しておく.NetBSDのルートファイル直下には、OS起動を制御するファイル群が置かれている.”boot” がセカンダリブートローダーで “boot.cfg” ファイルに設定してあるメニュー項目に従ってNetBSDカーネルを起動している.


SEIL/x86では独自の”boot” とイメージファイル “seilfirm.img” の組みあわせで、組み込み用途の独自NetBSD系システムを稼働させているようだ.通常のNetBSDのブーティングを行う代わりに、SEIL/x86イメージファイルをメモリ上に展開して起動させるための独自セカンドブートローダ”boot”が必要だ.


これらのファイルを書き換えて通常のNetBSDではなく、SEIL/x86が直接起動するように変更する.


NetBSD の”/” 配下のファイル設定


NetBSD の”/” 配下に、 “boot” 、”boot.cfg” があるので、これらのファイルのバックアップコピーを取得してオリジナルファイルであることが分かるような名前に付け替えておく.


“boot” => “boot.org” 、”boot.cfg” => “boot.cfg.org”

予め転送してあったSEIL/x86の起動イメージ(”seilfirm.img”)と専用ブートローダ?(”boot”)を “/” 直下に配置する.”boot”はNetBSD起動用と SEIL/x86起動用共に同じ名前なので間違えないように注意して欲しい.この2つのファイルを配置したら、起動制御ファイルである “boot.cfg” の中身を書き換える.



test# ls -la /
total 25903
drwxr-xr-x  22 root  wheel       512 Jul 30 14:15 .
drwxr-xr-x  22 root  wheel       512 Jul 30 14:15 ..
-r--r--r--   2 root  wheel      1303 Mar 12 03:45 .cshrc
-r--r--r--   2 root  wheel       855 Mar 12 03:45 .profile
drwxr-xr-x   2 root  wheel       512 Mar 12 03:17 altroot
drwxr-xr-x   2 root  wheel      1024 Mar 12 03:39 bin
-r--r--r--   1 root  wheel     72592 Jul 30 13:32 boot        <=== NetBSDの"boot"
-r--r--r--   1 root  wheel     62788 Jul 30 14:10 boot-seil   <=== SEIL/x86の"boot"を改名して配置
-rw-r--r--   1 root  wheel       376 Jul 30 14:13 boot.cfg
-rw-r--r--   1 root  wheel       319 Jul 30 14:08 boot.cfg.org <=== "boot.cfg" のバックアップ
drwxr-xr-x   2 root  wheel       512 Jul 30 13:32 cdrom
drwxr-xr-x   8 root  wheel     37376 Jul 30 13:33 dev
drwxr-xr-x  27 root  wheel      2048 Jul 30 13:38 etc
drwxr-xr-x   3 root  wheel       512 Jul 30 13:36 home
dr-xr-xr-x   2 root  wheel       512 Jul 30 14:15 kern
drwxr-xr-x   4 root  wheel      2048 Mar 12 03:39 lib
drwxr-xr-x   3 root  wheel       512 Mar 12 03:17 libdata
drwxr-xr-x   5 root  wheel       512 Mar 12 03:40 libexec
drwxr-xr-x   2 root  wheel       512 Mar 12 03:17 mnt
-rwxr-xr-x   1 root  wheel  17812620 Mar 12 03:49 netbsd
dr-xr-xr-x   1 root  wheel       512 Jul 30 14:15 proc
drwxr-xr-x   2 root  wheel      3072 Mar 12 03:40 rescue
drwxr-xr-x   2 root  wheel       512 Jul 30 13:32 root
drwxr-xr-x   2 root  wheel      3072 Mar 12 03:40 sbin
drwxr-xr-x   2 root  wheel       512 Jul 30 14:05 seil
-rwxr-xr-x   1 root  wheel   9481680 Jul 30 14:09 seilfirm.img
drwxr-xr-x   4 root  wheel       512 Mar 12 03:40 stand
drwxrwxrwt   2 root  wheel       512 Jul 30 14:11 tmp
drwxr-xr-x  12 root  wheel       512 Jul 30 13:32 usr
drwxr-xr-x  24 root  wheel       512 Mar 12 03:17 var
test# 


"boot.cfg" ファイルの設定では様々なパラメータを設定出来るが、今回はSEIL/x86を強制的に起動させるので、NetBSD自体は起動できなくしている.工夫すれば NetBSDとSEIL/x86 をブートメニューで切り替える事も可能かもしれない.この辺の仕組みは勉強不足のため、詳しい設定の仕方については勘弁して欲しい.




test# ls -la /
total 25903
drwxr-xr-x  22 root  wheel       512 Jul 30 14:29 .
drwxr-xr-x  22 root  wheel       512 Jul 30 14:29 ..
-r--r--r--   2 root  wheel      1303 Mar 12 03:45 .cshrc
-r--r--r--   2 root  wheel       855 Mar 12 03:45 .profile
drwxr-xr-x   2 root  wheel       512 Mar 12 03:17 altroot
drwxr-xr-x   2 root  wheel      1024 Mar 12 03:39 bin
-r--r--r--   1 root  wheel     62788 Jul 30 14:10 boot     <=== SEIL/x86の"boot"
-rw-r--r--   1 root  wheel       371 Jul 30 14:30 boot.cfg
-rw-r--r--   1 root  wheel       319 Jul 30 14:08 boot.cfg.org
-r--r--r--   1 root  wheel     72592 Jul 30 13:32 boot.org     <=== NetBSDの"boot"のバックアップ
drwxr-xr-x   2 root  wheel       512 Jul 30 13:32 cdrom
drwxr-xr-x   8 root  wheel     37376 Jul 30 13:33 dev
drwxr-xr-x  27 root  wheel      2048 Jul 30 14:28 etc
drwxr-xr-x   3 root  wheel       512 Jul 30 13:36 home
dr-xr-xr-x   2 root  wheel       512 Jul 30 14:30 kern
drwxr-xr-x   4 root  wheel      2048 Mar 12 03:39 lib
drwxr-xr-x   3 root  wheel       512 Mar 12 03:17 libdata
drwxr-xr-x   5 root  wheel       512 Mar 12 03:40 libexec
drwxr-xr-x   2 root  wheel       512 Mar 12 03:17 mnt
-rwxr-xr-x   1 root  wheel  17812620 Mar 12 03:49 netbsd
dr-xr-xr-x   1 root  wheel       512 Jul 30 14:30 proc
drwxr-xr-x   2 root  wheel      3072 Mar 12 03:40 rescue
drwxr-xr-x   2 root  wheel       512 Jul 30 13:32 root
drwxr-xr-x   2 root  wheel      3072 Mar 12 03:40 sbin
drwxr-xr-x   2 root  wheel       512 Jul 30 14:05 seil
-rwxr-xr-x   1 root  wheel   9481680 Jul 30 14:09 seilfirm.img
drwxr-xr-x   4 root  wheel       512 Mar 12 03:40 stand
drwxrwxrwt   2 root  wheel       512 Jul 30 14:29 tmp
drwxr-xr-x  12 root  wheel       512 Jul 30 13:32 usr
drwxr-xr-x  24 root  wheel       512 Mar 12 03:17 var
test# 

"boot.cfg" ファイルの中身次の様に書き換える



menu=Boot normally:rndseed /var/db/entropy-file;boot netbsd
menu=Boot single user:rndseed /var/db/entropy-file;boot netbsd -s
menu=Disable ACPI:rndseed /var/db/entropy-file;boot netbsd -2
menu=Disable ACPI and SMP:rndseed /var/db/entropy-file;boot netbsd -12
menu=Drop to boot prompt:prompt
default=1
timeout=5
clear=1

先頭に SEIL/x86 起動用の項目を追加し、"timeout" の秒数を少し長めに設定しておく



menu=Boot SEILx86:boot seilfirm.img           <=== SEIL/x86 起動用のメニュー項目
menu=Boot NetBSD normally:rndseed /var/db/entropy-file;boot netbsd
menu=Boot NetBSD single user:rndseed /var/db/entropy-file;boot netbsd -s
menu=Disable ACPI:rndseed /var/db/entropy-file;boot netbsd -2
menu=Disable ACPI and SMP:rndseed /var/db/entropy-file;boot netbsd -12
menu=Drop to boot prompt:prompt
default=1
timeout=10
clear=1

起動直後に起動メニューが10秒ほど表示されるので、NetBSDなどもメニュー切り替えで起動できそうな気もするが、"boot" ファイルを置き換えてしまっているので、NetBSDはまともに起動しないだろう.




SEIL/x86 boot sequence
SEIL/x86の初期起動画面

SEIL/x86 on Sakura VPS
SEIL/x86がさくらのVPS上で稼働した

無事SEIL/x86がさくらのVPS上で稼働するようになったが、SEIL/x86が使えるようになるまでにはまだ色々と設定しなくてはならない.先ずは、SEIL/x86のインタフェース名とVPSの仮想NICのMACアドレスを確認して "lan0"/"lan1"が仮想NIC "eth0"/"eth1" のどちらと結びついているのか確認しておく.この時点では "lan0"側には仮のIPアドレス 192.168.0.1 が割り当てられているので変更が必要だ.



Check IF Names
SEIL/x86のインタフェース名とMACアドレスの組みあわせを確認する( #show status interface )

check the NIC's MAC address
仮想NIC側のMACアドレスは管理コンソールで確認する

"lan0", "lan1" のIPアドレス設定が終わったら、デフォルトルートやDNSなどの設定を行い、SEIL/x86がインターネットや内部ネットワークと通信可能であることを確認する.問題がなければsshの有効化とtelnetの無効化を行い、adminパスワードの設定などの基本設定を行う.


SEIL/x86は起動キーと機能キーという2つのキーファイルを設定しないと殆ど何も出来ないので、この2つのキーは必ず設定しておかなければならない.機能キーの取得は有料(1ライセンス 800円)なので、予め購入して用意して置く必要がある.機能キーが設定されていないと、苦労して設定したコンフィグ情報がルータの再起動と共に消えてしまうので、けちらずに購入しておこう.



[xxxx@y2web]% ssh admin@192.168.200.79
The authenticity of host '192.168.200.79 (192.168.200.79)' can't be established.
RSA key fingerprint is 95:36:81:08: ....   :d2:c9:ea.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.200.79' (RSA) to the list of known hosts.
Last login: Sun Jul 30 14:32:32 2017 on console
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.

# 
    bye              help             ping             show             traceroute   
    clear            install-key      ping6            ssh              traceroute6  
    date             interface        quit             sshd             uninstall-key
    exit             load-from        reboot           tcpdump          update       
    filter           logout           report-to        telnet           wol          
    filter6          measure          set              telnetd      
# install-key from stdin
please enter key data ("." for end of key data)
Starter0jsQADKaqAAEAAAAAAIYAAQAAAAATBkRpc3RyaWJ1dGVkIHZpYSBT
 ... 【秘密です】
GqQU4yTIz5kaBwfP7TVkfouxbJcWfR6Ui54Y7ur0JX8VCsE1MacQq/9bb5H
.OK?[y/N]y
Startup Key:
  Distribution ID : 0001-0000-0000-0086-0001-0000-0000-1306
  Memo            : Distributed via SEIL Community Site.
  Status          : VALID and registered.

# install-key from stdin
please enter key data ("." for end of key data)
FuncKey0ACdn0yN+AVgAAAAAVm+
 ... 【もっと秘密です】
QyT4fqpTZiclI0XTt+goqkAySc=
.OK?[y/N]y
Function Key(s):
  Function : 'save-to' command
  Issued   : 2015/12/15 12:00:00
  Memo     : Delivered via LaIT Supply
  Status   : VALID and registered.

# 
# resolver enable
# resolver address add 210.188.224.10
# route add  default 160.16.96.1
# ping y2tech.net
PING y2tech.net (160.16.228.218): 56 data bytes
64 bytes from 160.16.228.218: icmp_seq=0 ttl=62 time=0.774 ms
64 bytes from 160.16.228.218: icmp_seq=1 ttl=61 time=0.716 ms
64 bytes from 160.16.228.218: icmp_seq=2 ttl=61 time=2.683 ms
64 bytes from 160.16.228.218: icmp_seq=3 ttl=61 time=0.828 ms
^C
----y2tech.net PING Statistics----
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.716/1.250/2.683/0.956 ms
# telnetd disable
# password admin algorithm blowfish
New password:
Retype new password:
# save-to flashrom