Raspberry PiのUSB 3Gモデムから自宅のOpenVPNサーバへ接続する

Raspberry Pi 3にUSB 3Gモデムを付けて、どこでもネット接続できるようにしました。
このRaspberry Piと自宅のVPNサーバをつないでRaspberry Piがどこにあっても接続できるようにします。

自宅側はASUSルータのOpenVPNサーバーを使ってみます。



Raspberry PiにUSB 3Gモデムを付けてどこでもネット接続できるようになりました。
この時少し困る事があります。ほとんどのMVNOのSIMサービスはプライベートIPアドレスを割り当てます。そのため、Raspberry Pi 3からインターネット上にあるサーバへアクセスする事はできますが、インターネット側からRaspberry Piへアクセスする事はできません。Raspberry PiでWebサーバーを動かしたとしてもアクセスできないのです。
つまりRaspberry Piを離れた場所に置いてしまうとSSH接続もできません。USB 3GモデムでRaspberry Piがインターネットにつながっていても手出しはできなくなってしまいます。

これを回避するには、グローバルIPアドレスを割り振ってくれるMVNOを使うのも手です。


固定IPのところは高額でしょうから、ダイナミックDNSサービスも別に使う必要があるでしょう。

私はIIJmioを使っているのでグローバルIPアドレスではありません。そんな時はどうするのが良いかなぁ・・・。

仕方ないので自宅へ一度つないでしまう事にしました。Raspberry PiにVPNクライアントをインストールし自宅にVPNサーバを立て、自宅LANへ接続します。そうすれば自宅のネットとRaspberry Piは自由にアクセスできます。

自宅にVPNサーバを立てるには自宅のネットワークがグローバルIPアドレスでなければなりません。ケーブルTVのサービスだとグローバルIPアドレスをくれない業者と契約している所も多いです。これからマンションを買う方は絶対にチェックすべき点ですね。

それでは、この方針で自宅あるいはオフィスとRaspberry Piを接続してみましょう。

VPN環境を作る

VPNを使って接続するには、自宅にVPNサーバ、Raspberry PiにVPNクライアントが必要です。
Raspberry PiをVPNサーバーにしようという記事を多く見かけます。今回は逆です。Raspberry Piは家の外に置きたいのでVPNクライアントを動かします。

VPNサーバーを作る

VPNサーバーを立てるのはそこそこ面倒な手順が多いです。パソコンにVPNサーバを立ててもルータの設定をしないと意味がありません。ただでさえ少ない対象読者がさらに狭まります。

一番簡単な方法はVPN機能を搭載したルータを使う事です。最近の少し高めのルータならすでに搭載されているかもしれません。

VPNと言っても何やら種類があるようです。PPTP, L2TP/IPsec、OpenVPN、SoftEther等々
何を使えば良いのでしょうか。PPTPは暗号が弱いので最近は使わないようになっています。
いずれにせよ、ルータに搭載されているものを使うのが良いでしょう。PPTPが使える製品が多いでしょう。少し高価なものならL2TPかOpenVPNが使えると思います。

我が家のASUSルータではOpenVPNが使えますのでOpenVPNで設定することにします。ルータにVPNサーバ機能が搭載されておらずパソコンでVPNサーバを作るにしてもOpenVPNの情報なら豊富にあるでしょう。



ASUSのルータのVPN設定画面を開きます。
VPNサーバータブを選び、OpenVPNをクリックして設定画面を開きます。


OpenVPNサーバーを有効にします。
次に接続時に使うアカウントを設定します。下の方にユーザー名とパスワードを入れるところがあります。ここで入れるユーザー名とパスワードはクライアントが接続する時に使います。セキュリティを保つため類推されにくい8文字以上の長いパスワードを使いましょう。
ユーザー名とパスワードを入れたら追加ボタンを押して追加します。
最後に適用ボタンを押してルータに反映させます。

そしてクライアントで使う設定ファイルをエクスポートします。エクスポートボタンがありますので押してください。このVPNサーバーへ接続するための設定ファイルが取得できます。
エクスポートしたファイルはRaspberry Piで使います。ファイル名は"client.ovpn"となっていると思います。Raspberry Piへどうにかしてコピーしてください。

Raspberry PiにOpenVPNクライアントをインストールする

次はRaspberry Piの設定です。
Raspberry PiでVPNの設定を検索するとVPNサーバーを作る方法が多く出てきます。クライアントでいいんだけど・・・と探します。

こちらのサイトを参考にしてみました。
Install OpenVPN on Debian Jessie
RaspbianではありませんがDebian Jessieなのでほぼ同じはずです。サーバーとクライアント両方の設定の仕方が書いてあります。今回は下の方のクライアントの設定だけを行います。
サーバーの方法に比べてクライアントは簡単に動かせそうですね。

それではやってみましょう。まずはリポジトリのアップデートをします。
sudo apt-get update
sudo apt-get upgrade
その後OpenVPNをインストールします。
sudo apt-get install openvpn
たったこれだけでインストールは終わります。

クライアントで一番重要なのはVPNサーバーで作った設定ファイルを正しく読み込むことです。
サーバーで作ったclient.ovpnをコピーしてホームディレクトリなどに置いておきます。

それではサーバーへ接続してみましょう。
sudo openvpn --config client.ovpn
実行するとユーザー名とパスワードを聞かれます。サーバーで設定したIDを入れましょう。
正しく動いたでしょうか?
ip a
と入れて次のようなインターフェースが表示されれば成功です。
4: tun0:  mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0
       valid_lft forever preferred_lft forever

VPNサーバーへ接続した後、何事もないかのようにコマンドを入れる書き方をしました。ですがユーザー名とパスワードを入れた直後にSSH接続あるいはリモートデスクトップ接続が切断された方もいるでしょう。

OpenVPNサーバの設定にもよりますが、接続時にネットトラフィックをすべてVPN経由にする事ができます。ASUSのルータではデフォルトでそのような設定になっているようです。

Raspberry Piから見るとVPN接続が確立された時点からネットの出入り口はVPNサーバーへと切り替わります。有線LANやWiFi経由では通信できなくなります。Raspberry Piへ接続していた端末はもう通信できなくなります。
えっ・・・どうしたらいいの?

まずは確実に接続できるようになったルータ側から接続を試みましょう。自宅LANのパソコンからVPN接続したRaspberry Piへ接続します。VPN接続が正しくできたならVPN接続のIPアドレスでSSH接続あるいはリモートデスクトップ接続を試みるのが良いでしょう。
あるいはRaspberry PiのWiFiをホットスポットにしておく事をお薦めします。このホットスポットに接続したパソコンや端末で操作しましょう。
外出時にRaspberry Pi 3を起動すると自動的にホットスポットになるスクリプトを作りました(RPi3_Switchable_HOTSPOT)

そして、先のopenvpnコマンドではopenvpnサービスがバックグラウンドで実行されません。そのためコマンドを入れたセッションは使えなくなります。SSH接続の方はもう一つのセッションを作ってその他のコマンドを入れる必要があります。リモートデスクトップ接続ならターミナル画面をもう一つ表示させましょう。
ちょっと不便ですね。VPN接続ができたら通信のルート設定とか調整した方が良いでしょう。
こちらも参考になると思います。
OpenVPN configuration for Raspberry PI / ibVPN
openvpnをバックグラウンドで動かすには--daemonを追加すれば良いようです。
sudo openvpn --daemon --cd /etc/openvpn --config ~/client.ovpn
client.ovpnは/etc/openvpnへ移動させた方が良いかもしれません。
自動起動やiptables設定の例もあります。

まとめ

基本的なOpenVPN接続はできるようになりました。
LAN、WiFi、3GモデムとVPN接続といろいろな組み合わせパターンができてしまい交通整理が難しくなってしまいました。まだどうしたら良いか考えがまとまりません。

ルータ側設定で便利な項目がまだありそうです。自宅のグローバルIPアドレスでリダイレクトすればRPiのサーバサービスを動かすこともできるはずです。
ASUSルータはお手軽設定で確実な動作ができ、もう少し詳細な設定もできるのが良い所です。
のんびり勉強していきます。

今回のVPN接続が使えれば離れた場所に置いたRaspberry Piと簡単に接続できるようになります。グローバルIPアドレスが使えないSIMカードを使っていてもサーバプログラムを動かす意味が出てきます。IoTごっこもはかどるでしょう。

さぁ、何に使いましょうか・・・?


コメント

最近のコメント

Threaded Recent Comments will be here.