ヤマハルータ RTX810 x2 台で拠点間 VPN をコマンド操作で構成する方法

前書き

我が家には光インターネット回線が 2 本ある。1 つがマンション備え付けの光回線で、もう 1 つが ソフトバンク光 の回線だ。

それぞれの回線にヤマハルータ RTX810 を接続し、拠点間 VPN (インターネット VPN) を構成する方法をメモしておく。

【準備 1】構成図を作る

まず以下のような構成図を作ることを強くオススメします。拠点間 VPN の設定に慣れているなら作らなくて大丈夫ですが、慣れていなければこのような構成図を作ってみる。作れなければ拠点間 VPN の構成がうまく行かない可能性が高くなると考えて良いでしょう。

今回僕が構築していくのは、2 拠点間をインターネット VPN で結ぶものだ。といっても、リアルな物理的拠点はどっちも我が家なので拠点 1、拠点 2 と呼ぶのに違和感がある点は無視する。

各拠点の RTX810 配下にある IP セグメント内にあるパソコンやスマホといった端末が、お互いにインターネット VPN 越しに通信できる環境を作る。

左の RTX810 がマンション備え付けの回線であり、プロバイダーからルータに付与される IP アドレスはグローバル IP アドレス (DHCP) だ。

右の RTX810 がソフトバンク光の回線で、プロバイダーからルータにはグローバル IP アドレス (以降、グローバル IP と略す) が付与されるが、DHCP での払い出しはなく PPPoE を構成した時に割り当てられる。

いずれの場合もグローバル IP は固定されていないため、常時 VPN セッションを張らせておくのであればダイナミック DNS によるホスト名を準備しておくなどしたほうが確実だ。

ヤマハの無料サービスであるネットボランチ DNS サービスを使う方法は、[RTX810] ネットボランチ DNS サービスにホスト名をコマンド操作で登録してみた。 で紹介しています。

【準備 2】VPN 接続に使用するグローバル IP とプライベート IP を決める。

RTX810 で拠点間 VPN を構成する時に意識しておく必要のあるのが、VPN トンネルの構成に使うグローバル IP とプライベート IP アドレス (以降、プライベート IP と略す) を決めておくことだ。グローバル IP の代わりに FQDN (ホスト名、Dynamic DNS 含む) を割り当てているならそれでも良い。以下のようなリストを作ってあらかじめ用意しておこう。

僕が作る構成では以下のようになった。グローバル IP が関わるところはごまかしてあります。

  • 拠点 1 ルータのグローバル IP (FQDN) : hoge-rtx810-02.aa0.netvolante.jp
  • 拠点 1 ルータのプライベート IP: 10.1.0.1 (vlan1 の IP アドレス)
  • 拠点 2 ルータのグローバル IP (FQDN): 233.103.xxx.xxx
  • 拠点 2 ルータのプライベート IP: 10.2.0.254 (vlan1 の IP アドレス)

なぜこれらの IP アドレスを把握しておく必要があるかというと、これらを使って RTX810 を設定する必要があるためです。つまりここが決まらないことには設定できない = VPN 構成を作れない、ことになる。

※ 本投稿の下の方に書いた注意事項 1 と 2 をここでご確認ください。

RTX810 設定の前提

RTX810 が予めインターネット接続できるように構成済みであること。

ゼロから RTX810 をセットアップする方法に関しては過去記事を参照してほしい。

PPPoE なし → RTX810 のセットアップ完了!コンフィグ公開!

PPPoE あり → [RTX810] SoftBank 光 IPv4 PPPoE 用設定をコンソールケーブル使ってコマンド操作でやってみた。

設定する内容

インターネット接続ができていることを前提とする場合、追加で設定する必要があるのは VPN トンネルを構成するのに必要なコマンドに絞られる。

設定内容のメモを作る。

コマンドをいきなり入力していくのではなく、以下のようなメモ書きを作っておく。(熟練しているならこのようなメモは不要)

拠点 1 用の設定内容

# IPSec トンネルを作る設定
tunnel select 1
 ipsec tunnel 1
  ipsec sa policy 1 1 esp aes256-cbc sha256-hmac   # IPSec SA ポリシー (暗号化プロトコル、暗号アルゴリズム、認証アルゴリズムを指定)
  ipsec ike keepalive log 1 off
  ipsec ike keepalive use 1 on
  ipsec ike nat-traversal 1 on   # NAT トラバーサル機能を有効化
  ipsec ike pre-shared-key 1 text HogePreSharedKey   # IPSec 事前共有鍵
  ipsec ike remote address 1 hoge-rtx810-02.aa0.netvolante.jp   # 対向ルータの FQDN (グローバル IP)
 ip tunnel tcp mss limit auto
 tunnel enable 1

# IKE の鍵交換を始動させる設定
ipsec auto refresh on

# 対向拠点 (拠点 2 側) へのスタティックルート
ip route 10.2.0.0/24 gateway tunnel 1   # 10.2.0.0/24 に行くために VPN トンネルに投げる
ip route 172.16.2.0/24 gateway tunnel 1 # 172.16.2.0/24 に行くために VPN トンネルに投げる # IPSec 用 Static NAT 設定 nat descriptor masquerade static 1 1 10.1.0.1 udp 500 # ISAKMP メッセージ用 nat descriptor masquerade static 1 2 10.1.0.1 esp # ESP 用 nat descriptor masquerade static 1 3 10.1.0.1 udp 4500 # NAT トラバーサル用

上記 nat descriptor masquerade static コマンドで指定してる IP アドレスが、準備 2 のところで確認したプライベート IP だ。

拠点 2 用の設定内容

# IPSec トンネルを作る設定
tunnel select 1
 ipsec tunnel 1
  ipsec sa policy 1 1 esp aes256-cbc sha256-hmac   # IPSec SA ポリシー (暗号化プロトコル、暗号アルゴリズム、認証アルゴリズムを指定)
  ipsec ike keepalive log 1 off
  ipsec ike keepalive use 1 on
  ipsec ike nat-traversal 1 on   # NAT トラバーサル機能を有効化
  ipsec ike pre-shared-key 1 text HogePreSharedKey   # IPSec 事前共有鍵
  ipsec ike remote address 1 233.103.xxx.xxx   # 対向ルータの FQDN (グローバル IP)
 ip tunnel tcp mss limit auto
 tunnel enable 1

# IKE の鍵交換を始動させる設定
ipsec auto refresh on# 対向拠点 (拠点 1 側) へのスタティックルート
ip route 10.1.0.0/24 gateway tunnel 1   # 10.1.0.0/24 に行くために VPN トンネルに投げる
ip route 172.16.1.0/24 gateway tunnel 1 # 172.16.1.0/24 に行くために VPN トンネルに投げる # IPSec 用 Static NAT 設定 nat descriptor masquerade static 1 1 10.2.0.254 udp 500 # ISAKMP メッセージ用 nat descriptor masquerade static 1 2 10.2.0.254 esp # ESP 用 nat descriptor masquerade static 1 3 10.2.0.254 udp 4500 # NAT トラバーサル用

今回はすでにインターネット接続ができているルータに上記コマンドを追加していくことを前提にしている。

インターネット接続するためにヤマハルータに既に Static NAT の設定が入っている場合は、nat descriptor masquerade static のあとの引数 2 つ (NAT descriptor 番号と Static NAT の識別番号) に注意が必要である点に注意されたい。

この点については、以下ヤマハのマニュアルにも目を通しておいてほしい。

26.8 静的 IP マスカレードエントリの設定

では RTX810 に設定を入れていく。

拠点 1 ルータ

# tunnel select 1
#  ipsec tunnel 1
#   ipsec sa policy 1 1 esp aes256-cbc sha256-hmac
#   ipsec ike keepalive log 1 off
#   ipsec ike keepalive use 1 on
#   ipsec ike nat-traversal 1 on
#   ipsec ike pre-shared-key 1 text HogePreSharedKey
#   ipsec ike remote address 1 hoge-rtx810-02.aa0.netvolante.jp
#  ip tunnel tcp mss limit auto
#  tunnel enable 1
#
# ipsec auto refresh on
#
#ip route 10.2.0.0/24 gateway tunnel 1
# ip route 172.16.2.0/24 gateway tunnel 1
#
# nat descriptor masquerade static 1 1 10.1.0.1 udp 500
# nat descriptor masquerade static 1 2 10.1.0.1 esp
# nat descriptor masquerade static 1 3 10.1.0.1 udp 4500
#
# exit
Save new configuration ? (Y/N)Y
Saving ... CONFIG0 Done .
> exit
Connection to 172.16.1.1 closed.
$

拠点 2 ルータ

# tunnel select 1
#  ipsec tunnel 1
#   ipsec sa policy 1 1 esp aes256-cbc sha256-hmac
#   ipsec ike keepalive log 1 off
#   ipsec ike keepalive use 1 on 
#   ipsec ike nat-traversal 1 on 
#   ipsec ike pre-shared-key 1 text HogePreSharedKey
#   ipsec ike remote address 1 203.103.xxx.xxx
#  ip tunnel tcp mss limit auto
#  tunnel enable 1
# 
# ipsec auto refresh on 
## ip route 10.1.0.0/24 gateway tunnel 1
# ip route 172.16.1.0/24 gateway tunnel 1
#
# nat descriptor masquerade static 1 1 10.2.0.254 udp 500 
# nat descriptor masquerade static 1 2 10.2.0.254 esp 
# nat descriptor masquerade static 1 3 10.2.0.254 udp 4500 
# 
# exit 
Save new configuration ? (Y/N)Y
Saving ... CONFIG0 Done .
> exit
$ 

VPN トンネルが張れたことの確認

1. show status tunnel コマンドを使う。

# show status tunnel 1
TUNNEL[1]:
Description:
  Interface type: IPsec
  Current status is Online.
  from 2021/10/24 16:39:02.
  2 hours 13 minutes 32 seconds  connection.
  Received:    (IPv4) 402 packets [289184 octets]
               (IPv6) 0 packet [0 octet]
  Transmitted: (IPv4) 467 packets [39491 octets]
               (IPv6) 0 packet [0 octet]
#

Current status is Online になっている点と、from の箇所に書いてある日時 (いつから VPN トンネルが張れているか) をチェックする。

上記の例だと 2021 年 10 月 24 日 16:39:02 から VPN トンネルが張れている。

2. パソコンやスマホから対向拠点と通信できることを確認する

たとえば拠点 1 のパソコン (MacBook Pro) から拠点 2 のルータ (RTX810) の vlan2 の IP (172.16.2.254) に ping を打ってみる。

$ ping -c 4 172.16.2.254
PING 172.16.2.254 (172.16.2.254): 56 data bytes
64 bytes from 172.16.2.254: icmp_seq=0 ttl=253 time=34.654 ms
64 bytes from 172.16.2.254: icmp_seq=1 ttl=253 time=36.111 ms
64 bytes from 172.16.2.254: icmp_seq=2 ttl=253 time=12.558 ms
64 bytes from 172.16.2.254: icmp_seq=3 ttl=253 time=11.094 ms

--- 172.16.2.254 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 11.094/23.604/36.111/11.801 ms
$

以上のようになれば通信できている。time= の後ろの数値に着目しよう。30 ms (ミリ秒) 以上かかることがあるということは、それなりに距離があることが感覚的にわかる。

我が家のルータから我が家のルータの間の物理的距離はたかだか 2 – 3 メートルだが、拠点間で通信するには光回線からインターネットに出ていってからもう一個の光回線に折り返して帰ってくる形になるので線路 (光ファイバーの長さ) は長くなる。だから相応の遅延 (通信に要する時間) が掛かることになる。

【注意事項 1】VPN に使うプライベート IP について

RTX810 を使用する場合、LAN 側の設定を LAN1 に設定することがほとんどだと思われるが、LAN1 に複数のセグメントを定義している際に注意が必要かもしれない点について記載しておく。

我が家の RTX810 では、上記構成図にさらっと書いている vlan1 と vlan2 が LAN1 に設定されている。LAN1 に IP アドレスが 2 つ存在するわけである。

このとき、準備 2 で確認したプライベート IP をどちらにするか?を決める必要があるが、ヤマハルータの挙動的に vlan1 の IP にしないとだめっぽいです。

拠点間 VPN が構成できれば良いので掘り下げて調べていませんが、show log したときの結果からそのように判断しました。具体的には show log | grep 2021/10/24 | grep local のようにログを表示させると、

2021/10/24 16:00:35: [IKE] initiate ISAKMP phase to 125.71.xxx.xxx (local address 10.1.0.1)
2021/10/24 16:03:21: [IKE] initiate ISAKMP phase to 125.71.xxx.xxx (local address 10.1.0.1)
2021/10/24 16:06:07: [IKE] initiate ISAKMP phase to 125.71.xxx.xxx (local address 10.1.0.1)
2021/10/24 16:08:53: [IKE] initiate ISAKMP phase to 125.71.xxx.xxx (local address 10.1.0.1)
2021/10/24 16:11:39: [IKE] initiate ISAKMP phase to 125.71.xxx.xxx (local address 10.1.0.1)

のように表示された。

上記 local address の後ろの IP が RTX810 が VPN 構成のために使用しようとしているプライベート IP です。今回のケースだと vlan1 の IP でした。

もともとの想定では vlan2 の IP を使おうとしていたのですが、LAN1 に設定されている最初の IP が使われる (つまり任意に選んで指定できない) のがヤマハルータの仕様か?という気がしてきたので、すぐに vlan1 の IP を使うようにコマンドを変えました。

【注意事項 2】VPN に使うグローバル IP について

両拠点のルータ (RTX810) を正しく設定したのになぜかうまく VPN トンネルが構成されない。そういうときのヒントになるかもしれません。

拠点 1 のルータは、対向側である拠点 2 のルータのグローバル IP (もしくは FQDN) を ipsec ike remote address に指定する必要があります。拠点 2 のルータは、これと反対になります。

このとき、各ルータで指定する対向拠点ルータのグローバル IP を間違えると VPN が構成されません。これはご理解頂けると思いますが、うまく VPN トンネルが張れないとき、ここが間違っているかもしれません。

各拠点ルータ配下にパソコンやスマホを接続して、確認くん のサイトでグローバル IP を 2 拠点分それぞれ確認してみてください。「あなたの IP アドレス (IPv4)」に表示されているアドレスです。

この確認くんで表示されるグローバル IP と、ヤマハルータで設定している対向ルータのグローバル IP が違っている場合 (この場合、2 重 NAT になっている可能性が高い) には、確認くんで表示されている IP に変えてみてください。

グローバル IP の指定が間違っていて VPN トンネルが張れない場合は、これで上手くいくこともあるでしょう。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください