nKB

nKB

シンプルにいこうよ

外出先から自宅LANにVPNで繋ぐ

はじめに

外出先から自宅LANへアクセスする為、VPN環境※を構築する。

VPNとは、暗号化技術を使うことでインターネット上で
 安全な通信経路を確立するための機能

VPN要件

  • OpenVPNを使う
  • 接続方式はルーティング方式
  • 認証方法は証明書認証
  • プライベート認証局(CA)も同じサーバ上に構築

※認証にOTPを使いたい場合はこちら
OpenVPNでワンタイムパスワード(OTP)認証を使う - nKB

イメージ図
f:id:t2nak:20200505154806p:plain:w400

構成

項目 内容
ルータ Aterm BL1000HW(auひかり ホームゲートウェイ
ハードウェア VMWare 仮想マシン
OS CentOS7
VPN Server OpenVPN
VPN Client vpnux client
プライベート認証局(CA) easy-rsa


パラメータ

項目 内容
VPNサーバIPアドレス 192.168.0.240
CA証明書の秘密鍵パスフレーズ Password
クライアント証明書の秘密鍵パスフレーズ Password
VPNネットワークセグメント 10.8.0.0/24
VPNクライアントのIPアドレス 10.8.0.10

パスフレーズは任意

VPN環境構築の流れ

  1. CentOS7の構築
  2. CentOSVPNサーバとプライベート認証局を構築する
  3. WindowsVPNクライアントの準備をする
  4. ゲートウェイルータの設定(ポートマッピングVPNパススルー、グローバルIPアドレス確認)
  5. リモート先の機器に静的ルーティングを追加


1.CentOS7を構築する

CentOS7 インストール - nKB

注意
本稿では、手順を分かりやすくする為、SELinuxFirewallを無効化している。
本運用時はセキュリティ対策は確実に行うこと。

2.CentOS7でVPNサーバを構築する

OpenVPNとeasy-rsaパッケージのインストール

EPELリポジトリからインストールする為、EPELリポジトリを追加
Linux yumリポジトリ - nKB

# yum install openvpn easy-rsa -y


プライベート認証局の設置

ファイルコピー

OpenVPNディレクトリ配下に「easy-rsaディレクトリを作成し、必要なファイルをコピーする

# mkdir /etc/openvpn/easy-rsa
# cp /usr/share/easy-rsa/3.0.7/* /etc/openvpn/easy-rsa/ -R


作業ディレクトリに移動

# cd /etc/openvpn/easy-rsa/


認証局の初期化

カレントディレクトリ配下に「pkiディレクトリが作成される

# ./easyrsa init-pki


認証局の作成

※CA証明書の秘密鍵パスフレーズ認証局の名前の入力がある。
 認証局の名前はデフォルト値を使う。

# ./easyrsa build-ca

以下のファイルが作成される
./pki/ca.crt(CA証明書)
./pki/private/ca.key(CA証明書の秘密鍵

DHパラメータの作成

# ./easyrsa gen-dh  

以下のファイルが作成される
./pki/dh.pem(DHパラメータ)

サーバ証明書秘密鍵を作成

途中パスフレーズの入力を求められる。CA秘密キー作成の際に設定したパスフレーズを入力する

# ./easyrsa build-server-full server nopass

以下のファイルが作成される
./pki/issued/server.crt(サーバ証明書
./pki/private/server.key(サーバ証明書秘密鍵

クライアント証明書と秘密鍵の作成

途中パスワードを求められる

# ./easyrsa build-client-full client1

./pki/issued/client1.crt(クライアント証明書)
./pki/private/client1.key(クライアント証明書の秘密鍵

OpenVPNの設定

サンプルコンフィグのコピー

設定ファイルのサンプルがあるのでコピーする

# cp /usr/share/doc/openvpn*/sample/sample-config-files/server.conf /etc/openvpn/server.conf


コンフィグを編集

/etc/openvpn/server.conf

設定抜粋

  • ポート番号
    port 1194

  • プロトコル
    proto udp

  • モードの指定(ルーティング)
    dev tun

  • 証明書と秘密鍵の指定
    ca /etc/openvpn/easy-rsa/pki/ca.crt
    cert /etc/openvpn/easy-rsa/pki/issued/server.crt
    key /etc/openvpn/easy-rsa/pki/private/server.key # This file should be kept secret

  • DHパラメータの指定
    dh /etc/openvpn/easy-rsa/pki/dh.pem

  • 仮想ネットワークの指定
    server 10.8.0.0 255.255.255.0

  • VPNサーバ側のLANセグメントの指定(ルーティング追加)
    push "route 192.168.0.0 255.255.255.0"

  • VPNクライアントの固定IPアドレス割り当て
    ifconfig-pool-persist ipp.txt

  • 権限の指定
    user nobody
    group nobody

  • 圧縮の有効化
    comp-lzo

  • ログの有効化と格納先の変更
    status /var/log/openvpn-status.log
    log /var/log/openvpn.log


VPNクライアントの固定IPアドレス指定

/etc/openvpn/ipp.txt

client1,10.8.0.10


VPNをサービスとして起動

# systemctl enable openvpn@server
# systemctl start openvpn@server
# systemctl status openvpn@server


3.WindowsVPNクライアントの準備をする

必要ファイルのコピー

VPNサーバ構築で使用した下記のファイルが必要。

  • ca証明書(ca.crt)
  • クライアント証明書(client1.crt)
  • クライアント秘密鍵(client1.key)
  • TSL認証キー(ta.key)


VPNクライアントのダウンロード

下記のサイトからインストーラをダウンロードする
vpnux client
https://www.plum-systems.co.jp/vpnux-client/


VPNクライアントのインストール

vpnuxClient-XXX-install.exe を実行

次へ
f:id:t2nak:20200506074951p:plain:w400

同意する
f:id:t2nak:20200506075053p:plain:w400

インストール
f:id:t2nak:20200506075125p:plain:w400

完了
f:id:t2nak:20200506075225p:plain:w400

VPNクライアントの設定

vpnux Client を起動する

「プロファイル」をクリック
f:id:t2nak:20200506075725p:plain:w300

「追加」をクリック
f:id:t2nak:20200506075807p:plain:w300

一般設定

項目 内容
プロファイル名 profile1(任意)
VPNサーバー VPNサーバのIPアドレス(後述)
ポート 1194
バイス TUN
プロトコル UDP
拡張設定 「LZO圧縮を有効にする」にチェック
CA証明書 「ca.crt」を指定
証明書認証(PKI)を使用 チェックを入れる
証明書 「client1.crt」を指定
秘密鍵 「client1.key」を指定
パスワード クライアント証明書を作成した際に入力したパスワード

f:id:t2nak:20200506075900p:plain:w400

詳細設定

項目 内容
TLS-Auth HMAC署名を使用 チェックを入れる
共通鍵 「ta.key」を指定

f:id:t2nak:20200506075912p:plain:w400

「保存」をクリックし、プロファイルを保存する

4.ゲートウェイルータの設定(ポートマッピングVPNパススルー、グローバルIPアドレス確認)

auひかりのホームゲートウェイAterm BL1000HW)を使用
※ルータによって設定方法は異なるので取説などで確認すること

ポートマッピングの設定

VPNサーバ宛の接続要求がきた際にVPNサーバに届くようにする

ルータの管理コンソールをブラウザで開く

ホームゲートウェイ詳細設定の「ここから設定/確認」をクリック
f:id:t2nak:20200506084438p:plain:w300

「ポートマッピング設定」をクリック
f:id:t2nak:20200506084810p:plain:w300

「追加」をクリック
f:id:t2nak:20200506085018p:plain:w400

NATエントリ追加し、「設定」をクリック

項目 内容
優先度 1
LAN側ホスト 192.168.0.240
プロトコル UDP
ポート番号 1194

f:id:t2nak:20200506085334p:plain:w500

「保存」をクリック
f:id:t2nak:20200506085615p:plain:w500

NATエントリに追加されていることを確認
f:id:t2nak:20200506085739p:plain:w500


VPNパススルーの設定

VPNIPSec)パススルーとは
通常ルータでNATによるアドレス変換を行うとVPNの通信がうまくいかない。
パススルー機能を有効にすると送受信されるIPsecパケット(ISAKMPパケットおよびESPパケット)を
スルーさせることができるようになり、アドレス変換を介したIPsec通信が可能になる。


Aterm BL1000HWにはVPNパススルーの有効/無効するメニューがない。
 ポートマッピングだけ行えばOK
参考:VPNパススルー機能|Aterm®BL1000HW 機能詳細ガイド

Aterm BL1000HW以外のルータを使用している場合は
マニュアル等を参照し、VPNパススルーまたはIPSecパススルー機能を
有効にすること。

グローバルIPアドレスの確認

VPNクライアントで指定するグローバルIPアドレスを確認する

DDNSサービスを使う場合はこちら
 Dynamic DNS(DDNS)サービスの使い方 - nKB

「有線・無線LAN, WANの状態」をクリック
f:id:t2nak:20200506094209p:plain:w300

WAN側状態に表示されているIPアドレスVPNクライアントで指定するIPアドレスになる。
f:id:t2nak:20200506094400p:plain:w400

おまけ 簡単にグローバルIPアドレスを確認できるサイト
アクセス情報【使用中のIPアドレス確認】

5.リモート先の機器に静的ルーティングを追加

VPNの接続方式としてルーティング方式を使う為、
VPNクライアントのPCとリモート先(自宅LAN側)の機器ではネットワークセグメントが異なる。

VPNクライアントのPCについてはVPNサーバによってルーティング設定が行われる為、
ルーティングを意識する必要がないが、リモート先の機器にVPN用の
ルーティングが設定していないと戻りの通信ができない。
リモート先の機器にVPNのネットワークセグメント 10.8.0.0/24宛のパケットについては
VPNサーバのローカルIPアドレス 192.168.0.240をゲートウェイとする
静的ルーティングの設定が必要

Windowsであれば以下のコマンドで静的ルーティングが追加できる

route -p add 10.8.0.0 mask 255.255.255.0 192.168.0.240


参考記事

CentOS7でVPNサーバを作ってみた(tun編)・・・サーバ起動まで - Qiita
CentOS 7 : OpenVPN インストールと設定 : Server World
OpenVPN 2.4 サーバ構築(tun方式) | server-memo.net

EOF