Raspberry PiでOpenVPN。VPNは色々便利&フリーWi-Fiも高セキュリティに

トンネリングプロトコルVPN
設定

VPNをご存知ですか?海外では公衆Wi-Fiには必需品と考えられている地域もあるほどの必須インフラですが、日本ではあまり知られていないのも実情。

VPNとはVirtual Private Networkの略で、仮想的な専用線をひくイメージです。仮想的にセキュリティの高い回線を用意するというもので、暗号化技術により成り立っています。

最近ではルータにこの機能が付属しているものも増えてきています。ルータをVPNサーバーとすれば、省エネ低コストで専用線なみのセキュリティを確保できなかなか素敵な選択肢となっています。

VPNのメリットとは

・フリーWi-Fiを利用するときの安全性が上がる
・自宅のLAN内のサーバーに外からアクセスできる
・海外から日本限定の動画サービスなどにアクセスできる
・旅行先で関東のRadikoが聞ける

などが挙げられます。

VPNの種類(プロトコルなど)

・PPTP
・IPSec
・L2TP/IPsec
・OpenVPN

この内PPTPとL2TPはトンネリングのみを行い、暗号化などは別の仕組みを利用するようになっています。PPTPであればRC4と組み合わせることが多く、Windowsに標準装備となっているそうです。またL2TPであればIPSecと組み合わせてセキュリティを確保することが多いようです。この中で一番セキュリティが高いのはOpenVPNのようです。それもSHA-2に対応しているものがよいとのことです。今からVPNを選べる環境なら最新のOpenVPNを選びましょう。

Raspberry PiでVPNサーバーを構築する

VPNルータを持ってない?それならRaspberry Piで代用ができるかもしれません。セキュリティに関して強固にできるかどうかわかりませんが一応やってみました。多分Raspberry PiであってもOpenVPNのドキュメント通り正確に正しく構築すればそれなりにセキュリティの高いものができるでしょう。ただし知識が必要なのでなんちゃってVPNくらいのセキュリティでVPNを使ってみました。ちゃんとするならVPNルータを使ったほうがセキュリティは高いかもしれません。

RaspberryPi & Open Vpn構築手順

#パッケージリストの更新
sudo apt-get update
#パッケージの更新
sudo apt-get upgrade
#ロケールの更新
sudo update-locale LANG=ja_JP.UTF-8
#タイムゾーン設定
sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
sudo dpkg-reconfigure –frontend noninteractive tzdata
#オープンVPNのインストール
sudo apt install openvpn

#EasyRSAのインストール(コンパイル等はいらない模様)
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz
tar -xvzf EasyRSA-unix-v3.0.6.tgz
sudo mv EasyRSA-v3.0.6 /usr/local/EasyRSA

#環境変数?の設定
cd /usr/local/EasyRSA/ 
cp -p vars.example vars 
vi vars

vi varsで認証局証明書の期限(2000日に設定)

set_var EASYRSA_CA_EXPIRE       2000
set_var EASYRSA_CERT_EXPIRE     2000

cd /usr/local/EasyRSA/
#初期化
./easyrsa init-pki
#認証局作成 パスフレーズが聞かれるので任意に入力 CommonNameも同様
./easyrsa build-ca
#DHパラメータを設定(結構時間がかかる)
./easyrsa gen-dh
#サーバー用証明書キーペア生成(パスワードは先程入力したものと同じ)
./easyrsa build-server-full server nopass
#クライアント用キーペア生成(パスワードは先程と同じ)
./easyrsa build-client-full client1 nopass

#サーバ設定

cd /usr/local/EasyRSA/
sudo cp pki/ca.crt /etc/openvpn/
sudo cp pki/issued/server.crt /etc/openvpn/
sudo cp pki/private/server.key /etc/openvpn/
sudo cp pki/dh.pem /etc/openvpn/dh2048.pem

#設定雛形を解凍
sudo gzip -d /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
sudo cp -p /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server.conf

#TAキーを作成
sudo openvpn –genkey –secret /etc/openvpn/ta.key

サーバー設定をいかになるように編集

port 1194接続を受け付けるポート、外に開放するためのポートなのでデフォルト以外でもよいと思う。ovpnファイルに埋め込めるため使い勝手は変わらず
proto udpudpの他 tcpが選べる
push “dhcp-option DNS 8.8.8.8”名前解決のためのDNSサーバ
dev tunルーティングモードでの設定だと思う
ca ca.crtCaファイルのファイル名
cert server.crtcertファイルのファイル名
key server.keyサーバ用鍵のファイル名
dh dh2048.pemdhパラメータで出力したファイル
server 10.8.0.0 255.255.255.0VPN接続したクライアントに割り当てられる仮想アドレス範囲
ifconfig-pool-persist ipp.txtよくわからん
push “route 192.168.1.0 255.255.255.0”サーバと同じサブネット。このサブネットにVPN経由でアクセスできるんだと思う
push “redirect-gateway def1”VPNのトラフィックをすべてここに通す
client-config-dir ccdクライアントに固定IPをわりあてる
keepalive 10 120生存期間
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC暗号化方式
persist-key
persist-tun
status openvpn-status.log
explicit-exit-notify 1

IPマスカレードの設定に苦労した

IPマスカレードの設定をしないとVPN経由でネットに繋がらない。私はUFWが好きなのでufwを使っている人向けの設定を行う

sudo vi /etc/default/ufw
##DEFAULT_FORWARD_POLICY="DROP"を以下に変える
DEFAULT_FORWARD_POLICY="ACCEPT"

#sysctl.conf ファイルはufwだと以下
vi /etc/ufw/sysctl.conf 

#以下を有効化コメントを外す
net/ipv4/ip_forward=1

#iptablesの設定を直接叩くらしい
sudo vi /etc/ufw/before.rules

#十行目あたりに書く
:POSTROUTING ACCEPT [0:0] 
# Forward traffic from eth0 through eth1. 
#10.0.0.0/24 からのパケットを eth1 に転送するという意味
-A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE

#ufwの再起動 sudo ufw reloadでも良いか?
sudo ufw disable && sudo ufw enable

クライアント用設定などをまとめたファイルovpnを作る。キーなどを埋め込むことができるので便利に使える。

簡単に作れるシェルスクリプトがあるのでこちらを使うと楽

このブログは以下の記事を参考にさせて頂いた上自環境でテストして加筆していったものです。
Qiita OpenVPNサーバの作り方

これで接続自体は一発でアンドロイドなどから行えました。マスカレード設定の解決に時間を要しましたので、参考になれば幸いです。今後ルータを買う方はopenvpnが使えるものを選ぶとよいでしょう。皆様快適ライフを!

20200622追記 設定がうまく行かない場合

sudo vi /etc/ufw/before.rules
にて設定がうまく行かない場合は10行目付近でなく、COMMITの後に以下を追加したらうまく行きました。
*nat
:POSTROUTING ACCEPT [0:0]
-F
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
コンテンツフィルター
Tips
DNSを使って簡単にコンテンツフィルタリングを行うOpenDNS

皆様コンテンツフィルタリングに興味はありますか? お子様がいらっしゃる場合など危険なサイトにはアクセスしてほしくないと考える方も多いのではないでしょうか? 大人用コンテンツやフィッシングサイトなど危険なサイトは沢山あります。どのようにしてそのようなサイトから身を守るべきでしょうか。 今から出来るフィルタリング 今からすぐフィルタリングを始めたい場合、利用でき …

IP電話イメージ
お得情報
携帯電話代金を安くあげる方法の一つ。050番号を持つ方法

携帯電話代金を維持するには格安シムでさえおよそ700円かかります。 電話番号を持つ方法はこの700円を支払うか。050番号を持つという方法があります。050番号はIP電話に振られる番号でこのIP電話を持つことにより携帯電話代金を安くあげる事ができます。 多くのプランではデータプランを全くなしにできない事から700+480円程度は維持費がかかります。 IP電話 …

ファイルのイメージ
Tips
Windows10のファイル検索、ファイルサイズによる検索をする方法

古くからWindowsのファイル検索はファイル名だけでなくサイズなどからも検索することができますが、昔のWindowsファイル検索窓と違い使い方がわからないために、検索できないなー不便だなーと思う事がありました。 Windows10ですぐに使えるテクニックで、サイズから検索するにはどうしたらよいのでしょうか。 ファイルサイズから検索する方法 答えは簡単で検索 …