おうちのネットワークをIPoE/PPPoEのデュアルスタックにした話

MAP-Eの特権を投げ捨てた、とも言うかもしれません。

0. はじめに

ISPの回線終端装置がクリティカルポイントとなり、特に混雑する時間帯は通信速度が低下しやすいPPPoEと比べ、その回線終端装置を経由することなくインターネットに接続されるIPoEは、比較的高速で安定した通信が可能となります。

しかし、IPoEで接続された自宅のネットワークに、例えばDDNS等を用いてIPv4でアクセスしたい場合などにはそれなりに不都合が生じます。IPoE通信はそもそもIPv6な通信である以上、IPv4を用いた通信はIPv4 over IPv6として通信されることになるためです。

例えば日本国内でよく見るIPv4 over IPv6の方式にDS-Liteが挙げられますが、これはそもそも各契約者(ユーザ)の自宅ルータに対してIPv4アドレスを割り当てないため、そもそもIPv4アドレスでアクセスすることができません。
もう一つ、国内でよく見るIPv4 over IPv6の方式としてはMAP-Eがありますが、これは1つのグローバルIPv4アドレスを複数のCE(Customer Edge)ルータで共有し、CEルータのIPv6アドレスを基に決定された240のポートが割り当てられます。これにより、IPv4アドレスの特定のポートとCEルータが結び付けられ、当該ポートへの通信を該当するCEルータに転送することでIPv4通信を実現します。そのため、自宅へIPv4アドレスでアクセスはできるのですが、それに使えるポートは限られてしまいます。(ポートを間違うと、その通信は別な人の家へ飛んで行く可能性があります。SSH鍵なんか飛ばしたら最悪ですね)。

http://techlog.iij.ad.jp/archives/1254 より

これによって、例えば外部からのアクセスを受け付ける機能を持つNAS等や、一部のオンラインゲームにおいては、その機能が一部正常に使えなかったりすることが起こりえます。

そうなると、任意のポートで好き勝手通信を受けたいことが考えられる場合はPPPoEでインターネットに接続するのがリーズナブルです。ですがPPPoEには最初に述べた通り、混雑する時間帯は通信速度が低下しやすいという、他を補ってあまりある欠点があります。というか、PPPoEに特有の極端な速度低下を危惧してIPoE接続にするケースがほとんどなのではないでしょうか。すなわち、IPoEの欠点を解消するためにPPPoEにするということは本末転倒なのです。

IPoEによる高速で安定した通信の恩恵を受けつつ、PPPoEのような通信ポートの柔軟さも欲しい……そんな都合のいい、何でもありの方式存在するんでしょうか?

するんですよ。

両方つないでしまえばいいのです。
(註:プロバイダによっては、GMOのようにIPoEとPPPoEの同時接続を認めていないところもあります。)

1. 登場人物

NEC Platforms Aterm WX3000HP

就職して一人暮らしを始めて2年以上、通信量無制限(だけど3日で10GB通信すると夜間に通信制限がかかるでおなじみ)のWiMAX2+モバイルルータで自宅のネットワークを賄ってきたが、COVID-19の影響で2020年11月半ばから在宅勤務となることが決定し、これ以上WiMAXルーター生活はもう無理だと悟ってNTTへフレッツ光ネクストの申込を済ませた直後、通販で購入。

Buffalo WSR-1800AX4S

在宅勤務開始から半年が経った2021年4月に転居、相変わらず在宅勤務ではあったのだが、家が広くなった関係でネットワーク接続を無線LANに切り替えていた。しかし前述のWX3000HPとノートPCを無線LANで接続したうえで勤務先のVPNへ接続すると、たびたび家全体のネットワークが落ち、ルータの再起動をしないと復旧しないという事象に遭遇。その現象に2時間おきに立て続けに襲われた2021年11月のある日、怒りのあまり退勤直後に通販サイトで購入。

1年の間にルーターを2台買ったバカ。ちなみにWSR-1800AX4Sを購入した翌月には在宅勤務が終了した。

そういったわけで、私の家にはルーターが2台(とバカが1匹)あったわけです。こいつらをうまいこと使ってうまいことやっていこうと思います。

2. 理想と現実

ようはこんな感じになってほしいわけです。

ネットワーク図ってこういう使い方でいいんだっけ

要望としては、IPoEとPPPoE、2種類のセッションを張った2台のルータを、同一のネットワークに接続したいということです。
セキュリティ面を考えれば、外部に公開するPPPoEなネットワークとIPoEなネットワークを(どうせルータが物理的に分離しているのだから)分離するべきなのかもしれませんが、例えばIPoEな普段使いのネットワークからPPPoEなネットワークのマシンをリモートで管理できない、PPPoEネットワークに接続したマシンがファイルのダウンロード(例えばpkg updateやdocker pull)をしようとした際に(僅か10cm脇にあるどころか、GE-ONUから先は同じ線を流れる)高速なIPoEネットワークの利点を活用できないことから却下しています。
こうしておけば、IPv4アドレスでPPPoEセッション経由で入ってきた通信を、自宅内のinternalネットワーク上に受けることができます。また、サーバたちのデフォルトゲートウェイをrouter0側にしておけば、外からの通信(アクセス)はPPPoE経由で、サーバから外への通信(ダウンロード等)は高速なIPoEで行うことができます。
2台のルータをいっぺんに接続する関係上、どちらか一方のDHCPサーバはオフにしておく必要がありますね。

今回は、より高速な通信が可能なWX3000HPでIPoE接続、(変な使い方をするので)ログデータの出力が可能なWSR-1800AX4SをPPPoE接続して利用します。物理的な構成は次のようになるでしょうか。

たぶん配置図の本来の使い方じゃない

見どころは、PPPoEルータとなるWSR-1800AX4SのWANポートとLANポートを、どちらもWX3000HPのLANポートに接続するところになると思います。少しネットワーク機器を触ったことがある方であれば、一瞬ループ接続に見えるので冷や汗をかいてしまうかもしれませんが、実際にはWX3000HPのLANポートとWSR-1800AX4SのWANポートの間を流れる通信はPPPoE通信であり、WSR-1800AX4SのWANポートはLANの通信を喋ることがないのでループにはなりません。冷や汗をぬぐってから実際に設定していきましょう。

以下、具体的な接続の確立手順においては一般化のため、ここでいうWX3000HPを上位、WSR-1800AX4Sを下位として記述します。長いし。

1. 上位ルータをIPoEで接続する

こうなります。

当たり前体操

まずこれで接続できないと始まりません。というか、ここまでは既に組んである構成です。
ただし、上位ルータ側でPPPoEブリッジ(PPPoEパススルーという設定項目なルータもあるかも)を有効にしておく必要があることに注意してください。これが設定されていないと、下位ルータからのPPPoE接続が確立できません。

WX3000HPの例

2. 下位ルータをPPPoEで接続する

こうする

いよいよ下位側のルータをPPPoEで接続していきます。上位側のルータでPPPoE通信をLAN側にブリッジするよう設定されていることを確認したら、ひとまず普通に接続してみましょう。
ただし、下位ルータの動作モードを自動にし(WSR-1800AX4Sでいうと、Internetの設定が「インターネット@スタートを行う」になっ)ていると、上位側ルータのDHCPサーバを検出してアクセスポイントモードで動こうとする場合があります。そのため、下位ルータの動作設定はマニュアルモードに設定し、回線自動検出はなるべく切っておくほうがいいかもしれません。

3. 下位ルータに小細工をする

家庭用ルータを利用するようなネットワークにおいては、1つのプライベートIP空間に対してルータは1台のみという構成が一般的です。そのため家庭用ルータは、デフォルトでは自分こそがこのネットワークの中で唯一無二のルータだと思いこんで振る舞うようになっている場合が多いです。

しかしこの先、上位ルータと下位ルータはプライベートIP空間を共有することになります。さきに述べた一般的な構成での使い方をしないため、ルータ(特に下位側)に対して現実(のネットワークに即した設定)を教えこんでやる必要があります。

  • 下位ルータのIPアドレスを、上位ルータのネットワーク設定に合わせて変更する
  • 下位ルータのDHCPサーバ機能をオフにする
  • 下位ルータのWAN側MACアドレスとLAN側MACアドレスを確認し、重複しないよう変更する

IPアドレスは、上位となるルータが解決できる範囲で、かつ上位のルータと重複しないよう決めればよいと思います。DHCPサーバを切るのも当たり前といえば当たり前です。ただし、DHCPサーバを切ってからIPアドレスを変更すると、デフォルトルート等の配信がされずに通信が迷子になる気がするので、IPアドレスを変更してからDHCPサーバをOFFにするほうがいいと思います。

ハマりどころで多いのは最後、MACアドレスかもしれません。特にバッファロー製のルータは、デフォルトではWAN側のMACアドレスとLAN側のMACアドレスが同一になっているようです。そのままでは、一見設定がうまく行ったからと思って最後、上位ルータのLANポートと下位ルータのLANポートを接続した瞬間、上位ルータのLANポートからは同じMACアドレスを持つ複数のNICが見つかる形となるために、正常な通信を行うことができなくなります。必ず下位ルータのWAN側/LAN側のMACアドレスを確認し、重複している場合はどちらかのMACアドレスを変更するようにしてください。どちらのMACアドレスも変更できない場合は……諦めてください。

ちなみにもうお気づきとは思いますが、私はMACアドレスのところでしっかりハマりました。

4. 完成させる

再掲・最終形態

最後に、上位ルータのLANポートと下位ルータのLANポートを接続します。ループ通信になりそうで冷や汗をかきそうですが、前述のとおりその必要はありません。少しばかりの背徳感を感じつつ最後の作業を終えてしまいましょう。

接続後、上位ルータから出ているネットワークに接続し、さきに設定した下位ルータ用のIPアドレスにアクセスできれば成功です。ついでに下位ルータから伸ばしたネットワークから上位ルータにアクセスできるか、インターネットにアクセスできるか確認しましょう。

3. おわりに

これで、IPoE/PPPoEデュアルスタックのネットワークが完成しました。今回の構成の場合、デフォルトゲートウェイが上位ルータであればIPoE、下位ルータであればPPPoEでの通信になると思います。デフォルトDNSについてはどちらでもいいと思いますが、基本的には上位ルータに合わせておけばいいと思います(根拠なし)。

うまくいくと以下のようになります。

デフォゲを上位(IPoE)に向けた場合。JPIX(旧JPNE)のホストを通っていることがわかる。
同じく下位(PPPoE)に向けた場合。OCNのPPP-NGNゲートウェイを通っていることがわかる。っていうかいつの間にinfowebじゃなくなったんだnifty。

なにもルータを2台用意せずとも、例えば常時稼働しているサーバにPPPoEセッションを受けるためのdockerコンテナを立てておき、そこから宅内のコンテンツにアクセスさせるなどの使い方もできると思います。あるいは前述のNAS等からは、PPPoEセッションを張ることのできる製品が存在するかもしれません。

またさきにも述べましたが、プロバイダによってはGMOのようにIPoEとPPPoEの同時接続を認めていないところもあるようです。うまくいかない場合は、ISPに問い合わせるなどした上で、場合によってはプロバイダの変更なしにNASやらオンラインゲームはうまいこと使えないと諦める必要があるかもしれません。

というか、IPv4 over IPv6でIPv4の固定IPを持つためのRFC2473(Generic Packet Tunneling in IPv6 Specification)ってのがあるんだし、どうしてもって場合はそれを使って固定IPv4アドレスを実現しているZOOT NATIVE 固定IPなどの契約を検討してもいいかもしれません。

というわけで、「一部ポートしか使えないとはいえ、一切IPv4でアクセスできないDS-Liteはいやだ!」って言ってMAP-Eなプロバイダを契約したのに、結局MAP-EでのIPv4アクセスでなくデュアルスタックという力技で解決することにした挙げ句、設定で1週間くらい沼っていた私は、一体何やってんだろうなぁって話でした。

コメントを残す