shuto_log.aep

ブログ名変わりました。自分がやったことなどを備忘録的な感じで残していこうと思います。

Raspberry Piで自宅ウェブサーバ立て直した話

以前初めてウェブサーバ建ててそのままメンテナンスしてなさ過ぎて内部ディレクトリとかぐっちゃぐちゃになっていたRaspberry Piを再インストールしました。

VPSでHP公開してるのにラズパイでウェブサーバ建て直した理由(読み飛ばし推奨)

shutosg.net取ってConoHaのVPS借りてそっちでHP持っているのになぜラズパイでもウェブサーバ建て直す必要があったのかと言うと、以前作って今もまだ使っている名刺にshutosg.dip.jpのurlを記載しているから。shutosg.netのHPさえ生きていれば実質的には良いんですけど、名刺にも書いてあるしshutosg.dip.jpに接続したらせめてshutosg.netに繋がるようにしたかったのです。
備忘録的な意味合いが強いのであまり丁寧に書いていません。vimの使い方とか省略してます。

やったこと

  • Raspbianのインストール
  • ラズパイの初期設定もろもろ
  • apache2でウェブサーバ構築(サーバ設定もろもろ)
  • 無料の独自ドメイン再取得(DNSの設定もろもろ)

imgの焼き込み

  • OSはRaspbian Jessie、一番新しいやつ。ダウンロード長いのでTorrentが便利。これぞTorrentの正しい使い方。
  • 焼き込みはddコマンドでやったけど1時間半くらいかかってめっちゃ長かった。
  • 次回はRaspi SD Card Builder使ったほうが良いかも。前回これ使った記憶あるし。

インストール後

  • SDカード挿して有線LAN繋いで起動して即ssh接続。

Mac

$ nmap -sP 192.168.1.0/24

とかでLAN内のオンラインなIPが見れるので、ラズパイの起動前後で増えたIPがラズパイのIP。
環境によってはLANのIPが192.168.11.Xだったり192.168.42.Xだったりするらしい。LANのIPはifconfigとかで確認できる。

  • 画面とキーボード繋いでない。
  • 有線なら初期設定でネットワーク繋がるっぽくて感動。

初期設定

ユーザ設定

面倒くさかったので初期設定のまま(本当は良くないのでuseraddとかすべき)。その代わりリモートログインは公開鍵認証以外拒否設定(後述)。
以前きちんとやった時は屋根裏Linux読んで設定した。ラズパイ初めて使った時とてもお世話になりました。
wings2fly.jp

パッケージのアップデート

まず

$ apt-get update

でapg-getを更新して、

$ apt-get upgrade

でプリインストールパッケージを更新。これも長い。10分くらい放置。
あと最低限必要なものとしてvimいれた。

$ apt-get install vim

ラズパイ自体の初期設定

普通最初に起動したら画面が出てくるらしいけど今回はいきなりsshログインしたから出てこなかった。

$ raspi-config

美味しくいただく Raspberry Pi:初期設定(raspi-config)とか参考に。
リモートなのでキーボードの設定は不要だった。終わったら再起動。

sshログイン設定

shutosg.hatenadiary.com
とか参考に(手前味噌)自分のMacの公開鍵をscpしてauthorized_keysに書き写したり。
ユーザ設定が初期のままなのでパスワード認証を拒否に設定するのを忘れてはいけない。
設定変えたら

$ systemctl restart sshd

でサービスを再起動。

Raspberry PiのIPアドレスの固定

http://www.hiramine.com/physicalcomputing/raspberrypi/setup_staticip.html を参考に設定したけど、合ってるのか分からなかった。(今のところ問題なく動いている)

Apacheの導入

ウェブサーバアプリケーションのApacheを入れる。

$ apt-get install apache2

これもちょっと長い。5分くらい待つ。
インストールできたらhttp://<ラズパイのIP>で繋がるはず。動かなかったらapache2が死んでるかも。

$ systemctl status apache2

とかでapache2がきちんと動いているか確認。
それから一応apache2の自動起動がオンになっているか確認。

$ ls /etc/rc2.d/

自動起動リスト的なのが見れる。「S02apache2」というファイルがあればOK。(apache2にはなぜかsystemctl enableが使えない。)
apache2の設定とかそのままだけどいじる場合は
usicolog.nomaki.jp
とか参照。

ルータの設定

この辺は詳しく書かないので屋根裏Linuxとか参考に。。。(実際問題、無線LANルータによって設定のしかたは様々)
ウェブブラウザから「192.168.1.1」とかに接続してベーシック認証でユーザ名とパスワード入れてログインするとルータの設定ページに繋がる。(LANのIP、ログイン情報は各自確認して下さい)

セキュリティ(パケットフィルタリング)

フィルタリングの設定は「セキュリティ>IPフィルター」というページから。(うちの場合)

静的NAT(ポート変換、アドレス変換とも呼ばれる)

ゲーム&アプリという項目にあった。「外部ネットワークからの、sshのポートまたは80番ポート宛への接続は、ラズパイのローカルIP宛である」と接続先を変換するように設定する。
具体的には外部ネットワークから届いたパケットの宛名を、「グローバルIPアドレスsshのポート番号or80番ポート」→「ラズパイのローカルIP+ポート番号はそのまま」と変換する。この辺りをきちんと理解するにはパソコンがインターネットに繋がる仕組みを勉強しないといけないかもしれません。(特に名前解決、IPマスカレード、静的NATとかについて調べるとよいとおもいます)

無料独自ドメインの設定

無料の独自ドメインの取得

ieserver使って無料の独自ドメインshutosg.dip.jpを取得。取得する時、必ず自宅のLAN(というかラズパイサーバと同じLAN環境)からインターネットにつなぐこと。(理由は後述)
ieserver.net
ラズパイと同じLANから上記サイトに接続してIPを登録(独自ドメインを取得)。
ieserverでは独自ドメインを取得すると同時にその時点での接続IPがダイナミックDNSに登録される仕組みのようです。(これがラズパイと同じLANから接続しなきゃいけない理由)

ダイナミックDNS登録IPの自動更新についての設定

自宅のグローバルIPアドレスをieserverのDNSに登録し直すスクリプトを用意して、それをcronデーモンで10分ごとに実行する。

スクリプトの準備

スクリプトは有志で作られたものがあるのでそれを活用する。
http://ieserver.net/ddns-update.txt
ラズパイで

$ mkdir /usr/local/ddns/

して新たにディレクトリを作成し、

$ vim /usr/local/ddns/ddns-update.pl

して先ほどのスクリプトをコピペ。
ログイン情報を書き換えて保存。

デーモン(cron)の設定

Unixにおける常駐プロセスのことをデーモンと呼びますが、その一種として特定の時間になると特定のプログラムを実行するcronというものがあります。(余談ですが、ウェブサーバアプリケーションのapache2も常駐してウェブページを提供するのでデーモンの一種であるといえます。)
以下本題。
cronは、/etc/crontabというファイルに設定を記述すると、決められた時間に決められたスクリプトを実行できる。

$ vim /etc/crontab

して最後の行に

5,15,25,35,45,55 * * * * root perl /usr/local/ddns/ddns-update.pl

を追加する。
最後に

$ systemctl restart cron

でcronを再起動して設定を反映させる。
きちんと設定ができていると、毎時5分から10分ごとにddns-update.plを実行する。ddns-update.plの内容は下記の通り。

  1. 現在のグローバルIPアドレスを確認する。
  2. /root/current_ipに保存されている以前取得したグローバルIPアドレスを、今確認したIPと照らしあわせて、同じなら何もせず終了。
  3. 変わっていたらieserverのダイナミックDNSに登録されているIPを更新する。
  4. IPを更新したら/root/ip_update.logにログを残して終了。

なので例えば今の時刻が6時50分だとしたら、6時56分になったら

$ cat /root/ip_update.log

してip_update.logの中身を確認してみるとよい。きちんと動作していれば初回の変更の記録が

Thu Jan  7 06:55:26 2016 shutosg.dip.jp Updated 0.0.0.0 to XXX.XXX.XXX.XXX

のように記録されているのが確認できる。そもそもip_update.logが無いのはきちんと動作していない証拠なので、設定をみなおす。
これでshutosg.dip.jpに接続すると、きちんとうちのラズパイに繋がってウェブサーバとして使える。
初期設定では/var/www/html/index.htmlが表示されるのでここのディレクトリ以下を好きにいじってウェブサーバの完成!

おわりに

ラズパイの初期設定忘れまくってたので、思い出すよいきっかけになった。
せっかくConoHaを契約しているので今度はConoHaのDNSAPIを叩くスクリプト書いてDDNSとして使ってみたい。
未だにLANからはshutosg.dip.jp接続できないので、内部用DNS建てて内部からも接続できるようにしたい。(そもそも同じLAN内にあるウェブサーバにドメインで接続出来ない話は ローカルからドメイン名でアクセス出来ない! が参考になった。)