IX2105でIPoEとPPPoEを同時に使用する

はじめに

以前記事にしたように、IIJのFiberAccess/NFではIPoEとPPPoEを両方使うことができます。
家庭用ルーターではどちらか片方しか使えないことが多いのですが、IX2105のような業務用ルーターでは同時に使うことができます。
先日(と言っても結構時間が空いてしまいましたが)その設定をしたので、内容を記録しておこうと思います。
sublimer.hatenablog.com

環境

IPoEの設定

NECのドキュメントどおりに設定すれば接続できます。
jpn.nec.com
設定内容は、ひかり電話の契約の有無で微妙に違います。
ひかり電話契約がない場合は、IPv6 RAでIPv6プレフィックスの払い出しが行われます。
一方で、ひかり電話契約がある場合は、DHCPv6-PDで払い出しが行われます。
私は前者に該当するので、IPv6 RAでの設定を行いました。
設定は、基本的にはドキュメントの内容をコピペでOKです。
AFTR-DOMAINNAMEの箇所はgw.transix.jpとしました。

PPPoEの設定

こちらもマニュアル通りに設定するだけでOKです。
特に複雑なことはなく、既存のIPoEのコンフィグに追記する形でOKです。
一部を抜粋すると、

ppp profile gigaethernet0.1
  authentication myname <username>
  authentication password <username> <password>

こんな感じでPPPのアカウント設定を書き、

interface GigaEthernet0.1
  description IIJ
  encapsulation pppoe
  auto-connect
  ppp binding gigaethernet0.1
  ip address ipcp
  ip mtu 1454
  ip tcp adjust-mss auto
  ip napt enable
  no shutdown

こんな感じでPPPoEのセッションを張るように設定してあげればOKです。

セグメントごとにIPoEとPPPoEを振り分ける

あくまでも一例ですが、

  • 172.16.0.0/24→IPoE
  • 172.16.1.0/24→PPPoE

のように振り分けたいときは、以下のように設定します。

Tunnel0.0(IPoE)をデフォルト設定にする

ip route default Tunnel0.0

PPPoEを使いたいセグメントを設定

ip access-list server permit ip src 172.16.1.0/24 dest any

設定したセグメントのみPPPoEを使うように設定

route-map server_route_map permit 10
  match ip address access-list server
  set interface GigaEthernet0.1

余談ですが、コンフィグはかなり長くなるので、VS Codeなどで書いて一気にルーターに流し込むと効率的に設定できます。
IXのコンフィグは、書式がCiscoに似ているので、この拡張機能を入れておくと見やすくなります。
marketplace.visualstudio.com

動作確認

一通り設定すればIPoE、PPPoE両方使えるようになっているはずです。
下記のようなサイトでグローバルIPを調べ、ホスト名(FQDN)の末尾が.shared.user.transix.jpになっていれば、IPoE経由でインターネットに接続できています。
一方、末尾が.iij4u.or.jpのようになっていれば、PPPoE経由でインターネットに接続していることになります。
www.cman.jp

今後の作業

これらの設定をしたところ、以前はできていたインターネットからルーターに対してのpingに応答ができなくなってしまいました。
原因調査をしっかりしたわけではないのですが、ip route defaultでデフォルトをIPoEにしたのが原因と予想しています。
transixはIPv4 over IPv6DS-Liteを使っているため、NATはVNE側で行われ、我々は手出しできません。(CGNってやつです)
今回はPPPoEも同時に使えるように設定したので、PPPoEのグローバルIPアドレスに対してpingを送れば、ルーターまでは到達できます。
しかし、デフォルトがIPoEなので、結果的にPPPoE→ルーター→IPoEの流れでパケットが送られていると考えています。
これはしっかり検証したわけではないのですが、ip route default GigaEthernet0.1のようにPPPoEをデフォルトとし、今回の設定とは逆にIPoEを使いたいセグメントを指定してあげることで、きちんとpingの応答ができるのではないかと考えています。
これは要検証なので、今後試してみて正常に動作したら本記事に追記したいと思います。

7/3追記

pingが通らない件ですが、PPPoE経由で来たpingのICMPパケットがIPoE経由で返されていることが原因でした。
logging subsystem icmp debugで詳細なログを出力するようにしたところ、ICMPパケットが到達していることは確認できました。
jpn.nec.com

この時点で、インターネット→ルーターの経路上は問題がなく、ルーター→インターネットのどこかに原因があることが分かりました。
仮設を検証すべく、以下のように設定を変更しました。

ip route default GigaEthernet0.1
route-map server_route_map deny 10
  match ip address access-list server
  set interface Tunnel0.0

デフォルトをPPPoEとし、サーバーのセグメントにマッチしない場合はIPoE経由にする設定です。
その結果、無事にpingの応答が返るようになりました。
どうやら、route-mapの条件判定にルーター自身から送出されるパケットは引っかからないようです。

終わりに

IX2105、かなり古い機種ですがギガビット対応していたり温度の監視ができたりと非常に高機能な印象です。
IPv6にも対応しており、普段使いする分には負荷もそこまで高くならないので非常に良いルーターだなと思っています。
中古であればインターネットオークションで数千円で購入でき、色々設定して遊べるので、機会があればぜひ使ってみてください。