EdgeRouter X と Linux サーバーを IPsec over IPv6 の拠点間 VPN で接続する方法です。

So-net 光 プラスは、フレッツ光とプロバイダー契約がセットになっているいわゆる光コラボサービスで、IPv4 が PPPoE で提供されているという特徴があります。そのため、グローバル IP アドレスが頻繁に変更されたり、NGN 網終端装置の輻輳の影響を受けたり1といった問題があり、IPv6 接続のほうがより安定して VPN 接続を構成することができます。このサービスの IPv6 アドレスはあくまでも半固定ですが2 IPv6 アドレスの変更頻度は低く、DDNS などを設定しておけば十分に実用できます。

ロードバランサーとは

EdgeOS は標準で WAN へのロードバランサー機能を搭載しており、パケットのルーティング先を予め指定した方法でインターフェイスごとに振り分けることができます1。たとえば複数の回線を契約しているような逸般の誤家庭で負荷をそれぞれに分散させたり、一方の回線が利用できなくなったときにもう一方の回線に自動で切り替えたり、といったユースケースがあります。

この記事では So-net 光 プラス を契約している我が家(VDSL 😢)で、フレッツ光の PPPoE 方式による接続と v6 プラス を EdgeRouter から利用しつつ、v6 プラスが利用できないときに PPPoE 接続にフォールバックさせるように設定してみます。

v6 プラスのデメリット

v6 プラスを利用している場合、特定のポート番号を使用するサービスが IPv4 で利用できなくなります。しかしながらこの記事の方法を使用すると、EdgeRouter からルーティングされるパケットをロードバランシングから除外することで PPPoE がそのまま利用できるため、L2TP や IPsec などを引き続き利用することができます。

So-net による v6 プラスの説明では以下のようにサービスの制約として説明されています2。これは v6 プラスが一つのアドレスを複数のユーザーで共有するサービスであるため、特定のポートを専有することができないことに起因する問題です。

「v6プラス」をご利用の場合、「固定IPサービス」は利用できません。

※PPPoEのIPv4を有効化いただくことでご利用可能です。 (詳しくはこちら)
また、以下に該当するサービスについても、ご利用いただけない場合があります。

  • 特定のプロトコル (PPTP、SCTP) を利用するサービス
  • 利用可能なポート番号が制限されているため、特定のポートを使うサービス
  • IPv4グローバルアドレスを共有するネットワークでは利用できないサービス

概要

フレッツ光では OpenSSH が設定する DSCP 値の関係で SSH のパケットが NGN 網で捨てられてしまう問題が発生します12。端的にはこの記事の指摘通り ssh_config を以下のように修正すれば解決できます。

Host foo.example.com
    HostName  foo.example.com
    IPQoS     0x00

しかしながら、このような設定はルーター側で設定しておいたほうがクライアント側の設定が少なくて済むので楽です。今回は EdgeRouter X のファイアウォール機能を使って、ルーターにやってきた SSH のパケットの DSCP 値を変更するように設定してみます。

環境

モデル

EdgeRouter X 5-Port

EdgeOS

v1.10.9

Linux

ubnt 3.10.107-UBNT

手順

CLI からファイアウォールの設定を行います。
アドレスやポート番号等は適宜読み替えてください。