CGBeginner

映画好きの個人CGクリエイターが試行錯誤した記録

フォローボタン

Raspberry-PiでVPNサーバーを作る

2017/05/08

公共の無線LANなどを使用するときに、セキュリティの問題とかいろいろありますよね。その解決策として、VPN(Virtual Private Network)というものがあります。
仮想的な通信トンネルを構成したプライベートネットワークのことで、一言で言うと、通信内容を暗号化できる技術で、VPNを使えば通信の安全性が高まります。

スポンサードリンク

VPNの図解

・VPNを使用しないとき(普通の通信)
[PCやスマホ]--非暗号化通信--[公共ルーター]--非暗号化通信--[インターネット]
・VPNを使用するとき
[PCやスマホ]--暗号化通信--[公共ルーター]--暗号化通信--[インターネット]--[自宅ルーター]--非暗号化通信--[インターネット]

公共のルーターを通るときの通信内容が暗号化できるんですね。なのでその際の盗聴とかのリスクも減らせます。DNS偽装とかのリスクも減ります。
※ここでいう暗号化はHTTPS通信の話ではないです

このようなVPNを構築するために、Raspberry Piを買ってそれをサーバーにします。VPNサーバーのソフトウェアは、SoftEther VPNを使用することにします。

RASPBIANのインストール

初心者推奨のRaspberry Pi向けディストリビューションのNOOBSをまずMicroSDカードにインストールし、そこからRaspbianをインストールする形で行きます。

NOOBSダウンロードページへ行き、NOOBSをダウンロードします。

1

これです。「Download ZIP」を押してダウンロードします。これを普通に解凍します。

2

このようなファイルたちが生成されます。この内容すべてを、FAT32でフォーマットしたSDカードにコピーします。解説サイトによってはフォーマッターとかコピーツールでインストールしてるところもありますが、自分はこれでうまくいったのでよしとします。

コピーが完了したSDカードをRasPiに入れ、USBキーボード、HDMI、LANケーブルを繋いだら、給電用MicroUSBを差し込みます。勝手に電源がつきます。

しばらく待った後、NOOBSが起動します。言語を日本語にして、Raspbiann PIXELを選んでインストールしましょう。十分くらいで終わるはずです。

しばらくした後、Raspberry Piのデスクトップが表示されます。

かんたんに設定します。

Raspberry Pi初期設定

デスクトップ上のラズベリーマークをクリックし、Preferences->Raspberry Pi Configurationをクリックします。
Passwordを変更し、
BootをTo CLIに変えておきます(今後デスクトップ画面を見ることはありません。もし一時的に見たいときはstartxコマンドでデスクトップを開始できます)。
Auto Loginもチェックを外します。
次にInterfacesのタブに行き、SSHをオンにします。

あとは電源を落とし、ケーブルを、LANケーブルと電源ケーブルを残して全部抜きます。そしてRasPiをもう一度電源オンにします。今後はWindowsPCからSSHで操作します。

SSHアクセス

TeraTermなどのターミナルでアクセスします。IPアドレスは、前章で設定を変えたときに、ついでにターミナルでifconfigというコマンドを撃てば調べることが出来ます。

ユーザー名はpi
パスワードは先程自分が入力したもの(初期設定ではraspberry)
を入力します。

まずアップデートをします。

$ sudo apt update
$ sudo apt upgrade

これで一応普通に使う準備は出来ました、

 

VPN設定

ここからは、「俺の技術メモ」さんが非常に詳しく丁寧に解説してくれていますので、(その1その2その3
特に大事な、「ネットワークブリッジ」の設定部分だけメモしておきます。

仮想ブリッジのネットワーク設定

Linuxにはネットワーク仕様の問題があるそうです

http://www2.softether.jp/jp/vpn3/manual/web/3-6.aspx#vpn_3_6_11

Linux オペレーティングシステム内部での制限事項により、VPN 側 (仮想 HUB 側) からローカルブリッジしている LAN カードに割り当てられる IP アドレスに対して通信を行うことはできません。この制限は PacketiX VPN が原因ではなく、Linux の内部構造に原因があります。もし VPN 側 (仮想 HUB 側) から Linux でローカルブリッジに使用しているコンピュータ本体と、何らかの通信を行いたい場合 (たとえば VPN Server / VPN Bridge サービスと HTTP サーバーサービスを両方動作させており、VPN 側からもサーバーサービスにアクセスさせたい場合) は、ローカルブリッジ用の LAN カードを用意して接続し、その LAN カードと既存の LAN カードの両方を物理的に同じセグメントに接続してください

つまり、VPNサーバーにしたPCに直接SSH接続することが出来なくなってしまうので、ブリッジデバイスをかませる必要があるということです。マシンのIPアドレスを、物理インターフェイス(eth0)ではなく、仮想ブリッジ(br0)に割り当て、br0にeth0とVPN仮想HUBをブリッジさせることでこの問題を解決します。

デスクトップから、ターミナルを立ち上げます。

sudo su -

で、rootになります

apt-get install bridge-utils

で、ブリッジに必要なパッケージをインストールします。

vi /etc/network/interfaces

と入力し、次を追記します。

auto br0★ここからbr0の設定
iface br0 inet static★固定IPアドレスだと宣言する
address 192.168.0.20★設定したいIPアドレス
netmask 255.255.255.0★サブネットマスク
network 192.168.0.0ネットワークアドレス
broadcast 192.168.0.255★ブロードキャストアドレス
gateway 192.168.0.1★デフォルトゲートウェイ
bridge_ports eth0★eth0とブリッジする設定
bridge_maxwait 10★ブリッジの最大wait

※/etc/dhcpcd.confを編集すると書かれているものもあるらしいです。が、上のとおりに行けたので、よしとします。

以前は『/etc/network/interface』に設定していましたが、どのバージョンかは不明ですが、最近のバージョンは『/etc/network/interface』に設定しても動作しませんでした。
以下のサイトにもあるように、『/etc/dhcpcd.conf』へ設定が変わったようです。

・Setting a static IP on Raspberry Pi on Raspbian 20150505
http://sizious.com/2015/08/28/setting-a-static-ip-on-raspberry-pi-on-raspbian-20150505/

一旦PCをRebootします。

ここからは、こちらのブログを参考にしてもらったほうが早いです。(その1その2その3

参考
http://techblog.clara.jp/2016/04/raspberry-pi-3-model-b_install_and_ssh_connect/
http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi_SSH.html
http://qiita.com/Cinosura/items/6ab435331ea2b3671a1d

Raspberry Pi 2 Model B で L2TP/IPSec VPNサーバを構築してみた(その1)

Raspberry PiにSoftEther VPNを入れる


http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi3.htmlhttps://peraichi.com/landing_pages/view/xo6jf

Raspberry PiでNTFSファイルサーバー

NTFS形式のHDDをマウントしてファイルサーバーにするという話も興味深いので、一部紹介しておきます

NTFS形式のHDDをマウントするためにntfs-3gをインストールします

sudo apt install ntfs-3g

リブートします。実際にマウントする前に一旦システムを再起動しないと、エラーが出るらしいです。

参考
https://peraichi.com/landing_pages/view/xo6jf
http://qiita.com/Cinosura/items/6ab435331ea2b3671a1d

Raspberry Piで他のPCをWake On Lanする

SENGOKU氏のwol.cを使用します。 wol.c:http://www.gcd.org/sengoku/docs/wol.c

ダウンロードしてコンパイル

cd
mkdir wol
cd wol
wget http://www.gcd.org/sengoku/docs/wol.c
gcc wol.c -o wol

./wol 192.168.100.1 **-**-**-**-**-**

こんな感じで実行します。

#!/bin/sh
./wol 192.168.100.1 **-**-**-**-**-**

こういうシェルスクリプトを書いたらいいです。

参考
http://www.gcd.org/sengoku/docs/wol.c
http://zipsan.hatenablog.jp/entry/20140117/1389952909
http://qiita.com/kaishero/items/5e48f952c36dcaef27fb
http://dadasan.blogspot.jp/2013/10/raspberry-piwol.html

 

インターネットとの間の通信が VPN を優先的に流れないようにする方法

外出先のPC(例えば社内PCや学内PC)から,自宅のコンピュータにアクセスするためにVPNを繋いだとします.
すると,ローカルネットワークのみならず,インターネットへのアクセスにもVPNのネットワークが使われることになります.
公共無線LANとかのセキュリティ向上の目的でVPNを使うならそれでいいのですが,安全なネットワークにいるPCから,自宅のPCにつなぎたいという目的でVPNを使うときは,インターネットへのアクセスは普通に物理LANからアクセスしたほうが早くていいです.
その方法があったのでメモ.「インターフェイスメトリック」というものがキーワードです.

質問

オフィスに VPN Server を設置し、自宅の PC に VPN Client をインストールしました。自宅の PC からオフィスに VPN 接続すると、オフィスの PC にアクセスすることができるようになりました。しかし、同時にすべての通信がオフィスに設置されている NAT を経由してインターネットに出るようになりました。これにより通信速度が若干低下してしまいます。また、オフィスのファイアウォールのセキュリティポリシーが強要されてしまいます。VPN に接続中に、オフィスのコンピュータとの間の通信だけ VPN を経由するようにして、インターネット上のホストとの間の通信は自宅の NAT を経由するようにすることは可能でしょうか ?

回答

とても簡単です。
VPN Client の仮想 LAN カードに関する Windows のネットワーク接続設定の TCP/IP (IPv4) の設定を開いてください。
「インターフェイスメトリック」がデフォルトで「1」に設定されています。これを「1000」などの大きな値に変更すれば、物理的な LAN カードのほうの優先順位が高くなります。こうすれば、オフィスのプライベート IP アドレス宛のパケットだけが VPN 経由で流れるようになり、インターネットへのアクセスは自宅の物理的なネットワークを経由して行なわれるようになります。
なお、この問題を解決するために、VPN Client の接続設定における、「ルーティングテーブルの調整処理を行なわない」を有効にしてはいけません。これは効果がないばかりでなく、VPN 通信が大変不安定になる原因になります。この項目の意味がわからない方は、決して有効にしないでください。

引用元:https://ja.softether.org/4-docs/3-kb/VPNFAQ020

ということなので,コントロール パネル\ネットワークとインターネット\ネットワーク接続の中の,自分で設定したVPN用の仮想LANカードのアイコンを選択してプロパティを押します.

network

表示されるプロパティウィンドウの中の,「インターネット プロトコル バージョン4(TCP/IPv4)」を選択し,下の「プロパティ」を押します.

network2

表示されるウィンドウの下辺りの「詳細設定」を押します.

network3

その中の,「インターフェイスメトリック」の値が,デフォルトでは1になっているので,1000くらいの大きな数字に変更します.このインターフェイスメトリックは,簡単に言うとネットワークカードの優先順位のことで,数字が小さいものから優先されます.つまり,この数字を1000にすることによって既存の物理LANカードの順位のほうが高くなり,物理LANのデフォルトゲートウェイが使用されることになります.

network4

戻したいときは同じ手順で行えばOK.一旦VPNをつなぎ直すと効果が現れます.

参考:http://d.hatena.ne.jp/tatakauashi/20100226/1267191692
https://support.microsoft.com/ja-jp/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes

【戯れ言】「メトリック値」とは何ですか?


スポンサードリンク

-コンピュータ