VyOSでIIJmioのDS-Lite + PPPoE ハイブリッドを実現する

目的

IPv4は高速なDS-Liteを使いたい。でもポート開放も使いたい。それをなんとか1つのルーターで自動的にやってくれないか? というワガママを実現します。

注意

現時点では以下の問題点があります。
PBR(Policy Based Routing)を使うのでVyOSのバグ(?)対策ができなくなります。
→PPPoE側のMTU調整ができなくなるので、各端末側のMTUを調整する必要があります。誰か上手い解決方法があったら教えて下さい。

実現方法

ネットワークの構成を図のように構成にします。PPPoEとDS-Lite側のNICを分けたのはPPPoEの上りトラフィックを計測したいためです。(IIJではPPPoEの上りトラフィックが15GB/日という制限があります)
DS-Liteの実現方法はこちらの方を参考にしました。よってその辺りは書きません。

設定1 NATは普通に書く

普通のPPPoE時と同じく必要に応じて書きます。例えばウェブ公開、マスカレードなどはこうします。
destination {
         rule 10 {
             description www
             destination {
                 port 80
             }
             inbound-interface pppoe0
             protocol tcp
             translation {
                 address 192.168.1.10
             }
         }
     }
     source {
         rule 10 {
             outbound-interface pppoe0
             source {
                 address 192.168.1.0/24
             }
             translation {
                 address masquerade
             }
         }
     }

設定2 静的ルートを設定する

ルーティングの仕方を2系統記述します。例では計3つ設定していますが、どうもデフォルト+table 1では上手く行かなかったからです。tun0行きがDS-Lite、pppoe0行きがPPPoE行きです。
protocols {
     static {
         interface-route 0.0.0.0/0 {
             next-hop-interface tun0 {
             }
         }
         table 1 {
             interface-route 0.0.0.0/0 {
                 next-hop-interface pppoe0 {
                 }
             }
         }
         table 2 {
             interface-route 0.0.0.0/0 {
                 next-hop-interface tun0 {
                 }
             }
         }
     }
 }

設定3 PBRを設定する

通信内容に応じてルーティングテーブルを切り替えます。
考えられるケースを3パターン考えました。

case 1. 対象となる端末は全てPPPoE側に流す

PS4などのゲームはこちらに該当します。送受信でIPが変わると困るので。
ここではルーティングしか書いてませんが、PS4向けのNATもちゃんと割り当ててください。
set route ROUTE rule 10 description 'PS4'
set route ROUTE rule 10 protocol 'all'
set route ROUTE rule 10 set table '1'
set route ROUTE rule 10 source address '192.168.1.11'
元IPを見てルーティングテーブルをPPPoE側に切り替えます。

case 2.返答のみPPPoEで返し、それ以外はDS-Liteを使う

サーバー機などはこちらがいいかと思います。例えばwebサーバーのリクエスト(80ポート)などはPPPoE側で返答し、それ以外の通信はDS-Liteを使います。
一つ注意点があります。
この返答パケット以外はDS-Liteに流れるため、Pingなどでの動作チェックしてもそれはDS-Lite側というのを忘れてないでください。
set route ROUTE rule 20 description 'www'
set route ROUTE rule 20 protocol 'tcp'
set route ROUTE rule 20 set table '1'
set route ROUTE rule 20 source address '192.168.1.10'
set route ROUTE rule 20 source port '80'
アドレス+ポート指定でルーティングすることで、特定の応答だけPPPoE経由にします。

case 3.全てDS-Liteを使う

普通のクライアント機はこれに該当します。
set route ROUTE rule 1000 description 'OTHER'
set route ROUTE rule 1000 protocol 'all'
set route ROUTE rule 1000 set table '2'
ルールの最後に記述して該当しないものは全てDS-Liteに流すようにします。

MTUを設定する

前述の問題点の通り、PPPoE側へ出力する端末はMTUを1500ではなく、1454に絞ってください。
Windowsでは以下のコマンドを使用します。
netsh int ipv4 show int
これで対象となるNICのIdxを確認し、以下のコマンドで設定します。
netsh int ipv4 set int "インターフェース番号" mtu=1454

コメント

このブログの人気の投稿

カスタムメイド3D2用プラグインを作りました

VyOS 1.1.1とSoftEther VPN Serverで自宅VPN最速設定

プロバイダをオープンサーキットからIIJへ変更