IPoE を使い IPsec で LAN 間 VPN を構築する時のフィルタや、運用時の IPv6 アドレスの利用について書いてみます。実はこのような VPN を構築する場合、様々な構成が考えられますが、構成によって、IPv6に対するフィルタは変わってくるので、少しでも参考になれるよう、試行錯誤した内容をまとめてみました。

例えば、1台のルータで DS-Lite や V6プラスで IPv4 でインターネットへ接続できるように、そして取得したグローバル側の IPv6 アドレスを、LAN 内へ配布し、加えて IPsec を使った LAN 間 VPN も構築するなんていう盛り沢山の構成にする。
また、IPv4 は固定IPアドレスとして、内側にあるサーバへポートフォワーディングを行うとか、考え出すときりがありません。

また、万が一 IPoE の経路に障害が発生してもリモートでアクセスできるよう、従来の PPPoE+固定IPアドレスという裏口を残しておきたい という要望や、静的ルーティングをやめ、OSPF 等のダイナミックルーティングを使いたいとなると、メーカーが用意している設定例では対応できず、様々な設定例をミックスしたり、新たに設定を追加する事となります。

このような場合には、無理して1台のルータに機能を詰め込まず、まずは役割毎にルータを物理的に分けて設定を行い、分割した機能が正常に実装されているかどうか、丁寧に検証し、動作の確認が取れた時点で、分割したルータで稼働している機能を統合するようにすると、結果的に、楽に、早く、実装することが出来ます。

今回の下記の様な構成を想定します。


この構成に沿ったルータ A、ルータ B、ルータ C の設定について、ヤマハ製ルータ(RTX830、RTX810)のコンフィグを例示し、設定内容について解説してみます。

まず、LAN 間 VPN 担当のルータ C における IPv6 フィルタについて…

ipv6 lan2 address auto
ipv6 lan2 secure filter in 1010 1011 1012 1013 1040 1041 1042
ipv6 lan2 secure filter out 3000 dynamic 100 101 102 103 104 105 118 119
ipv6 lan2 dhcp service client ir=on

ipv6 filter 1010 pass * * icmp6 * *
ipv6 filter 1011 pass * * tcp * ident
ipv6 filter 1012 pass * * udp * 546
ipv6 filter 1013 pass * * 4
ipv6 filter 1040 pass * * ah,esp
ipv6 filter 1041 pass * * udp 500 *
ipv6 filter 1042 pass * * udp * 500
ipv6 filter 3000 pass * * * * *
ipv6 filter dynamic 100 * * ftp
ipv6 filter dynamic 101 * * domain
ipv6 filter dynamic 102 * * www
ipv6 filter dynamic 103 * * smtp
ipv6 filter dynamic 104 * * pop3
ipv6 filter dynamic 105 * * submission
ipv6 filter dynamic 118 * * tcp
ipv6 filter dynamic 119 * * udp

LAN2 は、ONU へ接続されているので、自力でグローバル IPv6 アドレスを取得します。

ipv6 lan2 dhcp service client ir=on

まずはお約束のフィルタ、icmp6, ident, udp 546(DHCPv6で使用)です。ヤマハルータの設定例で IPv6 を使う時には必ず出てきますが、ident はすでに使われなくなったプロトコルですので、設定しなくても良いかも?です。

その昔、メールサーバとの接続( xinetd 経由で qpopper が呼ばれた時!?)で使っていたような記憶がありますが、最近主流の postfix + dovecot で、ident を使っているケースは見たことがありません。

また、1013  の  * * 4  というフィルタは、IP over IP のプロトコルを意味します。今回は、IPv4 のパケットを IPv6 のペイロードに載せるので、このフィルタも必須となります。
※正式には、IP in IP もしくは、IP-within-IP と呼称します。詳しくは、RFC2003 をご覧下さい。

次に、IPsec で使うプロトコルを許可します。
具体的には、1040, 1041, 1042 が、該当のフィルタになります。ヤマハの設定例(IPsec を使用した VPN 拠点間接続)とは異なりますが、L2TP や NAT トラバーサルは使わないので、こちらの設定例(IPsec を通すフィルタ設定例)を参考にして、このように設定しています。

この VPN 用ルータが、LAN 内の IPv6 でのデフォルトゲートウェイにならないとは思いますが、仮にそうなっても大丈夫のように ipv6 lan2 secure filter out に、最低限のフィルタを書いておきます。

以前書いた、IPoE を使った LAN 間 VPN も、参考にしてみてください。

 運用時に気を付ける点

LAN 間 VPN なので、複数のローカルセグメントが VPN で接続されます。LAN 間接続された異なるセグメントにおいて、IPv4 はローカル IP アドレスを使っているので、ルータで静的 NAT 等を使わない限り WAN 側からアクセスされることはありません( NAT トラバーサルは除く)。

しかし、IPoE によって取得したグローバル側の IPv6 アドレスを LAN 内に配布すると、以下の様な問題が発生します。

例えば、Windows AD server が、それぞれのセグメントに存在すると、所属する LAN 内で取得したグローバル IPv6 アドレスを、ローカル側で使っている DNS サーバへ、自動的に登録します。

同じサーバに対して IPv4 のアドレスと IPv6 のアドレスが設定されていると、IPv6 が優先されグローバル側の IPv6 アドレスを使って接続しようとします。

しかし、LAN 間 VPN では IPv6 は通していない(ローカルの IPv4 通信だけが対象)ので、他セグメントにあるサーバに対し、グローバル側の IPv6 アドレスを使ってインターネット側からの直接アクセスしようとしますが、ルータにて拒否(一般的には IPv6 であっても、グローバル側の任意のホストからの接続は拒否)され、Windows AD server 間の通信や、LAN 内の端末から他セグメントにある Windows server へのアクセスが出来なくなります。

この問題を解決するには、以下の方法が考えられます。

  1. IPoE で取得したグローバル側の IPv6 アドレスは、LAN 間 VPN だけに使用し、LAN 内へは配布しない。つまり LAN 内は IPv4 だけで運用し、インターネットへのアクセスも IPv4 だけを利用する。
  2. IPoE で取得したグローバル側の IPv6 アドレスは LAN 内へ配布するが、Windows server やローカル側で使っている DNS サーバでは IPv6 アドレスを利用しない。
    Windows server では、イーサネットのプロパティで IPv6 のチェックを外す、Linux サーバであれば該当のインターフェースの設定で、#iface eth0 inet6 auto のように IPv6 の設定をコメントアウトする。

1 の方法は、PPPoE で IPv4 固定 IP アドレスという運用環境の置き換えであれば、従来通りというか何も変化しませんが、せっかく IPoE で取得したグローバル側の IPv6 アドレスを有効利用できません。

2 であれば、クリティカルなネットワーク障害は解消できますが、IPv6 の設定が生きている端末や NAS 等に対し、設定内容によっては、他セグメントにいる機器から、リモートデスクトップ接続ができない、NAS にアクセスが出来ない等の問題が起きるかもしれません。

もちろん、拠点毎のルータで IPv6 のフィルタを工夫して、指定された IPv6 のプレフィックスからの通信は許可すれば問題は解決できそうですが、IPv4 に比べ極めて広大な IPv6 のアドレス空間とはいえ、グローバル側から直接 LAN 内への通信を許可するのは、セキュリティ的にちょっと怖いような気がします。

もしかすると、IPsec を使った LAN 間 VPN で、IPv6 の通信も通せるような設定があるかもしれないので、これからの課題として調査・検証を進めたいと思っています。

ルータA  設定例

IPoE を使い DS-Lite で接続し、取得したグローバル IPv6 アドレスは、LAN 内へ再配布します。

DS-Lite では、インターネット接続で使うグローバル IPv4 アドレスは共有なので、固定 IP アドレスではありません。また、VNE 事業者まではローカル IP アドレスで接続されるので、ルータの WAN 側には IPv4 のグローバル IP アドレスは設定されません。

また、本例では LAN 内にローカル用の DNS サーバが稼働しているので、DHCPv6 で通知される IPv6 でアクセスできる DNS サーバ(VNE 側)の情報は、LAN 内へ配布していません。

同じセグメントにルータが2台、そして他セグメントと IPsec で LAN 間接続しているので、通常であればスタティックルートの設定が必要です。本例ではダイナミックルーティングとして OSPF を使っているので、明示的なルーティング設定はありません(デフォルトゲートウェイの設定は必要!)。

ルータB 設定例

IPv6 を使った閉域網 VPN で、他拠点 ( lonnie-02.i.open.ad.jp ) へ IPsec で接続します。

両拠点とも、OPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト というソフトイーサ社から提供されるダイナミック DNS サービスを利用しています。無料で利用できる素晴らしいサービスです。詳しくはこちら…

フレッツ網へ接続して取得できる IPv6 アドレスは、フレッツ網内(インターネットへは行けない、NTT 東、もしくは NTT 西内だけ接続できる)のみ接続可能な、いわばローカルな IPv6 アドレス(無料)と、NTT 東西を相互に接続でき、加えて、インターネットへも接続できるグローバルな IPv6 アドレス(有料:ISPとの契約が必要)の2種類があります。

実は、この2種類の IPv6 アドレス、 IPoE で取得したグローバル IPv6 アドレスと、フレッツ網内だけのローカルな IPv6 アドレスとは直接、相互に通信が可能です。
ですので、RA (Router Advertisement; ルータ広告) で取得した IPv6 アドレスを、OPEN IPv6 ダイナミック DNS を使う事で、完全に固定ではない(半固定?)な IPv6 アドレスを、名前( FQDN : Fully Qualified Domain Name )として扱えるので、ルータや監視等、運用/管理がとても楽になります。

注:上記例では、利用しているルータが RTX810 なので、IPsec の接続速度は 200Mbps が最大となります。

ルータC 設定例

PPPoE でインタネーットへ接続し、他拠点 ( lonnie-01.i.open.ad.jp ) へ IPsec で接続します。

この拠点では、PPPoE(固定IPv4アドレス 1個)を使ってインターネットへ接続します。その固定 IP アドレスの 20022 番ポートを、22 番( SSH で使用)へポートフォワーディングし、内部の Linux サーバへ接続します。これは、IPsec 経路の VPN にトラブルが生じても、グローバル IP アドレス経由で入れる、いわば裏口のようなものです。

このルータ C からは、LAN 内へグローバル IPv6 アドレスを配布していません(つまり IPv6 のデフォルトゲートウェイにはならない)が、ポートフォワーディングされたサーバのデフォルトゲートウェイは、このルータへ向ける必要があるので、IPv6 と IPv4 のアウトバウンド通信は許可するようにフィルタを設定しています。

もちろん、インバウンド通信に関して、IPv6 は定番のフィルタ( 71, 72, 73, 74 )と、IPsec 関連の通信( 75, 76, 77 )だけ通し、IPv4 に関しては、NAPT( IP マスカレード)を使っているので、2022 番ポートへの着信以外のインバウンド通信は通りません。

今回はダイナミックルーティングとして OSPF を使っているので、DS-Lite でインターネットへ接続している ルータ A( 192.168.0.254 )で、OSPF の情報やルーティングテーブルを見てみます。

■ ルータA
# show status ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.0.1       1   FULL/BDR        00:00:32    192.168.0.1     LAN1

# show ip route
Destination         Gateway          Interface       Kind  Additional Info.
default             -                 TUNNEL[1]    static
192.168.0.0/24      192.168.0.254          LAN1  implicit
192.168.10.0/24     192.168.0.1            LAN1      OSPF     cost=1564

このように、neighbor で隣というか、同じセグメント内で OSPF が動いているルータが見えます。
また、ルーティングテーブルを見ると、IPsec で接続している対向先のネットワークが 192.168.10.0/24 で、そのセグメント宛の通信は 192.168.0.1 へルーティングされる事がわかります。

■ ルータB
# show status ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.10.254    0   FULL/  -        00:00:38    192.168.10.254  TUNNEL[1]
192.168.0.254     1   FULL/DR         00:00:39    192.168.0.254   LAN1

IPsec で閉域網 VPN を担当している ルータ B( 192.168.0.1 )で、同じように neighbor を見ると TUNNEL[1] の先に、192.168.10.254 が見えます。これが IPsec で接続している対向側のルータになります。

■ ルータC
# show ip route
Destination         Gateway          Interface       Kind  Additional Info.
default             -                    PP[01]    static
163.139.21.xxx/32   -                    PP[01] temporary
163.139.100.xx/32   -                    PP[01] temporary
163.139.230.xx/32   -                    PP[01] temporary
192.168.0.0/24      192.168.0.1       TUNNEL[1]      OSPF     cost=1563
192.168.10.0/24     192.168.10.254         LAN1  implicit

他拠点 192.168.10.0/24 の閉域網 VPN を担当している ルータ C で、ルーティングテーブルを見ると、TUNNEL[1] の先に、ルータ B が見えます。このように、相手先のネットワークセグメントを知らなくても自動的にルーティングテーブルが作成されるので、OSPF はとっても便利です。

ただし、上手に使わないとルーティングテーブルが作成されなかったり、おかしな動きをするので、十分にテストを行ってから、実地運用することをお勧めします。

全国に拠点や工場、営業所等が多数存在し、それら拠点間を閉域網 VPN で接続するエンタープライズ向けのサービス(バックアップ回線付)に関しても、通信キャリアと JV を組んで対応いたします。設計から構築、運用までお任せ下さい。