自宅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
これで、外部から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/パスワード認証する為のクライアントの設定方法: パソコン鳥のブログ
コメント