Back

12月 11 2013

Raspberry PiにOpenVPNでリモートアクセス

友人のアマチュア無線用ノードをサポートするため,ノード用ラズベリーパイ(Raspberry Pi=Debian系Linux)にリモートアクセスする必要に迫られ,VPNサーバーをインストールしました。 ほとんど100% Raspberry Pi OpenVPN Server Tutorial の焼き直しです。ちょっと迷ったところなどを加味して今後のために残します。

OpenVPN Server のセットアップ

$ sudo su

 su にならず,sudo を使って試したのですがいくつか実行できないフレーズがありました。取りあえずsu になっておきます。

# apt-get update
# apt-get upgrade
# apt-get install openvpn openssl

 アップデートをして,関連ファイルをインストールします。

# cd /etc/openvpn
# cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa

 フォルダ /etc/openvpn の中に入り,/usr/share/doc/openvpn/examples/easy-rsa/2.0 というフォルダを丸ごとeasy-rsa という名前に変えて /etc/openvpn の直下にコピーします。

# nano easy-rsa/vars

そのフォルダ内の「vars」というファイルを編集します。

 GNU nano 2.2.6          File: easy-rsa/vars
# easy-rsa parameter settings

# NOTE: If you installed from an RPM,
# don’t edit this file in place in
# /usr/share/openvpn/easy-rsa —
# instead, you should copy the whole
# easy-rsa directory to another location
# (such as /etc/openvpn) so that your
# edits will not be wiped out by a future
# OpenVPN package upgrade.

# This variable should point to
# the top level of the easy-rsa
# tree.
export EASY_RSA=”/etc/openvpn/easy-rsa”
#
# This variable should point to
# the requested executables
#
export OPENSSL=”openssl”
export PKCS11TOOL=”pkcs11-tool”
export GREP=”grep”

 青文字で記した部分(元の記述 export EASY_RSA=”‘pwd'”)を変更します。([Ctrl]+ O, [Enter], [Ctrl]+ x で保存)

# . ./easy-rsa/vars
# ./easy-rsa/clean-all
# cd easy-rsa
# ln -s openssl-1.0.0.cnf openssl.cnf
# cd ..

 最初の2行で初期化します。さらに east-rsa フォルダに入って OpenSSL のリンクを張り, フォルダから出ます。

# ./easy-rsa/build-ca OpenVPN

 各項目にデータを入力し認証用のファイルを作成します。[]内は米国での例ですので[JP][SHIGA][OmiHachiman]などのように質問に答えます。空欄にしないようにとのメッセージが出ますので失敗しないためにも最初はメッセージに従った方が無難です。

# ./easy-rsa/build-key-server server
# ./easy-rsa/build-key client1
# ./easy-rsa/build-dh

 同様にサーバ/クライアント向けにキーファイルを生成します。特に build-dh コマンドは数分かかる場合があります。

# nano openvpn.conf

 新規ファイルに次の内容をコピーする。

 GNU nano 2.2.6          File: openvpn.conf
dev tun
proto udp
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
user nobody
group nogroup
server 10.0.0.0 255.255.255.0
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
client-to-client
push “redirect-gateway def1”
#set the dns servers
push “dhcp-option DNS 8.8.8.8”
push “dhcp-option DNS 8.8.4.4”
log-append /var/log/openvpn
comp-lzo

 青文字の部分は環境に合わせて,server 192.168.100.0 255.255.255.0 などと変更します。また赤文字の部分は必ずダブルクォーテーション「”」に囲まれている必要があります。([Ctrl]+ O, [Enter], [Ctrl]+ x で保存)

# echo 1 > /proc/sys/net/ipv4/ip_forward

 これは,/proc/sys/net/ipv4/フォルダ内の ip_forward ファイルの中に「1」という値を書き込みます。

# cd ..
# nano sysctl.conf

 /etc の中で sysctl.conf を開き,# net.ipv4.ip_forward = 1 の「#」を消してその行を有効(アンコメント)にする。([Ctrl]+ O, [Enter], [Ctrl]+ x で保存)

# cd openvpn
# nano newvpn.ovpn
 GNU nano 2.2.6          File: newvpn.ovpn
dev tun
client
proto udp
remote username.dynamicdns.org 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3

 openvpn フォルダに入り,新規ファイル「newvpn.ovpn」を開き上記内容をコピーします。青文字部分は通常VPNサーバーが属する LAN のゲートウェイ(ルータ)の外側,グローバルアドレス(固定又はダイナミックDNS)となります。([Ctrl]+ O, [Enter], [Ctrl]+ x で保存)

# ifconfig

 通常 eth0 の IPアドレスがこのラズベリーパイのアドレスです。これを確認しておき次の設定で使用します。

# nano /etc/rc.local
 GNU nano 2.2.6          File: /etc/rc.local
    : 省略
iptables -t nat -A INPUT -i eth0 -p udp -m udp –dport 1194 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT –to-source 10.0.0.xxx

exit 0

 /etc/rc.local というファイルを開き,スクリプト最後の exit 0 より上に上記2行を追加します。
=MEMO=2行目末尾は –to-source 10.0.0.xxx まで1行です。

 今までに作成した次のファイルをクライアント側で使用しますので確認してまとめておきましょう。
/etc/openvpn/easy-rsa/keys/ca.crt, client1.crt, client1.key
/etc/openvpn/newvpn.ovpn
特に,認証用ファイルは root権限でないとアクセスできません。コピー先でも重要なファイルですので権限を変更しておきます。

# chmod -R 777 .

もしも認証用ファイルを複数アカウント作成したいと思った場合は,次のように繰り返します。

$ sudo su
# cd /etc/openvpn
# . ./easy-rsa/vars
# ./easy-rsa/build-key client2(又は client3, その他適当な認証用名前)

最後に,

# reboot
又は
$ sudo reboot

することによって rc.local に記述した内容も反映された環境で立ち上げます。

$ sudo /etc/init.d/openvpn start

で動作を確認。OKならば次のように自動起動登録します。

$ sudo chkconfig –add openvpn


OpenVPN Client のセットアップ

OpenVPN.JPというサイトがとても参考になります。

 [ダウンロード]をクリックすると最新版の OpenVPN が掲載されています。今回は自分の Windows 8 デスクトップパソコンから,遠隔の Raspberry Pi をメンテナンスしますので「Windowsインストーラ(64ビット版)」をクリックします。

 ダウンロードが完了しましたら,ダブルクリックしてインストールを開始します。途中コンポーネントを選択する画面がありますが,そのままで問題ありません。

 ここで,デスクトップ上に出来たアイコンをダブルクリックすると,すぐにエラーメッセージが表示されます。「権限」が無いため失敗しているだけなので,マウスで右クリックしたメニューから「管理者として実行」を選択してください。

 これで正常にタスクバーにアイコンが現れ起動したことが確認できます。ただそのアイコンをクリックしても何も起こりません。また右クリックしても[設定]と[終了]しか見当たりません。この設定はプロキシの設定なので普通はしなくても大丈夫です。

 さて,なぜ立ち上げらないかというとサーバーの設定で生成した各ファイルが無いためです。
そこで,上記4ファイルを C:Program FilesOpenVPNconfig に格納します。

openvpn

 もう一度管理者権限で立ち上げて,タスクバーのアイコンを右クリックすると,図のようにメニューが無事表示されます。切断状態では図のようにアイコンのパソコン画面が赤い色をしています。

 [接続]をクリックしてステータス画面が表示され無事接続すると,画面の部分が緑色に変化します。

 また[設定の編集]を選択すると,標準でメモ帳が開きますが編集後保存できません。また,動作には支障ないのですがメモ帳では設定項目が改行されておらず改行して成型すると[CR]+[LF]が挿入され,別のエディターで見たときに一行飛ばしになっているのが確認できることがあります。
 面倒なかたは,terapad などを使用し直接編集保存した方が簡単です。また xxx.ovpn ファイルの xxx の部分を接続先名にしておくと増えたとき選択しやすくなります。

Back