befs_anneの日記

雰囲気でネットワークをやっている

「WSLのVagrantからWindowsのVagrantが見えない」的なエラーの解消

概要

タイトルの通り。最初は「WSLとWindowsVagrantのバージョンが違う」というエラーが出ていて、Windows側をWSLと同じバージョンまで上げたらWindows側のVagrantのバージョンがUnknownになった。エラーメッセージに従って環境変数をいじるなどしたが効果なし。

解消方法

(bashではなく)コマンドプロンプトで以下を実行したら解決したっぽい。

vagrant plugin repair

実際に出力されたメッセージとかもメモしておきたかったけど、コマンドプロンプトはログが残せないのが不便……。

WSL + Cmderがいい感じなので、CmderのデフォルトターミナルをWSLにする

概要

WindowsコマンドプロンプトUbuntuを触るのにも慣れてきた頃、Cmderという100倍使いやすいターミナルが存在することを知って驚愕している。

qiita.com

この記事ではWSLを開くTaskを作るところまでを紹介しているが、このままだとデフォルトターミナルがコマンドプロンプトのままなので、これをUbuntuに変更する。

方法

至って簡単。

WSLを開くタスクを作成

  • タスクバーのメニューからSettingsをクリックし、左側のメニュー内のTasksをクリックする。
  • 「+」ボタンをクリックして新しいTaskを作成する。Task名はご自由に。
項目 内容
Task Parameters -icon "%USERPROFILE%\AppData\Local\lxss\bash.ico"
Commands C:\Windows\System32\bash.exe -cur_console:p

作成したTaskをStartup optionsに追加

  • 左側のメニューからStartupをクリックする。
  • 「Specified named task」のラジオボタンを選択し、さっき作成したTaskを選択する。
  • 右下のSave settingsをクリックする。

おわりに

ターミナルは色々あるようで、どれを使ったら良いのか迷う。不満もないので、しばらくはCmderを使ってみる。

qiita.com

3年越しでネットワークスペシャリストに合格した人の反省

概要

3回目の挑戦にしてようやく、合格率13.6%の壁を乗り越えてネットワークスペシャリスト試験に合格した。その振り返り。

結論

とにかく午後Ⅱをやれ

勉強時間

勉強時間はStudyplusで記録していたのだが、勉強開始日から最後の9/27の記録分までで37時間だった。試験日前日まで根詰めてやってたので、多分トータルで60時間には達しているはず。そのうえ延べ3年かかっていることと、本業がネットワークであることも考えると計り知れない。ただ、合格に延べ3年の時間 + 実務経験は全然必要なくて、今年の60時間分の勉強と、実務で培った知識だけでも合格できたはず。つまり、合格できなかった2年間にやってた勉強はネスペの合格に寄与するものではなかったのだと思う。

合格の要因

前回、前々回と不合格の憂き目に遭ったのは、午後Ⅱ対策をめんどくさがってしなかったから。そして今回合格できたのは、午後Ⅱ対策をきちんとしたから。これに尽きる。

午後Ⅱとそれ以外

午前Ⅰ、午前Ⅱ、午後Ⅰおよび午後Ⅱそれぞれで問われる能力は以下のように異なる。

  • 午前Ⅰ: ITに関する広く浅い知識
  • 午前Ⅱ: ある技術領域における専門的な知識
  • 午後Ⅰ: ある技術領域における専門的な知識 + 業務での利用
  • 午後Ⅱ: ある技術領域における専門的な知識 + 業務での利用(応用) + 「試験勉強」

ある程度の年数IT業界にいて、「自分は地頭は悪くないほうだ」っていう人は、無勉でも案外午後Ⅰ合格まではこじつけられる。

しかし、午後Ⅱは違う。午後Ⅱは知識と実務経験ではどうにもならない、ガチガチの「試験勉強」が絶対に必要だと思う。

午後Ⅱ対策で養わなければならない能力

午後Ⅱの問題は、大きく3種類に分かれると思う。複数の要素が含まれる問題もある。実例は全て平成29年午後Ⅱ問Ⅰから。

  1. 技術知識を問う問題
  2. 思考力・想像力を問う問題
  3. 要件の理解度を問う問題

技術知識

1は、問題のタイプで言うなら午後Ⅰまでに出題される問題とそう変わらない。例えば設問2はほぼ1ページまるまる埋め尽くすシーケンス図に面食らうが、実際はARPのやり取りがほとんどなので、ARP解決の流れを知っていれば解ける。ただし、OpenFlowスイッチが挟まっているせいでパケットの流れが複雑なので、ていねいに追う必要がある。応用力を試すためのひねりを加えて問題の難易度を上げるのは、午後Ⅱの常套手段だ。

思考力・想像力

2は、よく分からないけどそれっぽいこと書いておいたら部分点が狙える問題。例えば設問4(5)はパブリッククラウドにおいて国外リージョンを利用した場合の(国内リージョン利用と比較した)メリットを問われており、「国外だから日本で大地震が起きても関係ねーな」ぐらいのことを想像して書ければ点がもらえる。

午後Ⅱ対策に手をつけたがらなかった理由のひとつとして、この手の問題の自己採点のしようがないところがある。自分としては間違っていないつもりだけど、回答例とは全然違う、みたいなことが多くてモチベーションが減退する。いつの問題だったか忘れたけど、「このような作業ミスを防ぐにはどうすればよいか?」という問題の回答が「手順書通りに作業するよう徹底させる」で、仕組みから解決する回答を記載した私はげんなりした記憶がある。これに関しては「そういうもの」だと思うしかない。私のようにTwitterで「問題作ったやつ現場知らねーだろ」などと文句を言って手を止めてしまうよりも、「回答とは違うけど、俺の回答もまた真だろ」と思って進めたほうが効率的にも精神衛生的にも良い。結局当日は自分が思うままの回答を書くほかないし、厳密な正否も分からないのだから。

要件の理解

午後Ⅱはとにかく問題文が長く、問題で問われる問題がパラパラと散りばめられている。1回読んで全て覚えられるような超人以外は、3のような問題に直面した時に問題文から必要な要件をどれだけ早く見つけるか、という訓練が必要だ。そしてそれを可能にする第一歩は、午後Ⅱを繰り返し解いて「3のような問題は問題文中のどこかに必ず答えが隠れている」という確信を得ることだと思う。今年の問1で言うならば、設問4(1)がそれに当たると思う。WebサーバーがLBの配下にいることを把握できれば、すべきことは自ずと分かる。

要件の理解を養うことは、いわば狭義の午後Ⅱ対策と言える。それなりの知識と業務経験がありながらも2年連続で不合格だったのは、結局のところこれを怠っていたからだと反省している。

短時間で設問を選択する能力

忘れてはならないのがこれ。午後Ⅱは2つの問から1つ選択し回答する。試験時間は2時間と長めだが、各設問の問題を丁寧に読んでから決めるのはさすがに時間がもったいない。各問の冒頭や使われている用語から傾向を把握するのは難しくないが、そのうえでどちらの問を解くかを決めるには、日頃の勉強を通して自分の得手不得手を知っておく必要がある。今回は問1がSDN(OpenFlow)とパブリッククラウド利用、問2はIEEE 802.11acエンタープライズネットワーク設計をテーマとした問題で、私は前者を選んだ。SDNやパブリッククラウドは興味があって触ったり調べたりしていたのであまり抵抗がなかった反面、無線や社内ネットワークに使われる認証系の技術は明らかに弱く、即座に決断できた。

午後Ⅰまでの対策

午後Ⅰまでの勉強を全くやらなかったかというと、もちろんそんなことはない。しかし、今年に限った話をすれば、費やした時間は(午前Ⅰはセスペ合格で免除なので)午前Ⅱ、午後Ⅰのぶんを合計しても午後Ⅱ対策に充てた時間よりも少ない。過去2年は午後Ⅰまでの対策を結構やっていたが、答えられる問題を解いて正解する快感におぼれていただけだったような気がする。ある程度の知識と実務経験がある人が、勉強時間を確保できないまま試験まであとⅠ週間になってしまった…みたいなシチュエーションならば、午後Ⅱ対策を最優先にしていい。

勉強方法

午後Ⅱどころかたぶんネスペ、IPA試験に限った話ではないのだが、とにかく1冊の問題集(過去問)を完璧になるまで解く。最初の1~2周は時間がかかるが、慣れてくれば答えを覚えるので回転が速くなる。答えを覚えることに罪悪感を覚える必要はないが、その答えになる理由も一緒に覚えること。分からない問題はどれだけ考えても分からないと割り切って、早めに答えを確認する。これで午後Ⅱを各問3~4周した。

さいごに

時間がかかった分よろこびもひとしおだが、本来かける必要のない時間だったということを考えると反省の多い3年間だった。ある程度基礎知識のある分野の高度試験を受ける時は、優先的に午後Ⅱ対策に取り組んで、最短距離で合格を目指そうと思う。

極端なことを言えば、午後Ⅰまでで問われる能力のほとんどは午後Ⅱでも必要なので、午後Ⅱに9割の時間を費やしても案外合格できるかもしれない。次回の試験で、自分自身で検証してみたい。

WSLを使う時にbashの$HOMEから始められるようにした

概要

コマンドプロンプトbashコマンドを実行してbashへ映る時に、(bashのホームではなく)bashコマンドを実行した時にいたディレクトリから始まるのが鬱陶しくて、.bashrcにスクリプトを書いてbashコマンド実行時に聞いてもらうようにした。

# when login
while true
do
  read -p 'Do you want to go $HOME? [Y/n]' Answer
  case $Answer in
    '' | [Yy]* )
      cd $HOME
      break;
      ;;
    [Nn]* )
      break;
      ;;
    * )
      break;
      ;;
  esac
done

以下のような感じ。

C:\Users\shino>bash # Windowsのホーム
Do you want to go $HOME? [Y/n] # Windowsのホームに用がなければ何も入力せずEnter
shino@shinopc:~$ # bashのホームへ移動

「cd $HOMEだけ書いとけばいいじゃん」とも思ったものの、たまにWindows側で集めたファイルを編集したい時とかはWindows側でディレクトリ移動してからWSLへ移ることがあるので、都度確認形式にした。.bashrcを書き換えてsource ~/.bashrcをする度に聞かれるのが難点だが、大して書き換えないので妥協している。

参考

qiita.com

はじめてのLinux Network NamespaceとLinux Bridge

概要

TremaやRyuを使ってOpenFlowをキメたかったが、gemだのpipを使いこなせずLinuxの仮想ネットワーク機能で飢えを凌ぐ。実行環境はCentOS7.3。

Linux Network Namespaceとは(ざっくり)

  • Linux上に独立したネットワーク空間(多分OpenFlowで言うところの「テナント」)を構築できるスグレモノ。
  • 「ip netns hogehoge」でホストをほげほげする。

Linux Bridgeとは(ざっくり)

  • Linux上にネットワークブリッジを作る機能。多分。
  • 「brctl hogehoge」でブリッジをほげほげする。

参考

https://qiita.com/norin/items/f2c1b0158ee34abcdd0c

d-net.robata.org

作ったネットワーク

ブリッジを介して全てのホストが単一セグメントにいる簡単なもの。

f:id:befs_anne:20171019010106j:plain

流れ

bridge-utilsのインストール

インストールすればbrctlが使えるようになる。

# bridge-utilsのインストール
sudo yum -y install bridge-utils

ブリッジ、ホストの作成

# 以降すべてrootで作業
sudo -s

# ブリッジ作成
brctl addbr br1

# ホスト作成
ip netns add host1
ip netns add host2
ip netns add host3
ip netns add host4

リンク(veth)作成

vethというものを使う。どうやら、片っぽから入ったフレームがもう片っぽから出てくる二対一組のインタフェースっぽい。

ip link add br1_host1 type veth peer name host1_br1
ip link add br1_host2 type veth peer name host2_br1
ip link add br1_host3 type veth peer name host3_br1
ip link add br1_host4 type veth peer name host4_br1

ブリッジとリンクのバインド

vethの一方をブリッジにバインドする。

brctl addif br1 br1_host1
brctl addif br1 br1_host2
brctl addif br1 br1_host3
brctl addif br1 br1_host4

ホストとリンクのバインド

vethのもう一方をホストにバインドする。

ip link set host1_br1 netns host1
ip link set host2_br1 netns host2
ip link set host3_br1 netns host3
ip link set host4_br1 netns host4

IPアドレスの割り当て

ホスト(厳密にはホストにバインドしたveth)にIPアドレスを割り当てる。「ip netns exec {ホスト名} {コマンド}」で指定したホストで指定したコマンドを実行できる。

ip netns exec host1 ip addr add 10.0.0.1/24 dev host1_br1
ip netns exec host2 ip addr add 10.0.0.2/24 dev host2_br1
ip netns exec host3 ip addr add 10.0.0.3/24 dev host3_br1
ip netns exec host4 ip addr add 10.0.0.4/24 dev host4_br1

ループバックアドレスの割り当て

ip netns exec host1 ip addr add 127.0.0.1/8 dev lo
ip netns exec host2 ip addr add 127.0.0.1/8 dev lo
ip netns exec host3 ip addr add 127.0.0.1/8 dev lo
ip netns exec host4 ip addr add 127.0.0.1/8 dev lo

ループバックアドレスのリンクアップ

ip netns exec host1 ip link set lo up
ip netns exec host2 ip link set lo up
ip netns exec host3 ip link set lo up
ip netns exec host4 ip link set lo up

ホストのインタフェースのリンクアップ

ip netns exec host1 ip link set host1_br1 up
ip netns exec host2 ip link set host2_br1 up
ip netns exec host3 ip link set host3_br1 up
ip netns exec host4 ip link set host4_br1 up

ブリッジの起動

brctlで作ったブリッジはip link showの結果に出てくるので、ip link setで起動する。

ip link set br1 up

ブリッジのインタフェースのリンクアップ

ip link set br1_host1 up
ip link set br1_host2 up
ip link set br1_host3 up
ip link set br1_host4 up

疎通確認

疎通確認もip netns execを使って各ホストからpingを実行する。

[centos73 shino]#ip netns exec host1 ping 10.0.0.2 -c 1
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.072 ms

--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.072/0.072/0.072/0.000 ms
[centos73 shino]#ip netns exec host1 ping 10.0.0.3 -c 1
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.070 ms

--- 10.0.0.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.070/0.070/0.070/0.000 ms
[centos73 shino]#ip netns exec host1 ping 10.0.0.4 -c 1
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=0.080 ms

--- 10.0.0.4 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.080/0.080/0.080/0.000 ms
[centos73 shino]#

おわり

今回は単なるホストだったけど、ルーティングもできるのでもっと面白いことができそう。

公開鍵認証を使ったSSHログイン設定手順

概要

いつまで経っても覚えられない自分のために……。

手順

サーバー側

# キーペアの生成、インタラクティブ操作は割愛
$ ssh-keygen

# 秘密鍵(id_rsa)のパーミッションを600に変更
$ chmod 600 ~/.ssh/id_rsa

# authorized_keysに公開鍵(id_rsa.pub)を追記
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# パスワード認証の無効化(「PasswordAuthentication yes」をコメントアウトする
)
$ sudo vim /etc/ssh/sshd_config

# .sshディレクトリのパーミッションを700に変更
$ chmod 700 ~/.ssh

# authorized_keysのパーミッションを600に変更
$ chmod 600 ~/.ssh/authorized_keys

クライアント側

サーバー側から公開鍵を持ってくる。

ホスト毎に使い分けるなら

クライアントの~/.ssh/configに以下を追記する。

Host {ホスト名}
    IdentifyFile ~/.ssh/{秘密鍵ファイル名}

データセンターに置いといたら便利(そう)なもの

概要

備忘録。データセンターによっては備品(主に工具類)を貸してくれたり、ポリシーで持ち込めないもの(特に燃える可能性のあるもの)があったりするがその辺りは特に考慮しない。

PC、デバイス

PCが調子悪くて作業延期とか割とシャレにならないので、予備として置いておけるなら。最悪ディスプレイとキーボードがあれば、サーバーに直接繋げて作業できることも。

  • PC
  • マウス
  • キーボード
  • ディスプレイ
  • コンソールケーブル
  • USBメモリ

ケーブル類

メディア類の初期不良にも何度か遭遇しているので、予備として置いておきたい。

工具、文房具類

  • ドライバー
  • 刃物類(はさみ、ニッパー、カッターなど)
    • 開梱で大活躍。
    • LANケーブル撤去の際、コネクタのところを切ればあとはスーッと引っ張るだけなので楽。
  • ケージナット取り外しするやつ
    • ケージナットクリッパーというらしい。
    • マイナスドライバーでやってのける人も多いけど、絶対これ使ったほうが楽。しかも篠原電機のやつ(以下リンク)は磁石がついてて更に楽そう。

ケージナットクリッパー 楽ackリッパー(ラクリッパー)|ケージナット着脱工具 楽リッパー(ラクリッパー)|ケージナットクリッパー|データセンター|製品情報|電材部品の開発メーカー、篠原電機株式会社

  • 結束バンド
    • タイラップ インシュロック そんなの ひとの かって
  • 手袋
    • 滑り止めがついてるやつ。でかい機械をうっかり足に落として骨折、という悲劇を2回見ている。しかも同じ現場。以来そこでは着用必須になった。
  • 養生テープ
  • サインペン
  • ケーブルテスター
  • ケーブルタグ

その他

  • 上着
    • データセンターはクソ寒い。作業場所の都合上ホットアイルで暖をとることが難しい場合もあるので、常に置いておけると嬉しい。
    • データセンターのロビーにカラオケ屋の貸衣裳よろしく作業着のブルゾンが何着か掛かったハンガーラックが置かれる未来を待っている。