こんにちは。
家に常時稼働しているラズパイを使って、外出時にスマホやPCからローカルネットワークにアクセスする方法を紹介します。
仮想プライベートネットワーク(VPN)を構築することで、外出先から家のPCをWOLしたり、NextCloudのファイルにアクセスできます。
さらに、公衆WiFiに接続する場合にVPNを通すことで通信内容を秘匿化でき、セキュリティを向上できます。私は出張時にビジネスホテルからVPNを通して録画したテレビ番組を見たりしています。(このときに謎の満足感を覚えます)
ポート開放
まずは、外部からのアクセスを受け入れるために、ポートを開放します。PiVPNのデフォルトポートは51820
です。
お使いのルーターによって設定方法は異なりますので、メーカーのサイトや説明書を参考にしてください。
参考までに、NURO光のONUのSGP200Wの設定方法は以下です。
転送ルール > ポートマッピング設定から新規作成をクリックします。
プロトコルをTCP/UDP
、外部ポート番号、内部ポート番号を51820
にして作成します。作成したら有効にしてください。
DuckDNSに登録
Duck DNSは無料で使える動的DNSサービスです。簡単に言えば動的IPアドレスを名前解決して任意のURLに置き換えてくれます。
無料で使えるためか詐欺サイトに悪用されており、Duck DNS
の検索候補が物騒ですが、サービス自体は危険ではありませんので、ご安心ください。
以下のサイトにアクセスします。
SNS連携でログインします。
画面中央に、任意の文字列を入れてadd domain
をクリックします。今回は例としてkuimalblog
と入れました。アドレスはkuimalblog.duckdns.org
となります。
すると、domainsに追加されます。一旦ここまでにして次はPiVPNをインストールします。このページは開いたままにしておいてください。
PiVPNをインストール
ラズパイにPiVPNをインストールするために以下のコマンドを実行します。
curl -L https://install.pivpn.io | bash
上記のインストーラーが起動します。エンターキーを押します。
静的アドレスが必要だよと教えてくれます。エンターキーを押します。
接続するインターフェースを選びます。wlan0(無線LAN)を選びました。
IPv6の接続方法を聞かれるので、先程と同様のインターフェースを選びます。
静的アドレスを設定するか聞かれるので、Yes
を選択します。
ローカルユーザーを選びます。
新しい方式のWireGuardを選びます。
ポート番号は開放した番号にしましょう。(私はデフォルトにしました)
念を押されますので、Yesを選択します。
DNSプロバイダを聞かれますので、Googleを選択します。
public IPかpublic DNSかを聞かれるので、public DNSを選びます。(public IPは通常、適宜変わります)
DNSサーバー名を聞かれるので、先程DuckDNSで作成したURLを打ち込みます。今回の例ではkuimalblog.duckdns.org
でした。
念押しされますので、Yesを選択します。
暗号鍵が作成されました。
再起動を推奨されますが、一旦OKを選択します。
セキュリティパッチを当てるか聞かれるのでYesを選択します。
インストールが完了したら、次はプロファイルを作成します。
PiVPNを適用させるために、一旦再起動しましょう。
再起動したら、バーチャルブリッジの/etc/wireguard/wg0.conf
を編集します。
sudo vim /etc/wireguard/wg0.conf
wg0.confの[Interface]に以下を追加します。
有線接続の場合はwlan0
をeth0
に変更してください。
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE; iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE; iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -j MASQUERADE
上記のようになればOKです。
編集したら、以下のコマンドでサービスを再起動します。
sudo systemctl restart wg-quick@wg0
プロファイルの作成
VPNに接続するためのプロファイルを作成するため、以下のコマンドを実行します。
pivpn add
わかりやすい名前をつけましょう。今回はbanana
としました。
ちなみに、pivpn -qr
と打てばQRコードが発行されて、簡単にスマホをセットアップできるそうですが成功した試しがないので、プロファイルをコピーする方法を使います。
プロファイルはホームディレクトリのconfigs配下に保存されます。以下のコマンドを実行します。
cd ~/configs
ls
すると.confのファイルが確認できるはずです。
cat
コマンドで中身を確認しましょう。この中身は機密情報ですので取り扱いには注意してください。
次に、プロファイルをPCにコピーしてください。SCPコマンドやSambaを使う手がありますが、Windowsのデスクトップにメモ帳を作成し、catの出力結果を貼り付けたほうが楽かもしれません。
これでPiVPNのセットアップは完了です。
Duck DNSをセットアップする
Duck DNSのスクリプトをラズパイにインストールします。ipアドレスは固定化しない限り、動的に変わってしまうため随時Duck DNSにipアドレスを通知する必要があります。
Duck DNSの公式サイトの上部にあるinstallをクリックします。
Operating Systemsからpiを選択して、作成したドメインを選びましょう。
すると、手順を丁寧に解説してくれます。
以下のコマンドを実行してください。
cd
mkdir duckdns
cd duckdns
vi duck.sh
duck.shを以下のように編集します。[token]は表示されているトークンを入れてください。
echo url="https://www.duckdns.org/update?domains=[token]&ip=" | curl -k -o ~/duckdns/duck.log -K -
保存したら、以下のコマンドを実行します。
chmod 700 duck.sh
crontab -e
cronは以下のように編集します。公式サイトでは5分おきになっていますが、実行頻度は30分程度で十分だと思います。
*/30 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
cronの編集が終了したら、以下のコマンドでテストします。
./duck.sh
cat duck.log
ログファイルがOK
となっていれば正常です。
PiVPNに接続する
いよいよWireGuardを使ってPiVPNに接続します。
WireGuardのクライアントは、Windows、Mac、Android、iOSに対応していますが今回はAndroidを解説します。
以下のリンクからアプリをインストールしてください。
インストールしたら、先ほど作成したプロファイルをGoogleドライブやファイル共有アプリを使ってAndroidに転送してください。(できればローカル内の共有がベストです)
WireGuardアプリを開いたら、右下の+をタップします。
ファイル、アーカイブからインポートをタップします。
Androidに転送したプロファイルを選択すると、接続できるようになります。トグルをタップしてアクティブにしてください。
AndroidのWiFiを切断して、ルーターの設定画面にアクセスできれば成功です。
お疲れ様でした。
Be First to Comment