RTX1100 で v4 PPPoE + DS-Lite をできたが困っている

茨城 OCN の回線品質が微妙に悪い*1のに嫌気が差し、 IIJmio FiberAccess/NF を契約した。ついで v6 インターネットに出られるプレフィックスが IPoE で自動的に降ってくるようになるので、いろいろ楽しくなる。

家のフレッツ回線は 1Gbps タイプなのだが、IIJ が提供している PPPoE 接続の問題で夕方は 10-20Mbps ほどまでに落ち込んでしまうので、v4 インターネットには DS-Lite で出ることにする。DS-Lite そのものに関しては以下の資料が分かりやすい。v6 インターネットへの接続はそもそも回線が空いていることもあり、5-600Mbps ほど出るので、v4 のパケットを乗せても回線の都合で遅くなったりすることはないだろう。

techlog.iij.ad.jp

この記事は DS-Lite が本題ではないので、先に進む。

作りたいネットワーク

  • PC やスマートフォンなどは速い DS-Lite トンネル経由で v4 インターネットに出る
  • CGN が挟まっていると困る自宅サーバーは PPPoE 経由で v4 インターネットに出る/接続を受け入れる
  • 接続を使い分けやすくするために VLAN を切る(DS-Lite トンネルに出したいのは VLAN1 (192.168.1.0/24), PPPoE 経由で出したいのは VLAN2 (192.168.2.0/24))
  • VLAN は RTX1100 のポートVLAN (port-based-ks8995m=divide-network) で実現する
  • v6 に関しては RTX1100 で DHCPv6-PD を受け*2、RA でプレフィックスをみんなに配る

起きている問題

  • VLAN を設定した瞬間にあらゆる通信が激遅になった (10Mbpsぐらい)
  • 192.168.1.0/24 から 192.168.2.0/24 への通信ができなくなってしまった

前者は RTX1100 の性能の問題? 後者の理由は↓。

現在の設定

(1) (2) (3) が重要で、要するに VLAN 1 から来たパケットを forward filter で (デフォルトゲートウェイである) pp 1 ではなく tunnel 1 に流している。

フィルターの適用はルーティングの前に実行され、あらゆる通信が tunnel 1 に向かってしまうので、本来隣にルーティングされるべきパケットがインターネットに出ていってしまい、路頭に迷う*3

# デフォルトゲートウェイは PPPoE
ip route default gateway pp 1 

lan type lan1 port-based-ks8995m=divide-network

# VLAN 1
ip lan1.1 address 192.168.1.1/24
ip lan1.1 forward filter 100 # (1) 192.168.1.0/24 から来るパケットを ip forward filter 1000 (下の (3)) に流す

# VLAN 2
ip lan1.3 address 192.168.2.1/24

ip filter 1 pass * * * * * # (2) 全てのパケットを
ip filter 1001 pass 192.168.2.100 * tcp 55522 *
ip forward filter 100 1 gateway tunnel 1 filter 1 # (3) tunnel 1 に流す

# IPv6 用の設定
ipv6 lan2 address dhcp
ipv6 lan2 dhcp service client

ipv6 route default gateway dhcp lan2
ipv6 prefix 1 dhcp-prefix@lan2::/64
ipv6 icmp echo-reply send on

ipv6 lan2 address dhcp
ipv6 lan2 dhcp service client

ipv6 lan1.1 address dhcp-prefix@lan2::1/64
ipv6 lan1.1 rtadv send 1 o_flag=on

ipv6 lan1.3 address dhcp-prefix@lan2::11/64
ipv6 lan1.3 rtadv send 1 o_flag=on

ngn type lan2 ntt

# PPPoE
pp select 1
 pp name IIJmio_FiberAccess-NF
 ( PPPoE 用の設定 )
 pp enable 1

# DS-Lite トンネル
tunnel select 1
 tunnel name DS-Lite
 tunnel encapsulation ipip
 tunnel endpoint address 2404:8e00::feed:100
 ip tunnel mtu 1500
 ip tunnel intrusion detection in on reject=on
 ip tunnel tcp mss limit auto
 tunnel enable 1

nat descriptor type 1 masquerade
nat descriptor masquerade static 1 1 192.168.2.10 tcp 55522

dhcp service server
dhcp scope 1 192.168.1.10-192.168.1.100/24
dhcp scope 2 192.168.2.10-192.168.2.200/24
dns server dhcp lan2
dns private address spoof on

試したこと

filter の除外条件を設定する

dest が 192.168.2.0/24 だったら tunnel 1 に向けないで通常のルーティングをしてもらえれば良い

ip filter 2 reject * 192.168.2.0/24 * * *

→ 普通にパケットが落とされてどこにも届かなかった。除外みたいなことはできないらしい

VLAN の netmask を変えてみる

DHCP で振るアドレスを 192.168.1.0/16192.168.2.0/16 にして Proxy ARP してもらう。

でも filter の src はなんとなく /24 にする

ip filter 1 pass 192.168.1.0/24 * * * *

→ 意味なし

ポート VLAN とかやめて、ルーターを増やす

RTX1100 を DS-Lite 専用機にして、家にある IX2015 を PPPoE 専用機にする*4。お互いを繋いでスタティックルートを書いてあげる

*1:AWS の経路が悪いのか、遅延・パケロスが酷かった。フォトカツもまともにロードできず困っていた

*2:電話機を接続さえしていないひかり電話契約がある

*3:ちなみに PPPoE のほうで静的 NAPT してあげると DS-Lite トンネルから出て、インターネットを回り、大手町を経由して1m先のサーバーに戻ってこれる

*4:本当は逆が良かったが、IX2015 で DS-Lite が上手く行かなかった