Dockerでルータをコンテナ化してみた

最近Dockerを触る機会がちょくちょくあって、ルータをコンテナ化したら面白いことできそうだし、便利かもしれないと思ってやってみました。 思い返すと、初めてDockerを触ったのは2013年の12月で、こんな記事を書いたこともあったっぽい。懐かしい。

kurochan-note.hatenablog.jp

vyOSをコンテナ化する!

コンテナ化するルータOS(ネットワークOS)はvyOSです。 そもそもベースイメージが提供されていないOSってどうやってコンテナ化するんだろう?とか調べてたら、すでにやられている方がいました。

VyOS の Docker イメージを作ってみる - higeblog

大まかな流れとしては、

  • docker をインストール
  • overlayroot をインストール
  • ISO をダウンロード
  • ISO をマウント
  • ISO の中身から root パーティションを構築
  • イメージビルド用ディレクトリにコピー
  • イメージビルド用ディレクトリを圧縮
  • Dockerfile を作成
  • docker build

という感じでやればコンテナのベースイメージが作れるようです。コンテナ自身はLinuxカーネルを持つ必要はありませんので、アンインストールしてイメージサイズを減らしたりもしています。

新しいバージョンが使いたかったので、自分でビルドしてみました。 イメージを作るのに使ったスクリプトです。公開されているスクリプトをforkして、ちょこっと変更しました。

mkimage_vyos.sh · GitHub

ビルドしたイメージ

Ubuntu15.04上でやりました。あとは、パッケージ docker.iooverlayroot をインストールしたくらいです。 ビルドしたイメージは、DockerHubで公開しています。

https://hub.docker.com/r/kurochan/vyos/

Repository Description書かないと使い方がわからないですね。。。

起動方法

vyOSはカーネルモジュールが必要なので、通常の起動方法だと、うまく動きません。 特権コンテナとして動かすのと、ホスト側の/lib/modulesをコンテナ内の/lib/modulesにマウントしてあげます。 vyOSはDebian系なので、Ubuntu15.04の上で動かしました。

初回のみdocker imageのpullが必要です。

$ docker pull kurochan/vyos:latest

コンテナを起動するには、

$ docker run -d --privileged -v /lib/modules:/lib/modules kurochan/vyos:latest

と打ちます。

動作確認

container idの取得

container idを取得します。

$ docker ps
CONTAINER ID        IMAGE                  COMMAND             CREATED             STATUS              PORTS               NAMES
de8b263b5332        kurochan/vyos:latest   "/sbin/init"        3 seconds ago       Up 2 seconds                            ecstatic_bhabha

シェルの起動

vbashを起動します。

$ docker exec -it de8b263b5332 /bin/vbash
vbash-4.1#

vyOSユーザでコマンドを実行する必要があるので、シェルを起動した後、 su - vyos でユーザを切り替える必要があります。 あとは、普通のvyOSと同じように使えるはずです!

vbash-4.1# su - vyos
vyos@vyos:~$ configure
[edit]
vyos@vyos# show
WARNING: terminal is not fully functional
 interfaces {URN)
     ethernet eth0 {
         address dhcp
     }
     loopback lo {
     }
 }
 system {
     config-management {
         commit-revisions 20
     }
     console {
         device ttyS0 {
             speed 9600
         }
     }
......

その他

コンテナでvyOSを動かす事ができましたが、カーネルはvyOSのものではなく、Ubuntuのものなので、もしかしたらうまく動かない機能があるかもしれません。今のところうまく動いてくれていますが。 これを使って簡単なネットワークを作ってみたりもしましたので、そのことも別の記事で書いてみようと思います!

LXDでコンテナのライブマイグレーションやってみた

最近自分の周りでDockerの話しか聞かなくて、寂しくなってきたので書いてみました(笑)

以前LXCの非特権コンテナをマイグレーションする記事は書いたのですが、コンテナを止めてtarで固めて移行先で展開するという原始的なものでした。

LXCの非特権コンテナを別ホストに移行する - くろの雑記帳

LXDの登場により、マイグレーション自体コマンド一発でできるようになりましたし、さらに条件付きでライブマイグレーションもできるようになったのでその紹介です。

LXDって?

一言でいうと、

LXD はコンテナの『ハイパーバイザ』であり、LXC の新しいユーザ体験です。

Linux Containers - LXD - イントロダクション

ということですが、もう少し詳しく言うと、 LXDがLinuxコンテナ(LXC)を管理するシステム全体のデーモンとして動いてくれて、REST APIを提供してくれます。

また、コマンドラインインターフェイスとしてlxcというコマンドが用意されています。

環境構築

今回はサーバを2台使います。同じ構成で、

  • Ubuntu Server 15.04
  • CPU 1コア
  • Mem 1GB
  • Disk 8GB

です。

ホスト名はそれぞれ、ip-172-31-29-89ip-172-31-29-90です。ユーザ名はubuntuにしました。

続きを読む

ScalaでSSHハニーポットを作ってみた

グローバルIPを持っているサーバで、sshのポートをデフォルト(22番)のままで運用していると、ログイン失敗のログがたくさん出るので、どんなアクセスが来ているのか見てみたくてSSHハニーポットを作ってみました。

SSHハニーポット

ハニーポットとはわざと不正アクセスを受け入れるおとりのようなものです。手法や傾向の調査に使われる事が多いです。

SSHだとkippoというOSSが有名ですね。昔ハッカージャパンで読んだような記憶があります。 desaster/kippo · GitHub

kippoはsshのログイン情報を保存するだけでなく、ログインさせ、その後そのサーバ内でどのような行動をしたのかのログまで残せたりするのですが、今回はログイン情報のみ保存するものを作りました。

sippo

Scalaで書いてみたので、sippoって名前にしてみました。

sshのアクセスが試行される度に、タイムスタンプ, 送信元IP, 送信元ポート, ユーザ名, パスワードが保存されます。

github.com

個人所有している某サーバに設置してみたのですが、2日で400回くらいアクセスが来ました。(IPアドレスの第1, 2オクテットは伏せておきます)

f:id:kuro_m88:20150727230514p:plain

しばらく置いておいてどんなid / passwordが多いのか集計してみたいですね。

実行方法

ビルド済のjarファイルを置きましたので、javaさえ動く環境だった動くと思います。(MacLinuxでのみ確認)

$ mkdir sippo
$ wget https://github.com/kurochan/sippo/releases/download/v0.1/sippo-0.1-SNAPSHOT.jar
$ java -jar sippo-0.1-SNAPSHOT.jar

これで、10022番ポートでsshハニーポットが起動します。
アクセスログは、実行時のカレントディレクトリ以下のlogs/ssh.logにタブ区切りで保存されます。
また、1日おきにログファイルがローテーションされてgzip圧縮されます。

22番ポートで待ち受けるには

まず、本物のsshdの待ち受けポートは変えておく必要があります。

Linuxであれば、iptablesをつかってポートフォワーディングしてあげるとよいのではないでしょうか。

$ sudo iptables -A PREROUTING -t nat -p tcp --dport 22 -j REDIRECT --to-port 10022

面倒くさい場合のために、一応22番で起動するjarも用意しています。rootで起動する必要がありますが…

Release First Release · kurochan/sippo · GitHub

その他

待ち受けポートの設定とログディレクトリの指定くらいは起動オプションか設定ファイルで指定できるようにしたいですね。

サイバー用語 50本ノック

新卒として入社して2ヶ月ちょっと経ったので、何か書いてみようと思ったので、書いてみました。
今は渋谷でITエンジニアをしています。

どの企業にも文化というものがあって、会社や業界ごとに特色があるんじゃないかと思いますが、その中でも、うちの会社は共通言語というものが特徴的なようです。
共通言語はコミュニケーションを円滑にしてくれる一方、外部の人から見たら何を言っているのかさっぱりわからなかったり、内部の人は当たり前に使っていて、独特なものだということに気づかない場合もあるんじゃないでしょうか。
完全に慣れていないうちの自分が持った印象って大事ですよね。

ということで、入社してから覚えた言葉を50個挙げてみました。(もし解説が間違っていたらやさしく教えてください)
思いついた順番に書いたので、順番に特に意味はありません。
たくさんあるので、テンポよくいきましょう!

1. それでいうと

一番最初に覚えました。「ちなみに」と同義ですが、「ちなみに」と言うより「それでいうと」と言った方が会話にスムーズに入れる不思議な言葉です。

内定者としてバイトをしているときに気がついたら自分も使っていました。

2. ぶち上げ

ぶち上げましょう!

3. 爆上げ

ぶち上げるどころじゃないです。爆上げです。

4. 下からの突き上げ

若い世代が勢い良く突き上げてくるときに使われる事が多いです。

5. グロース

成長のことです。

6. 爆グロ

爆発的グロースの略です。

7. 足元

直近と同義です。

8. 腹落ち

納得が行くことですが、腹落ちと言うことの方が多いです。

「◯◯先輩のお話を聞いてようやく腹落ちしましたよ〜」

9. ダカイギ

打開するための会議です。

10. ダカイゼン

打開 x 改善 = ダカイゼン

余談ですが、「ダカイの間」と「カイゼンの間」という会議室があります。

11. フルコミット

全力で取り組みます。

12. 暗闇の中でジャンプ

暗ジャンと略されたりします。 ameblo.jp

13. スケール

規模と同義です。

14. キラキラ

輝きます。

15. ギラギラ

もっと輝きます。

16. (誰々に) 当てる

案だしなどで、方向性を確認するために、評価をしてくれる人に発表前に案を見せてみて、アドバイスをもらいます。

17. やったります

やってやります!

18. 確度を上げて

より確実なものにします。

19. 目線を上げる

同じような意味で視点という言葉も使われます。

20. 温度感

急ぎなのか、重要なのか、そうだとしてもどれくらいの事なのか。

「そこらへんの温度感把握しておきたいですね」

21. 朝会

「あさかい」と読みます。「ちょうかい」ではないです。

22. 合宿

合宿といっても、どこかへ泊まることもありますし、社内の会議室等を1日貸しきる事もあります。

23. MC FP YT PP

オフィスの略称です。

MC = 渋谷マークシティ, FP = 渋谷ファーストプレイス, YT = 渋谷YTビル, PP = 渋谷プライムプラザ www.cyberagent.co.jp

24. 集中しMAXタイム

最大限集中します。この時間はできるだけそっとしておいてください。

25. 前のめり

やる気の現れです。

26. PS

PS = プロジェクト責任者

27. リラク

リラクゼーションスペースの略。休憩ができるようなスペースです。

28. 勝負所

勝負所を見極めましょう。

29. 今今

今今 = 今

30. ほぼほぼ

ほぼほぼ = ほぼ

31. ギネス

過去最高記録の事です。基本的に社外には非公開だと思います。 ameblo.jp

32. スピード感

IT業界はスピードが大事です。

33. 麻雀

社長が強いです。 「運を支配する」事が大事です。 ameblo.jp

34. 爪痕

自分がそこに存在した証拠を成果等で残します。

35. ◯◯したく。

体言止めです。

思わず「拝承!」と返事したくなりますが、そういう感じではないっぽいです。

「〜をお願いしたく。」

blogs.wankuma.com

36. 息をとめる

踏ん張ります。

「ここは息止めて頑張ろう」

37. 着地

月末や締め切りでの売上や成果のことです。

38. ど真ん中

ど真ん中 = 中間地点

39. ストレッチ

頑張ればここまで伸ばせるだろうという予測。

最近、「着地ど真ん中ストレッチ」という3連コンボな言葉を聞いて衝撃を受けました。

40. 着予

着地予測のことです。

41. ヨミ

予測のことです。

42. ナリ

成り行きのことです。

43. パツる

予定がかなり詰まっていたり、遅れていることです。

44. フレッシュ

Fresh!! 今期のスローガンです。

45. 横展

ヨコ展開の事です。

既存の上手く行ってる施策等を他の分野やプロジェクトにも展開します。

46. ぐいぐい

ぐいぐい行きます!

47. ゴリっと

力強く、一気に推進します。

48. 刺さる

心に突き刺さります。

広告業界だとよく使われる印象があります。

「この広告はユーザに刺さりやすい」

49. 日販

日毎の売上です。

「昨日の日販は〜」

50. 圧倒的

他を寄せ付けません。

圧倒的成長するぞ!

参考

ameblo.jp