横幅13インチ(33cm)な機器たちの紹介。ふつうの19インチラックは幅45cm程度(19インチは耳たぶ含んだ大きさ)ですが、 それより一回り小さい13インチが微妙に規格化されている気がします、というか規格化してくれ。
写真は上からルータ(cisco 1812W)、スイッチ(Dell 2824)、サーバ(NEC PMTE1)で、 一番下のは通常ラックサイズのサーバ(HP DL320G6)です。

NEC PMTE1(N8395-212AN)

330×270mmな、サーバ、というよりデジタルサイネージ用途なパソコンです。 組み込み向けだけあって6面のうち使ってるのは前面側面の2面だけという素敵仕様ですが、 かなり昔に中古で出回ったきり、見なくなりました。

33cm横幅なサーバはもう作らないんでしょうか? 3.5インチなら3つ、2.5インチなら8つホットプラグ可能に作れるし、なかなかいいサイズ感だと思うのですが。

Dell 2824

横幅が33cmなハブは各メーカから出ています。VLANが使えるギガビットハブ一覧。 どのハブも後ろコンセントで、ぴったり設置できないのがちと残念。
機種ポート数備考サイズ
Dell 282424-330×231mm
HP 1810-24G v224-330×173mm
Netgear JGS524E24設定癖330×173mm
Netgear GSM5212P12PoE+331×208mm
Panasonic M24eG24-330×230mm
Panasonic M16eGPWR+16PoE+330×330mm
D-Link DGS-1510-20162xSFP+280×180mm

DGS-1510-20は横幅さらに狭いですが、10Gbpsという素敵仕様。消費電力も少なくていい感じです。

cisco 1812W-AG-J

324×242mmと微妙に33cmより小さいですがとりあえず仲間、ということで。 今時この世代のルータもないですが、オクで安価なのでいじるにはもってこい。

ハード増設

中古だとファンがひっかかるので静かなのに交換します。信号線の並びは通常と違うので色を見て同じに差し替えます。
DRAMは上記サーバに当初ついていたメモリ(SODIMM-DDR 256MB)をそのまま流用し、計384MBに。
FLASHは結構相性があり、dump_cisで調べてみるとコンフィグ00番に[mwait]がないとだめという不条理な制約。 今だとtranscendのTS2GCF133が安価で入手できます。 FLASHのディスク領域のブートセクタにはmonlibが書かれており、 rommonはまず最初にこれを読み取り、次にiOS本体を読み取って起動するようになっています。 monlibがなくてもたいてい起動できますが、iOSバージョンにあったmonlibを書き込んでおいたほうがいいです。
Router#upgrade filesystem monlib flash:  //monlibの更新
Router#format flash:                     //formatでも更新されます
Router#show flash: all                   //monlibの確認
初期化は一般的にはerase startup-configですが、vlan設定はflash中のvlan.datに書かれるのでそのファイルも削除します。 ファイルの転送などでとりあえずネットワークにつなぐ場合は下の設定だけでポート2~9で接続可能です。
Router#conf t
Router(config)#int vlan 1
Router(config-if)#ip address 192.168.1.111 255.255.255.0
Router(config-if)#end
これはポート2~9はデフォルトでswitchport mode accessになっており、また、switchport access vlan 1になっているためです。 ただ無線アクセスポイントとしても使いたいよー、となると最終的にはbviにアドレスを振ることになりますので、シリアルケーブルはまだはずさないように。

rommon

起動時にはまずrommonが起動します。ここで数十秒以内にBREAKを検出するとrommonモードに落ちます。 BREAK送出がうまくいかない場合はフラッシュを抜いておけばいいです。 rommonでcookieコマンドを叩くとshow diagで表示される内容の16進ダンプが表示され、 またprivコマンドで特権モードになると書き換えることも可能です。 特権モードのパスワードはcookieの最初の5ワード(10バイト)の和の、16進下4桁です。
Router#reload
Proceed with reload? [confirm]
*Jul  4 00:18:57... Reload requested by console. Reload Reason: Reload Command.
System Bootstrap, Version 12.3(8r)YH5, RELEASE SOFTWARE (fc1) ...
Self decompressing the image : ##############...//この辺でBREAK信号を送る
monitor: command "boot" aborted due to user interrupt
rommon 1 > cookie
cookie:
04 ff cf 06 00 17 94 12 34 56 c1 8b 46 4f 43 31 //04ff+cf06+0017+9412+3456=9c84
32 33 34 35 4d 41 57 40 04 9d 41 03 00 09 93 82
.....
rommon 2 > priv
Password:9c84
You now have access to the full set of monitor commands...
Radio Country Codeは0x65-66番地にあり、0009が日本(J52)、0018が日本(W52/W53)です。 ここを書き換えると802.11aでチャネル36,40,44,48,52,56,60,64が使えるようになります。
rommon 3 > cookie
View/alter bytes of serial cookie by field --
Input hex byte(s) or: CR -> skip field; ? -> list values
bytes 0x00-0x07: 04 ff cf 06 00 17 94 12
               >                             //改行のみでスキップ
bytes 0x08-0x0F: 34 56 c1 8b 46 4f 43 31
               >
...
bytes 0x60-0x67: d9 02 40 c1 4a 00 09 c0
               > d9 02 40 c1 4a 00 18 c0     //0009→0018に書き換え
...
rommon 4 > reset
System Bootstrap, Version 12.3(8r)YH5, RELEASE SOFTWARE (fc1)
...
Router(config)#int dot11Radio 1              //802.11a側を選択
Router(config-if)#channel ?                  //設定されたか確認
  <36-5320>        One of: 36 40 44 48 52 56 60 64 5180 5200 5220 5240 5260
                   5280 5300 5320
  least-congested  Scan for best frequency
Router(config-if)#
実際の番地は機種により違いますので、 show diagの結果を見ながら4aの直後あたりで推定してください。 iOSのバージョンによっては0018を認識しないのでその場合は0000(USA)とか。 なお、rommonのアップデートはフラッシュ上のファイルからだと失敗することが多いようです。

アクセスポイントとして使う

まずtelnetで設定可能にするために初期状態から最低限の設定をします。
no ip domain-lookupは誤ったコマンド名をホスト名と解釈されてブロードキャスト探索されないためですが、 本質的には各ラインでtransport preferred noneが正しいです。 でもwhoとか実行したときに今度は逆引きを探索されてやっぱりうっとおしいので、無効にしておきましょう。
Router(config)#no ip domain-lookup
Router(config)#service password-encryption
Router(config)#enable secret XXXXXX    //ネットワークログインには両パスワード必要
Router(config)#line vty 0 4
Router(config-line)#password XXXXXX
Router(config-line)#exit
Router(config)#bridge irb
Router(config)#bridge 1 protocol ieee  //ブリッジ1を作成
Router(config)#bridge 1 route ip
Router(config)#no spanning-tree vlan 1 //スイッチのSTPを無効
Router(config)#int vlan 1
Router(config-if)#bridge-group 1       //ブリッジ1に参加
Router(config-if)#bridge-group 1 spanning-disabled //ブリッジのSTPを無効
Router(config-if)#exit
Router(config)#int bvi 1               //ブリッジ1インタフェース
Router(config-if)#ip address 192.168.1.111 255.255.255.0
Router(config-if)#end
Router#wr mem                          //設定書き込み
わざわざブリッジを作成してアドレスを振っているのは、スイッチ(ポート2~9)と無線をブリッジするためです。 両方同じVLAN1なら勝手にブリッジングしてくれると思いがちですが、スイッチと無線(dot11)でのVLANは独立しており、 ブリッジインタフェースで両者をつなぐ必要があります。
STPを無効にする場合、BVI1ブリッジの下にVLAN1スイッチがぶらさがる格好になるため両方無効にします。 スイッチ側はportfastでもいいですし、ブリッジ側はint vlan 1;no autostateにしてup状態を維持してもいいですが、 RSTPが設定できない1812では他のスイッチのためにもSTPは話さないほうがよさげです。
ここから後はコンソールケーブルは不要、telnetで設定します。sshはいろいろ設定項目多いのでほっときましょう。
//認証方式の設定(ssid別)
Router(config)#dot11 ssid myssid
Router(config-ssid)#vlan 1
Router(config-ssid)#authentication open   //wpaは最初にキーなしで接続後、認証
Router(config-ssid)#authentication key-management wpa //認証方式
Router(config-ssid)#mbssid guest-mode     //guest-modeはssid名の広告
Router(config-ssid)#wpa-psk ascii XXXXXXXX
Router(config-ssid)#exit
//2GHz側の設定
Router(config)#int dot11Radio 0
Router(config-if)#encryption vlan 1 mode ciphers aes-ccm tkip //暗号化方式
Router(config-if)#ssid myssid             //複数ssidならこの2行をくりかえし
Router(config-if)#mbssid                  //複数ssidを使えるようにmbssid
Router(config-if)#channel NNN             //必要なら無線チャネル設定
Router(config-if)#no shutdown             //無線起動
Router(config-if)#exit
//2GHzのサブインタフェースの設定(vlan別つまりssid別)
Router(config)#int dot11Radio 0.1         //サブ番号はVLANに合わせておく
Router(config-subif)#encapsulation dot1q 1 native  //VLAN番号
Router(config-subif)#bridge-group 1       //VLAN1をブリッジ1に参加
Router(config-subif)#exit                 //デフォルトでbridge-group 1 spanning-disabled
Router(config)#end
Router#wr mem
以上で802.11b/gのアクセスポイントになります。802.11aも使う場合はint dot11Radio 1で同様な設定を行います。
mbssidは、複数のssidをそれぞれguest-modeで広告したい場合に必要となる動作モードです。 サブインタフェースの設定で無線区間はdot1qじゃないはずなのに、encapsulation dot1qを指定する必要があります。 単にVLAN番号が必要なだけなんでしょうけど。 複数のssidを同じセグメントにしたい場合は、無線の設定では別のVLANを振っておき、同じブリッジに参加させればいいです。

cisco 1861

1812Wがらみで1861の紹介。幅267×281mmとかなり33cmより小さいですが逆に高さあります。
ケースを開けるためにはまずパネルをはずしますが、実は隠れたHWICスロットがあって2つ使えます。 1812WからminiPCIを移植すればWifiも使えますが、基板上のライントランスに干渉するし、 1861の仕様のため5GHz帯側は使えないようです。 標準では256MBのメモリと128MBのフラッシュのはずが、中にはさらに512MBのメモリと1GBのフラッシュが。 なんだこれ、と思ったらLinuxで動いている内蔵マシンがあって、 ここでCUE(Cisco Unity Express)を動かしているんですね。1861の種別によっては内蔵してないようです。

Integrated Service Engine

1812Wでの手順と同様にして最初にbviにアドレスを振って外からtelnetできるようにします。 ここでポート2002にtelnetすると内蔵マシン(ISE)につながりますので、 そのまま1861の方からservice-module in 0/0 resetとすると起動ログを見られますが、 アドレスが設定されてないというエラー。
同じセグメントにしたいのでbridge-groupしたいところですが、 1861側のポートにアドレスがないと駄目なようなのでunnumberedにしておいてルーティング割当します。
CUEの起動までに3分ぐらいかかりますが、proxy-arpがデフォルト有効なため 別マシンからからもCUEのwebページを192.168.1.112で開けるようになります。
Router(config)#interface in 0/0          //inはintegrated-service-engineの略
Router(config-if)#ip unnumbered bvi 1    //bvi1のアドレス(192.168.1.111)を借りる
Router(config-if)#service-module ip address 192.168.1.112 255.255.255.0
Router(config-if)#service-module ip default-gateway 192.168.1.111
Router(config-if)#no shutdown            //必要です
Router(config-if)#exit
Router(config)#ip route 192.168.1.112 255.255.255.255 integ 0/0
Router(config)#end
Router#wr mem

Cisco CallManager Express

1861はFXSを4ポート持っており、標準でCallManager Express対応です。
Router(config)#ip http server
Router(config)#ip http path flash:/gui
Router(config)#telephony-service         //このコマンドでCCME関連が有効になります。
Router(config-telephony)#dn-webedit      //webから設定できる項目を増やす
Router(config-telephony)#time-webedit
Router(config-telephony)#end
Router#wr mem
あとはルータの/ccme.htmlにアクセスして、enableパスワードで開けますが、 GUIから設定可能な項目は少ないです。

HWIC-3G-HSPA

刺して面白いカード、というと3Gのカードでしょうか。以下の設定で ポート2034(show lineで確認した番号+2000)にtelnetかけるとATコマンドを叩けます。
Router(config)#line 0/2/0
Router(config-line)#transport input telnet
Router(config)#end
Router#wr mem
AT&Vとか十分堪能したら一旦closeし、インターネット接続の設定をします。
Router#cellular 0/2/0 gsm profile create 3 3g-d-2.ocn.ne.jp
ciscoの3G設定例ではAPN名のほかにユーザ名やパスワードをセットしていますが、HSPAでは不要なようです。 なおこのprofileはモデム自身に記憶されます。
Router(config)#no ip source-route             //外につなぐので最低限
Router(config)#interface ce 0/2/0             //ceはcellularの略
Router(config-if)#ip address negotiated
Router(config-if)#encapsulation ppp
Router(config-if)#ppp chap hostname mobileid@ocn
Router(config-if)#ppp chap password mobile
Router(config-if)#ppp ipcp dns request accept //DNSアドレスの取得
Router(config-if)#dialer in-band
Router(config-if)#dialer string "*98*3#"      //この3はプロファイル番号
Router(config-if)#dialer-group 1              //dialer-list番号
Router(config-if)#exit
Router(config)#dialer-list 1 protocol ip permit //自動発信 ipはすべて許可
Router(config)#end
Router#wr mem
次にインターフェースを設定します。 これも設定例ではchat-scriptをlineに設定したりしていますが、標準のものでOKですし、 着信しないのでasync modeも不要です。では試験。
Router(config)#ip route 8.8.8.8 255.255.255.255 ce 0/2/0  //試験用設定
Router(config)#end
Router#debug dialer         //ログ表示(保存されません)
Router#ping 8.8.8.8         //google dnsへping
...!!                       //発信して接続される
Router#show int ce 0/2/0    //接続状況の確認
Cellular0/2/0 is up, line protocol is up
  Hardware is HSPA/UMTS/EDGE/GPRS-850/900/1800/1900/2100MHz
  Internet address is 153.148.999.999/32 …
Router#show ip dns view     //DNSサーバ情報の表示
… Domain name-servers:
    222.146.35.1
    221.184.25.1 …
Router#                     //120秒たつと自動切断
OCNモバイルoneではグローバルアドレスが割り当てられ、 1861が外部に丸見えになるので8.8.8.8にだけrouteして接続試験します。 なお、dialer idle-timeout 0 で自動切断なしにしておくと結構長持ちするようで、 dynamic DNSサービスの利用でパケット消費なしに外部からの通知を受け取れます。
exciteモバイル(IIJmio基盤)の場合、 アドレスは100.64.0.0/10の共用アドレス(DNSは202.232.2.2,3)になりNATを経由します。 そのため、通知を受け取るためには常時コネクションでKeepAliveするか 定期的にSTUNを投げる必要があり、パケットを消費します。 AndroidのGCMが28分ごとにkeepaliveらしいのでNAT timeoutは30分とかでしょうか。 NATの内側にサーバ立てて定期通信せずに外部通知を受け取れるような逆NAT的rfcがありそうですが… mDNSとかws-disc.proxyでも可能だがセキュリティが問題かな。 v6ならグローバルだからそこでやれって?ごもっとも。

OCNモバイルoneでいつまでグローバルアドレスを割り当てるか不明ですが、 いずれの場合でも複数台でインターネットを利用するには1861上でNATとファイアウォールの設定が必要です。 このあたりの設定は通常のPPPoEの場合と同じになります。