RaspberryPi で外部から自宅LANに接続可能な OpenVPNサーバを立てる

自宅LAN内の RaspberryPi で、外部から接続可能な OpenVPNサーバを立てる場合の設定方法です。
なお、ここでは自宅LAN は 192.168.1.0/24 とします。


RaspberryPi の設定


OpenVPNサーバーの設定


サーバ側(RaspberryPi上)での作業です。
root で作業します。

OpenVPN をインストールします。


apt install openvpn


必要なファイルを用意します。

OpenVPN では「サーバ秘密鍵」、「サーバ証明書」、「サーバ証明書を発行した認証局のCA証明書」が必要です。
各ファイルを次の箇所に置きます。以降、このファイル名で説明します。

サーバ秘密鍵:/etc/openvpn/server.key
サーバ証明書:/etc/openvpn/server.crt
サーバ証明書を発行した認証局のCA証明書:/etc/openvpn/ca.crt


下記記事の「プライベート認証局(オレオレ認証局)による作成方法」の手順に従って作成した証明書も使用できます。

CentOS6/CentOS7/Ubuntu14.04 でのサーバ証明書の作成方法: パソコン鳥のブログ

作成したファイル ca.crt , server.crt , server.key は /etc/openvpn に置いてください。

その他、ca.csr , ca.key , server.csr等も出来ますが、OpenVPNの設定では指定しません。


次に dh2048.pem を作成します。


openssl dhparam -out /etc/openvpn/dh2048.pem 2048


次に ta.key を作成します。


openvpn --genkey --secret /etc/openvpn/ta.key


必要なファイルがそろったら、OpenVPN の設定を行います。
サンプルをコピーして、設定ファイルを /etc/openvpn/server.conf に用意します。


cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
gunzip -d server.conf.gz
cp server.conf /etc/openvpn/server.conf


server.conf 中の次のオプションを設定します。

/etc/openvpn/server.conf

port 1194
proto udp

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

server 10.8.0.0 255.255.255.0

push "route 192.168.1.0 255.255.255.0"

tls-auth ta.key 0

user nobody
group nobody
log-append /var/log/openvpn.log

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login
client-cert-not-required
username-as-common-name



push "route 192.168.1.0 255.255.255.0" の行で、自宅LAN内へ接続できるようにしています。

その他の各パラメータについては、下記を参照してください。
plugin で指定しているパスが異なりますが、RaspberryPi では上記のパスになります。

OpenVPNで ID/パスワード認証する: パソコン鳥のブログ


iptablesの設定


自宅LANに接続できるように、IPフォワードできるように設定します。

次のファイルに追記します。

/etc/sysctl.conf

net.ipv4.ip_forward=1


次を実行します。


iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
/sbin/iptables-save > /etc/iptables/rules.v4


最後に reboot してください。


ルータの設定


外部から自宅LANの RaspberryPi に接続できるようにするために、自宅のルータでポート転送の設定をしてください。
UDP 1194番を自宅LANのサーバー(RaspberryPi)へ転送させます。

例えば、PR-400KI では、詳細設定-静的NAT設定 で、次のように設定します。

・接続インタフェース名:メインセッション
・宛先IPアドレス:自宅LANのOpenVPN サーバー(RaspberryPi)のIPアドレスを指定します。
・変換対象IPアドレス:自WAN側IPアドレス
・変換対象プロトコル:UDP
・変換対象ポート:1194

PR-400KI_1194設定.PNG

これで、外部からOpenVPNサーバーに接続し、サーバ上のユーザID/パスワード認証で使うことが出来ます。
また自宅LAN内にアクセスすることができます。


クライアントの設定


Windows:vpnux Client、Androidスマホ:OpenVPN for Android、での設定を説明します。

Windows + vpnux Client


OpenVPNで ID/パスワード認証する為のクライアントの設定方法 の vpnux Client の箇所に従って設定してください。

一部、設定が異なる点があります。下記のようにして下さい。

詳細設定-暗号化設定 で AES-256-CBC を指定してください。
(RaspberryPi の OpenVPN の暗号化形式はデフォルトでは AES-256-CBC です)

また、一般設定-拡張設定で [LZO圧縮を有効にする] をオフにしてください。
[LZO圧縮を有効にする] をオフにしないと、VPN接続はできるものの、接続後の通信はできません。
この場合、サーバー(RaspberryPi)の oepnvpn.logには IP packet with unknown IP version=15 seen と出力されます。

Androidスマホ + OpenVPN


Androidスマホでセキュアな通信をOpenVPNで行う の内容に従って設定してください。
一部、設定が異なる点があります。下記のようにして下さい。
・「基本設定」タブで [LZO圧縮] をオフにします。
・「接続先リスト」タブで、[カスタムオプション]のチェックを外します。(fragment 1280,mssfix,link-mtu 1400 の設定も不要です)




参考


OpenVPNで ID/パスワード認証する: パソコン鳥のブログ
Raspberry PiでOpenVPNサーバを構築する - Qiita
OpenVPNで ID/パスワード認証する為のクライアントの設定方法: パソコン鳥のブログ

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント