Android 12以降で困った!Raspberry PiとNVR500でIKEv2/IPsec VPNを構築する方法

みなさん、こんにちは。

VPN接続は業務で利用したことがある方も多いのではないでしょうか?

私の場合、ここ数年、クラウドサーバーやクラウドストレージが普及して、出先から事務所のネットワークに接続する機会がめっきり減っていたんです。でも、先日、どうしても出先のAndroid端末から事務所のネットワークにアクセスする必要が出てきました。

「よし、VPNでつなぐぞ!」と意気込んで、以前使っていたL2TP/IPsecの設定を使おうとしたら、ここでまさかの問題にぶつかりました。なんと、Android 12以降ではL2TP/IPsecのVPN接続が削除されており、IKEv2/IPsecのVPN接続しか使えなくなっていたんです!

 


 

ルーター買い替えか?いや、待てよ、Raspberry Piがあるじゃないか!

 

仕方がないので、VPNサーバー機能を有効にしているルーターの設定を変更しようと思ったのですが、これがまた困ったことに、事務所のルーターがヤマハのNVR500という年季の入った機種で、IKEv2/IPsecのVPNサーバーに対応していませんでした。

「これはルーターを買い替えるしかないか」と調査を開始したのですが、IKEv2/IPsecサーバーに対応した業務用ルーターというのは意外と値が張るという現実に直面しました。「痛い出費だな」と思っていたところ、ふと手元に使っていないRaspberry Piがあることを思い出しました。これだ!活用しない手はないですよね!

そこで今回は、使っていないRaspberry Piと古き良きヤマハNVR500ルーターを組み合わせて、社外からAndroid 12以降の端末でVPN接続するための方法を解説したいと思います。

 


 

今回のVPN構築の概要と前提

 

まずは、今回構築するVPNの概要をざっくりと見ていきましょう。

  • VPNプロトコル: IKEv2/IPsec
  • 認証方式: 事前共有鍵(PSK)
    • Android 12以降の標準VPN機能に「IKEv2/IPsec PSK」の選択肢があるため、今回はこの方式を優先します。
    • ただし、全てのAndroid端末でIKEv2認証が安定して動作するとは限らないので、注意が必要です。必要であれば、証明書認証なども検討してみてくださいね。
  • VPNサーバーソフトウェア: strongSwan
  • Raspberry PiのIPアドレス: 192.168.xx.50 (LAN内で固定IPアドレスに設定してください)
  • VPNクライアントに割り当てるIPアドレス範囲: 10.10.10.0/24 (LAN側のIPアドレス範囲とは絶対に重複しないようにしてください!)
  • Raspberry PiのOS: Debian系 (今回はJessieを使ったのですが、Buster、Bullseye、Bookwormでも問題なく動作するはずです)

では早速、具体的な設定に入っていきましょう!

 


 

Raspberry Pi (Debian) サーバー側の設定

 

まずはRaspberry Pi側の設定から進めます。SSHで接続して作業を進めます。

 

1. strongSwanパッケージのインストール

strongSwanは、IKEv2/IPsec VPNサーバーを実現するためのソフトウェアです。まずはこれをインストールしましょう。

sudo apt-get update
sudo apt-get install strongswan

 

2. strongSwan設定ファイル(/etc/ipsec.conf)の編集

strongSwanのメイン設定ファイルである/etc/ipsec.confを編集します。既存の設定があっても、今回のIKEv2/IPsec PSK用の設定を上書きする形でOKです。既存の設定を壊したくない場合は、conn ikev2-pskブロックのみを追記してください。

sudo vi /etc/ipsec.conf

ファイルを開いたら、以下の内容を追記してください。

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration
config setup
  # strictcrlpolicy=yes
  # uniqueids = no

conn %default
  auto=add

conn ikev2-psk
  auto=add
  keyexchange=ikev2
  authby=secret
  type=tunnel
  left=%any
  leftid=mydomain.xxx.netvolante.jp # ここをサーバーのFQDNまたは公開IPアドレスに置き換えてください
  leftsubnet=0.0.0.0/0
  right=%any
  rightid=%any
  rightsourceip=10.10.10.0/24       # クライアント向けIPレンジ。LANのIP(192.168.xx.0/24)と重複しないように注意!
  ike=aes256-sha256-modp2048
  esp=aes256-sha256
  dpdaction=clear
  fragmentation=yes
  forceencaps=yes # NAT配下の場合に有効

#include /var/lib/strongswan/ipsec.conf.inc

【設定のポイント】

  • leftid
    • ここには、ヤマハのネットボランチDNSで取得したFQDN(例: mydomain.xxx.netvolante.jp)を設定します。公開IPアドレスでも構いませんが、今回はネットボランチDNSを前提として進めます。
  • rightsourceip
    • VPNクライアントに割り当てるIPアドレスの範囲を指定します。事務所のLANのIPアドレス範囲(192.168.xx.0/24)とは絶対に重複させないでください! ここが重複すると、通信障害が発生してしまいます。例として10.10.10.0/24を設定していますが、ご自身の環境に合わせて変更してください。

 

3. strongSwan秘密情報ファイル(/etc/ipsec.secrets)の編集

次に、事前共有鍵(PSK)を設定するファイル/etc/ipsec.secretsを編集します。

sudo vi /etc/ipsec.secrets

ファイルを開いたら、以下の内容を設定します。IKEv2/IPsec PSK認証では、このPSK行だけでOKです。

mydomain.xxx.netvolante.jp %any : PSK "psk_frase" # "psk_frase" は任意の強力な事前共有鍵に置き換えてください。

【設定のポイント】

  • mydomain.xxx.netvolante.jp
    • 上記ipsec.confleftid完全に一致するFQDNを設定してください。
  • "psk_frase"
    • ここに設定する文字列が、VPNクライアント側で入力する「IPSec事前共有鍵」になります。推測されにくい、強力な文字列を設定しましょう!

 

4. strongSwanサービスの再起動

設定変更を反映するために、strongSwanサービスを再起動します。

sudo systemctl restart strongswan

 

5. IP転送の有効化

VPNクライアントから事務所のLAN内のデバイス(例えばプリンターやNASなど)にアクセスできるように、Raspberry PiでIP転送を有効にします。サーバー再起動後も有効になるように、/etc/sysctl.confに追記します。

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

tee -aを使うと、root権限でファイルに内容を追記できます。便利ですね!

 

6. iptables(ファイアウォール)の設定

VPNクライアントからの通信をLAN内に転送し、さらにインターネットに出す際にNAT変換(IPアドレスを変換する処理)を行うためのiptablesルールを設定します。

もし既存のL2TP/IPsecのMASQUERADEルールがある場合でも、今回設定したIKEv2クライアント用のIPアドレス範囲 (10.10.10.0/24) に対する新しいルールが必要です。

eth0はRaspberry PiのLAN側インターフェース名に置き換えてください。ip aコマンドで確認できますよ(例: enp0s3, ens33 など)。

# VPNクライアントからの通信をLAN外に出す際にNAT変換(MASQUERADE)するルールを追加
sudo iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

# VPNクライアント (10.10.10.0/24) からLAN内 (192.168.xx.0/24) への通信を許可
sudo iptables -A FORWARD -s 10.10.10.0/24 -d 192.168.xx.0/24 -j ACCEPT

# 確立済み/関連する接続のパケット転送を許可 (双方向通信のために重要です!)
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

【重要!】ルールの永続化

これらのルールは、このままではRaspberry Piを再起動すると消えてしまいます。再起動後もルールを保持するために、iptables-persistentをインストールし、ルールを保存しましょう。

sudo apt-get install iptables-persistent

インストール時に「現在のiptablesルールを保存しますか?」と聞かれたら、迷わず「はい」を選択してください。

後からルールを変更したり、追加したりした場合は、以下のコマンドで手動で保存できます。

sudo netfilter-persistent save

 


 

ヤマハ NVR500 ルーター側の設定

 

次に、ヤマハNVR500ルーターの設定です。インターネット側からのVPN通信を、先ほど設定したRaspberry Pi(192.168.xx.50)へ転送する設定が必要になります。

今回はネットボランチDNSサービスの利用を前提としていますので、事前にネットボランチDNSの取得を済ませておいてくださいね。

 

1. 必要なポートの確認

IKEv2/IPsecに必要なポートは以下の通りです。

  • IKE (IKEv1/v2): UDP 500
  • NAT Traversal (NAT-T): UDP 4500
  • IPsec ESP (カプセル化): IPプロトコル番号 50 (TCP/UDPではありません!)

 

2. 静的IPマスカレード(ポートフォワード)の設定

NVR500のWeb GUI、またはコマンドラインから設定を行います。

Web GUIでの設定
  1. NVR500のWeb GUIにログインします。
  2. 「詳細設定と情報」→「基本接続の詳細な設定」→「設定されているプロバイダの一覧の設定」→「静的IPマスカレード関連の追加」を開きます。
  3. 以下の項目それぞれを追加します。
    • IKEv2用(UDP/500)
      • プロトコル: UDP
      • ポート番号: 500
      • 宛先アドレス: 192.168.xx.50 (Raspberry PiのIPアドレス)
    • NAT-T用(UDP/4500)
      • プロトコル: UDP
      • ポート番号: 4500
      • 宛先アドレス: 192.168.xx.50 (Raspberry PiのIPアドレス)
    • IPsec ESP(プロトコル番号50)
      • プロトコル: ESP
      • 宛先アドレス: 192.168.xx.50 (Raspberry PiのIPアドレス)
  4. 設定後、「設定の確定」→「保存」→「反映」をクリックして適用します。
コマンドラインでの設定例
# nat descriptor type 番号 pp
# nat descriptor address outer 番号 primary
# nat descriptor address inner 番号 192.168.xx.50
# nat descriptor masquerade static 番号 1 500 udp 500
# nat descriptor masquerade static 番号 2 4500 udp 4500
# nat descriptor masquerade static 番号 3 esp esp

番号 は適切なnat descriptor番号に置き換えてください(例: 1000など)。

 

3. IPフィルター(ファイアウォール)の緩和

ポート転送だけでなく、NVR500のファイアウォールで外部からの該当ポートへの通信を「許可」する必要があります。

Web GUIでの設定
  1. NVR500のWeb GUIで「詳細設定と情報」→「ファイアウォール設定」→「PP(インターネット接続しているインターフェース)」→「IPv4フィルタ」を開きます。
  2. 以下の項目を設定し、「pass」に設定します。
    • 宛先を192.168.xx.50とし、プロトコルUDPでポート500を許可。
    • 宛先を192.168.xx.50とし、プロトコルUDPでポート4500を許可。
    • 宛先を192.168.xx.50とし、プロトコルESPを許可。
コマンドラインでの設定例
# ip filter 番号 pass * 192.168.xx.50 udp 500
# ip filter 番号 pass * 192.168.xx.50 udp 4500
# ip filter 番号 pass * 192.168.xx.50 ipsec-esp
# ip pp 番号 ip filter in 番号

番号 は適切な番号に置き換えてください。

 


 

Android側の設定

 

VPNサーバーの設定が完了したら、いよいよAndroid端末でVPN接続を設定してみましょう!

Android (12以降)

Androidの標準VPN機能には「IKEv2/IPSec PSK」の選択肢があります。事前共有鍵のみでVPN接続が可能なはずです。

  1. 設定ネットワークとインターネットVPN+ボタン をタップします。
  2. タイプ:「IKEv2/IPSec PSK」を選択します。
  3. サーバーアドレスmydomain.xxx.netvolante.jp (サーバーのFQDN)。
  4. IPSec IDmydomain.xxx.netvolante.jp (サーバーのFQDN。ipsec.confleftidと一致させてください)。
  5. IPSec事前共有鍵ipsec.secretsで設定したPSK文字列(例: "psk_frase")。

これで接続できるはずです。私は無事接続に成功しました!

 


 

最終確認とトラブルシューティング

 

「あれ?つながらない…?」そんな時は、慌てずに以下の点をチェックしてみてください。

  1. strongSwanサーバーの再起動
    • 全ての設定変更後、必ずsudo systemctl restart strongswanを実行しましたか?
  2. ルーターの再起動
    • NVR500の設定変更を確実に適用するため、可能であればルーターも再起動してみましょう。
  3. ポート開放の確認
    • 外部からVPNに必要なポート(UDP 500, 4500、ESPプロトコル)が開いているか、ポートチェックツールなどで確認してみましょう。
  4. ログの確認
    • 接続できない場合は、Raspberry Pi上でstrongSwanのログ(sudo journalctl -u strongswanなど)を確認してみてください。エラーメッセージが原因特定の手がかりになります。
  5. IPアドレスの重複
    • VPNクライアントに割り当てるIPアドレス範囲(rightsourceip)が、事務所のLANのIPアドレス範囲(192.168.xx.0/24)と重複していないか、再度確認してください。これが最もよくある問題の一つです!

これらの手順で、Android 12以降の端末からIKEv2/IPsec PSKでのVPN接続が可能になるはずです!

 


 

ちょっとだけ補足

 

ちなみに、私の場合、Android以外の端末からの接続のためにL2TP/IPsecの設定も残しています。そのため、Android端末でのみ「IKEv2/IPSec PSK」を選択するようにしています。

もしL2TP/IPsecも必要な場合は、別途設定を追加する必要があります。特にiOS/macOSでは、IKEv2/IPsec PSK認証は成功しないケースもあるので、実際の運用では、他の接続方法(証明書認証など)も検討することをおすすめします。

 

本日も最後までお読みいただきありがとうございました。

それでは、よいVPNライフを!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール