PPPoEマルチセッションでフレッツ網に接続

1.はじめに

最近フレッツでは2つ同時に接続出来るマルチセッションに対応している
これを利用して1つは従来通りのプロバイダー、もう一つをフレッツ網に接続をトライして見る
条件として
・FirewallはIPFを使用の事
・固定IPで有る事
・ipnatを使用
・bindを使用
とします。

2.設定

特にインストールするソフトは無いので、設定に入る
設定ファイルは以下のとおりです
/etc/ppp/ppp.conf を編集する  (注)行頭のスペースは半角で必ず必要
default:
 set device PPPoE:Exl0                                     #WAN側のtun0デバイスに割り当てるIFカードを指定
 set MRU 1454
 set MTU 1454
 set log Phase Chat LCP IPCP CCP tun command
 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
 set ctsrts off
# add default HISADDR   # Add a (sticky) default route     #今までは全てでしたが条件によって分けるのでここでは指定しない
 accept PAP                                                #CHAPの方はCHAOにする
# enable dns                                               #DNSは自前のBINDを使用するので入れない

square:                                                    #フレッツ接続項目
 set authname guest@flets                                  #ユーザー
 set authkey guest                                         #パスワード
 add 220.210.194.0/25   HISADDR                            #フレッツ側のIPを指定
 add 220.210.195.0/26   HISADDR                            #フレッツ側のIPを指定
 add 220.210.195.64/26  HISADDR                            #フレッツ側のIPを指定
 add 220.210.197.128/25 HISADDR                            #フレッツ側のIPを指定
 add 220.210.198.0/26   HISADDR                            #フレッツ側のIPを指定
 add 220.210.198.128/26 HISADDR                            #フレッツ側のIPを指定
 add 220.210.199.0/27   HISADDR                            #フレッツ側のIPを指定
 add 220.210.199.128/28 HISADDR                            #フレッツ側のIPを指定
 add 220.210.199.160/28 HISADDR                            #フレッツ側のIPを指定
 set server /var/run/square "" 0177                        #pid指定

dion:                                                      #自分のプロバイダー設定
 set authname **********@bda.dion.ne.jp                    #ユーザー
 set authkey *******                                       #パスワード
 add default HISADDR                                       #square以外のはこちらを通る形になる、かならず後に書くこと
 set server /var/run/asahi "" 0177                         #pid指定

/etc/ipf.rules で以下のように500と600を追加
#################################################
# incomming (group 500) Flets Square tun1
#################################################
pass in on tun1 all head 500

   ・
   ・
  以下省略、オリジナルはグループ100を引用する
   ・
   ・

#################################################
# out going (group 600) Flets Square tun1
#################################################
pass out on tun1 all head 600

   ・
   ・
  以下省略、オリジナルはグループ200を引用する
   ・
   ・

/etc/ipnat.rules を下記のように修正
map tun0 192.168.0.0/24 -> aaa.bbb.ccc.ddd/32 proxy port ftp ftp/tcp
map tun0 192.168.0.0/24 -> aaa.bbb.ccc.ddd/32 portmap tcp/udp auto
map tun0 192.168.0.0/24 -> aaa.bbb.ccc.ddd/32
map tun1 192.168.0.0/24 -> 0/32 portmap tcp/udp auto
map tun1 192.168.0.0/24 -> 0/32
aaa.bbb.ccc.dddの部分はプロバイダー接続側のIP番号を入れる
これが無いと全てプロバイダー側に行ってしまうのでフレッツ網へいけなくなる
よって固定IPが好ましい
もし、固定変換のNATを使用していない場合は(rdrがそうです)ipnatではなく
下にあるppp_natを使用するのがよろしいでしょう。また動的IPの場合にもいいかもしれません。

/etc/rc.conf のppp部分
ppp_enable="YES"       #もちろんYes
ppp_mode="ddial"        #ここも変らず
ppp_profile="-unit0 dion"  # -unitはton0になるように決めつける
ppp_nat="NO"         #pppのnatではなくipnatを使用するのでここはNo

/usr/local/etc/rc.d/square.sh を新規作成
#! /bin/sh
ENTRY=square
PORT=/var/run/square
case "$1" in
start)
      /usr/sbin/ppp -ddial -unit1 $ENTRY > /dev/null && echo -n " PPP"
      ;;
stop)
      /usr/sbin/pppctl $PORT quit all
      ;;
restart)
      /usr/sbin/pppctl $PORT close
      ;;
*)
      echo "Usage: `basename $0` {start|stop|restart}" >&2
      exit 64
      ;;
esac
      exit 0
これがあれば、自動で接続してくれます

あとは名前解決が必要になるのでbindを設定します
/etc/namedb/name.conf に追加
options {
                :
                中略
                :
        listen-on {
                !220.216.128.0/17;
                any;
        };
                :
                中略
                :
};

zone "flets" {
        type forward;
        forward only;
        forwarders {
                220.210.194.67; // ns1.flets
                220.210.194.68; // ns2.flets
        };
};
zone "194.210.220.in-addr.arpa" {
        type forward;
        forward only;
        forwarders {
                220.210.194.67;
                220.210.194.68;
        };
};

4.接続

記入ミスが無ければ再起動すれば接続します
ifconfigで確認して見ましょう
#ifconfig
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1454
inet ***.***.***.*** --> ***.***.***.*** netmask 0xffffff00
Opened by PID 231
tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1454
inet 60.***.***.*** --> 220.210.***.*** netmask 0xffffff00
Opened by PID 544
このようにtun0がプロバイダー、tun1がフレッツ網になればOKです

あとはルーティングがちゃんと行っているか確認する
$ netstat -rn -finet
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            ***.***.***.***    UGSc       11   448909   tun0
中略・・・
220.210.194/25     220.210.195.70     UGSc        2      292   tun1
220.210.195/26     220.210.195.70     UGSc        0        0   tun1
220.210.195.64/26  220.210.195.70     UGSc        0        0   tun1
220.210.195.70     220.216.199.15     UH         16        3   tun1
220.210.197.128/25 220.210.195.70     UGSc        0        0   tun1
220.210.198/26     220.210.195.70     UGSc        0        0   tun1
220.210.198.128/26 220.210.195.70     UGSc        0        0   tun1
220.210.199/27     220.210.195.70     UGSc        0        0   tun1
220.210.199.128/28 220.210.195.70     UGSc        0        0   tun1
220.210.199.160/28 220.210.195.70     UGSc        0        0   tun1
このようにtun1がフレッツ網の時使用されると言う形になればOKです

さて。これでうまくいくはずですので、まずはnslookupなどでwww.fletsなどを調べて見てください
ちゃんと帰って来ればあとはブラウザで開いて見れば問題無いはずです