Raspberry piをはじめとしたシングルボードコンピューターが流行して、趣味や学習目的で自家サーバーを運用することが身近なことになりました。
wordpressをインストールしてブログを公開したり、webアプリケーションを運営したりと最近のシングルボードコンピューターのスペックでしたら、いろんなことを低いランニングコストで試すことができます。
ただ、自家サーバーを構築して、自宅のipを公開するということは簡単にできるようになっても、運用するとなると簡単には行かない問題が残っています。
それは、
- raspberry pi が乗っ取られてしまったとき、LAN内の機器から情報が盗まれてしまう
- 自宅のネットワークに固定ipが割り当てられてないとアドレスを公開できない(公開しても変わってしまう)
ということです。
ということで、自家サーバーを運用するうえで引っかかりやすいこれらの問題を、前者は家庭用ルータを2つ直列につないで自宅内に2つのLANを作ることで、後者は自宅のグローバルipアドレスを無料のDDNSサーバーを使って自動的にドメインと紐づけることでお手軽に解決したいと思います。
そもそも、自家サーバーなんてないよーという方はこちらをどうぞ。夢の自家サーバーがrasberry piで簡単に作成できます。
raspberry piでお手軽自家サーバー webサーバー編
#ルーター2つで自家サーバーと自宅の機器のネットワークを切り分ける
コンピューターをサーバーとしてネットワークに公開する一番のネックは、もしサーバーが不正にログインされると他の機器まで危険にさらされることだと思います。
セキュリティー対策を万全にしておけば問題ないのかもしれませんが、自分を含めて試しにサーバーを立ててみようという人にはそこら辺のことに詳しい人はなかなかいなくて、多くの人が見切り発車でやってみて勉強しながら徐々に対策を講じていくという流れになるのではないでしょうか。
そうなってくると、もしもの時のために自宅のネットワーク内にサーバーから他のPCやスマホなどに影響が及ばないための仕組みを作ることが必要になります(そもそも、初心者が自宅のネットワークを公開することが変なのか・・・)。
そこで、LAN内にルーターを追加して新しくセキュアなネットワークを構築してみようと思います。つまり、サーバーが存在するLANとは切り離されたLANを作ることで、新しいLANに接続されている大切な情報が入っているPCからするとまるで自家サーバーがWANにあるかのように見えるわけです(ちょっと違いますがDMZ的なノリです)。
##ネットワークの概要
ネットワークの概要はこちら。これで、インターネットを通してアクセスできて、自宅の他の機器からはアクセスできるけど、サーバーから他のPCへの通信は無理という状況を作れます。
書いてあるアドレス名はあくまで例です。
ポイントは二つルーターを使うことです。家庭用のルータにDMZの設定があるようですが、DMZに設定したネットワークから他のネットワークにアクセスできてしまうようで、一般的なDMZのような使い方はできないみたいです。さらに市販の安価なルーターにはLANを複数構成する機能はありませんし、あらたにスイッチングハブなどの機器を買うのもお金がかかってしまいます。
でしたら、2、3000円のルータを買ってきて新しくネットワークを構成したほうが簡単だと思います。
###設定例
設定をまとめると次のようになります。
項目 | 設定事項 |
---|---|
ルーター1の外部アドレス | グローバルipアドレス |
ルーター1の内部アドレス | 192.168.1.1 |
サーバーのアドレス | 192.168.1.2 |
ルーター2の外部アドレス | 192.168.1.3 |
ルーター2の内部アドレス | 192.168.2.1 |
作業用PCのアドレス | 192.168.2.2 |
※あくまで設定例です。
これに加え、ルーター1の設定で22番ポート(SSH)や80番ポート(html)のポート変換して192.168.1.2のサーバーへ流れるように設定します。
こうすると、LAN 2からはLAN 1の機器が見えますが、LAN 1からはLAN 2の機器が見えなくなります。pingも通りません。
###公開しない機器はすべてルーター2に接続する
あやまってルーター1に機器を接続させてしまうと意味がないので、ルーター1への接続に関する設定はすべて削除しましょう。最近は何でも間でもインターネットにつながってしまうので、スマホはもちろんテレビやゲーム機の設定もチェックしてください。
こうすることによってたとえサーバーにアクセスされたとしても簡単にはスマホや他のPCにアクセスされなくなりました。こうやったとしても被害にあるときはあんでしょうけど、リスク的にはポートを解放していない時と同じくらいになったのではないでしょうか。
これでネットワークのセキュリティに関しての対策は終了です。ここからはDDNSサーバーを使って定期的に変わるグローバルipアドレスを固定のドメインに紐づけます。
#DDNSサーバーによって自宅の動的アドレスをドメインに紐づける
DDNS(動的DNS)サーバーは普通のDNSサーバーと違って、変化するipアドレスを定期的に更新することで常に同じドメインを使用することができるサービスです。
そのために、自家サーバー側からDDNSサーバーに「現在のipアドレスはこれです」と通知する必要があります(自動で行います)。
無料で使えるDDNSサーバーにはieServerやmyDNS、No-IPなどがありますが、機能的にmyDNSがおすすめです。ということで今回はmyDNSを使います。
##myDNSのアカウントの設定
###アカウント登録
まずmydns.jpにアクセスします。
ヘッダーのJOIN USからアカウント登録してください。
特に躓くところはないと思います。CHECKを押すと確認画面に飛ぶので内容を確認してOKを選択。
登録が完了すれば登録したメールアドレスにログインのためのIDとパスワードが送られてきます。
###ドメインの登録
自宅のipアドレスに紐づけるドメインを決めます。
ホームの右上のフォームに先ほどメールで送られてきたIDとパスワードを入力してログインします。
DOMAIN INFOからドメインの登録画面へ
いろいろ設定項目がありますが、記入するのは二つでOKでまずDOMAINに任意のドメインを記入します。
ドメインの決め方は
???.mydns.jp
???.mydns.bz
???.mydns.vc
???.mydns.tw
???.0am.jp
???.0g0.jp
???.0j0.jp
???.0t0.jp
???.pgw.jp
???.wjg.jp
???.server-on.net
???.live-on.net
???.keyword-on.net
???.dix.asia(NEW!)
???.daemon.asia(NEW!)
の中から一つ選び???のところに自分の好きな文字列をあてます。例えばmydns.jp
を選んでqiita
という文字と組み合わせたい場合は、ドメインはqiita.mydns.jp
になります。
もう一つHOSTNAMEですが*
とだけ入力しておいて下さい(ここの設定はよくわかってないです)。
CHECKを押して確認画面でOKをクリックすればドメインの登録は終了です。
##DDNSサーバーに自宅のipを登録する
最後のステップです。
手動でやるのも簡単にできてログイン後の画面からIP ADDRESS DIRECTを選択すればいいんですが、勝手に変わっていくグローバルipをいちいち手動で登録するのはたいへなので自動化します。
wget -O - --http-user=[ユーザーID] --http-password=[パスワード] http://www.mydns.jp/login.html
[ユーザーID]と[パスワード]をメールで送られてきたものに変更して、ターミナルで実行すれば現在のipアドレスを登録することができます。
試しに一度実行してください。
html>
<head>
<title>Free Dynamic DNS (DDNS) for Home Server and VPS etc | MyDNS.JP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<LINK href="./site.css" rel=stylesheet type=text/css>
</head>
<BODY BGCOLOR="#FFFFFF"
TEXT="#304040"
leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"
>
Login and IP address notify OK.<BR>
login_status = 1.<BR>
<BR>
<DT>MASTERID :</DT><DD>mydns633161</DD>
<DT>REMOTE ADDRESS:</DT><DD>180.57.235.203</DD>
<DT>ACCESS DAYTIME:</DT><DD>2020/05/14 14:45:20 UTC</DD>
<DT>SERVER ADDRESS:</DT><DD>168.235.75.38</DD>
<BR>
</body>
</html>
- [ <=> ] 618 --.-KB/s 時間 0s
2020-05-14 23:45:20 (9.05 MB/s) - stdout へ出力しました [618]
このようなHTML風の結果が返ってきたら成功です。
毎時実行されるようにcronに登録しておきます。
crontab -e
で上のコマンドを登録します。初期実行時はエディタを聞かれるかもしれませんが、適当に選んでください。
グローバルipが変更された場合DDNSサーバーに登録されるまで自家サーバーに外からアクセスできなくなってしまいます。なので更新頻度は細かい方がいいです。運営サイトには1時間と書かれているので設定ファイルの末尾に
45 * * * * wget -O - --http-user=[ユーザーID] --http-password=[パスワード] http://www.mydns.jp/login.html
と追加して毎時wget
が実行されるように設定してください(毎時45分に更新されます)。
一応ちゃんと変更されるかチェックするためにmyDNS.jpのログイン画面からLOG OUTを選択して更新しているか確認することができます。実行されていればIPv4 UPDATE
とログが残っていると思います。一日一回しか記録が残らないので一日以上待ってください。
ちゃんとcronによってwget
が実行されたか気になる人はサーバー側のログを確認することもできます。
以上でこの記事の内容は終了です。お疲れ様でした。ここまでして自家サーバーは使い勝手がよくなると思います。そして、せっかくここまでやったのだからサーバーとして使い倒したいですね。
ありがとうございました。