ネットワークの勉強とVPN鯖として
購入の経緯
アンケートです!
買うなら— ゆーとし (@yuutosi_hiyuu) 2017年1月20日
というおおざっぱなアンケートの結果Raspberry Piを買う事にしました。
自分でもそろそろLinux関連の勉強も始めないととは思っていたのでちょうどよかったです。
日本製造のRaspberry Piの販売が始まっている
RaspberryPi 3 Model Bの正規販売代理店であるRSコンポーネンツより1個単位での販売が開始されています。
日本製としっかり明記されており、確実感はあります。
お値段もACアダプタとセットなら・・?という価格でした。
ただ土日休業なのと、クレジットカードしか使えないという点を気をつけた方がいいです。
ちなみにVisaデビットは非推奨でしたが使えました。
日本製 Raspberry Pi 3 Model B
土曜に注文して、火曜日に届きました。土日休業だし仕方ないのかもしれません。
配達業者は佐川急便で相変わらずの配送でしたがここ最近は忙しいようです。
裏面にはしっかり「日本製」の文字が。海外販売品も日本語で記述されているのか少し気になります。
一緒に購入したACアダプタは隣と干渉しないように作ってあるタイプのものです。
microUSB端子ですが、+と-しか結線されておらず、また出力も5.1V・2.5AとUSB規格を少々オーバーする設計ですので、他機器に接続するのは辞めた方がいいでしょう。
Pi3はよく電源不足が不具合として出ますが、これだけの出力があればその心配もなさそうです。
技適マークは本体に印字
こういう基板見ると興奮するんですがそれは置いといて
初期のイギリス製ではパッケージに技適マークがあるだけでしたが、流石に日本製となると本体に印字されているようです。
また左上に「Made in Japan」の文字が。ここ最近見る機会が減っていたのでなんか少しうれしいです。
セットアップ開始
その辺に転がっていたA-DATAの32GBmicroSDとLANケーブルを用意して、下記のサイトを参考にしました。
こちらのサイトですと、ディスプレイやキーボードを使用せずにSSHのみでセットアップする方法を丁寧に解説してくださっているのでおすすめです。
SSH接続後はこちらのサイトを参考に各種設定を行いました。
キーボードレイアウトはそもそもSSH接続では必要ありません。
その後、こちらのサイトを参考に各種アップデート。
最新をダウンロードしたはずなのにかなりの量のアップデートがあったのでするべきです。
ただRaspberry Pi本体のファームウェアアップデートは不具合の可能性もあるので、そこまで古いわけで無ければしなくてもいいようです。
あとはデフォルトロケーションを変更し、少しですが日本語表示ができるようにします。
HDMI接続だとフォント関連が厄介ですが、SSHであれば特に問題ありませんでした。
SoftEther VPNを導入する
ようやく本来の目的のVPN構成をしていきます。
LinuxのVPNもあるらしいですが、SoftEtherを利用している記事が多く、事前情報が多かったためそちらを導入することにします。
メインで参考にさせていただいたサイトはこちら。
というかほぼほぼコピペでいけました。
ただ、sudo環境でやる必要があったり、β版のSoftEtherではうまくいかなかったため安定版を利用しました。
エデュタは当初viを利用いましたが、誤入力によるエラーが多発したのでnanoを利用しました。
こちらのサイトも一緒に参考にしました。
自動起動に関しては「chkconfig –add vpnserver」が必要なようです。
あとはWindows上からサイト通りに設定しました。
個人的に変更した設定は暗号化アルゴリズムをDHE-RSA-AES256-SHAに変更したぐらいです。
ここまで情報があると、自力で設定する項目がないぐらいですね…先人達に感謝です。
ポート解放設定
L2TP/IPsecを今回は利用するので利用するポートを開放していきます。
PPTPとは違ってソフトバンク光の糞ルーターでも利用できるのがいいですね!!
解放するのは
- UDP:500(IPsecの鍵交換に利用されるポート)
- UDP:4500(IPsecのメイン通信ポート)
- SSL-VPNやL2TPの応答用ポート(1024~65535のいずれか)
転送先IPアドレスはもちろんRaspberryPiのアドレスです。
ちなみにポートの利用用途に関しては曖昧なのでもうちょい勉強します…
間違ってたら教えてください…
「リスナーポート一つでいいなら443塞ぐか!?」ってやったら通信速度ががた落ちしたのでよくわからないです。
ちなみに小ネタですが、IPv4の場合、NAPTでこういった作業が必要ですがIPv6の場合はローカルでもそれぞれにグローバルIPアドレスが振られるため、実質ノーガードとなります。
なのでIPv6を構成している方は、まぁ可能性は低いとは思いますがufw等でRaspberry Pi上でブロックできるような設定をしておいたほうがいいかもしれません。
追記:ポート番号について
少し詳しい方に効いたところ、SoftEtherは「SSL-VPN」が一部利用されるのではないかとの事でした。
SSL-VPNとはhttps通信(443)を利用してVPNの構築する技術です。
これを利用することで、ポート開放の手間が省けます。
しかし、SSL-VPNはSoftEtherのClientで使えるだけであって、WindowsやAndroidではサポートされていません。
というか、SSL-VPNは正確にはL2TP/IPsecではないです。
L2TP/IPsecを利用する場合は上記にあるように50ポートを解放させる必要があります。
443は本来リスナーポートとして設定されているので、他ポートを利用する事も可能です。
追記:ポート番号とL2TPの関連性について
ミスがあったため修正します。申し訳ありません。
まずSoftEtherが提供するL2TP/IPsecは本来の物とは少し異なるようです。
しかしAndroidやiPhone、WindowsのネイティブL2TP/IPsecクライアントから問題なく接続が可能なため今回は説明を省きます。
SoftEtherでL2TP/IPsecを構築する場合、UDP500とUDP4500さえ空いていれば接続を確立することが可能なようです。
ただSoftEtherの設定画面に入るには他の何かしらポートを開放させて置かなければならないので必然的に3ポートは明けた方がいいです。
3ポート目はSoftEtherの設定画面への接続以外にSSL通信を利用したVPN接続にも利用できます。
これはSoftEtherクライアントを利用して接続を確立するVPN方式で、SSL通信を利用するためファイアウォールでVPNが防がれている環境でも接続が可能になるケースが多いです。
443ポートが初期設定として割り当てられているのは、443はhttps通信で使うポートでありどのインターネット環境でも防がれている可能性はありません。
ただ443ポートや992ポート(TELNET用)はポートアタックの被害にも合いやすいポートでもあります。
そのため個人的には1024~65535の適当なポートを利用するのが比較的安全ではないかと考えます。
DDNS設定
SoftEtherが提供しているアドレスでもいいんですが、自分はmydnsのDDNSがあったためそちらを利用しました。
ただ、メールによるIPアドレス通知を利用していたため、Raspberry Pi側で通知できるように設定しなおしました。
自動実行される表みたいなものである「cron」を利用する方式です。
mydnsでは、URLにアクセスするだけで設定してくれる便利機能があります。
ただ使用するコマンドが「wget」という通常はダウンロードに利用するもののため、
ダウンロードしたデータを「/dev/null」通称ゴミ箱に投げます。
私の環境はそこまで頻繁にIPアドレスの変化があるわけではないので
「00 * * * * wget -q -O /dev/null http://(mydns.jp のマスターID):(mydns.jp のパスワード)@www.mydns.jp/login.html」
と、一時間ごとに更新を行う設定にしておきました。
接続してみる
Androidで接続してみたところ、問題なく接続ができました。
また、速度低下も最小限となっており、小規模インターネットでは高性能VPNルーターのそれを代わりないかもしれません。
Windowsでの接続は、どうやらSoftEtherの専用クライアントを利用したほうが性能や暗号化が高い模様です。
100Mbps回線の実家からVPN接続を行ったところ、上り60Mbps、下り80Mbps出ました。
もっとも、Raspberry Pi自体のCPU使用率はだいたい2割~4割程度と決して高くなく、まだまだもてあましているように思います。
Raspberry Pi自体が100MbpsのNICですが、やはり個人的にはそのフルスピードでればいいなとちょっと思います。
その他入れた機能
リソースに余裕があることがわかったので、少し色々入れてみました。
できれば別アカウントから呟かせたかったんですが、Twitter側が規制をかけたため、仕方なく本垢から@tosに向けてます。
cronは「00 0,4,6,9,12,14,17,19,21,23 * * * python /usr/local/raspi_bot.py」という設定。
これで「0時、4時、6時、9時、12時、14時、17時、19時、21時、23時」に呟く設定となります。
この程度であれば規制やフォロワーからの苦情が来ることはないでしょう。
こちらの「mpstatで各コアのCPU使用率を見てみる」も導入してみました。
これで簡単にCPU使用率をみることができます。
Raspberry Piは事前情報が多くて助かる
けど、自分の身になっているかは怪しい。というのが感想です。
VPN導入に関しても、ほとんどの事柄はネットに既に出ており、その他やりたいことも既にどこかしらで出ています。
こうなってくると「学習用コンピュータ」という事ではなくなってしまうのではないか?と思ってしまいます。
ただVPNサーバを構築できたのは便利なのは確かです。
実際自分で導入してみないとわからないこともあることはあります。(エデュタの使い方とか)
まぁ何もしないよりは経験になっていると信じたいものです。