Server By FreeBSD

PPPoE

ppp(8) を利用するための設定を行う。
ppp とは Point to Point Protocol の略で二点間を直接接続するプロトコル。 主に電話線を利用して IP 接続を利用するために利用されてきたが、 最近の aDSL 接続では多くの ISP が PPPoE(PPP over Ethernet) として利用している。
PPPoE は簡単に言うと PPP プロトコルを Ethernet 上を通す事により認証する技術。
ここでは ISP に対して通常の PPPoE 接続をしたまま、 NTT がフレッツユーザ向けに展開しているフレッツスクエアに ppp の接続先を変更しないで接続するためのマルチセッション PPP の設定を行う。

設定

設定ファイルは /etc/ppp/ppp.conf を使用する。 このファイルで PPPoE 接続で使用インタフェースや各種オプション、 そして昨今有名になった MTU 等を設定する。

default:
        set device PPPoE:インタフェース               # PPPoE 接続で使用するデバイス名称
        set mru 1438                                  # MRU(最大受信単位)を 1438 バイト
        set mtu 1438                                  # MTU(最大送信単位)を 1438 バイト
        set log Phase tun command                     # ログ出力項目の設定
        accept CHAP                                   # 認証方式は CHAP のみ
        enable lqr                                    # Link Quality Requests を使用する
        set speed sync                                # 同期デバイスとして使用
        set timeout 0                                 # アイドルタイマ機能を使用しない
        set ctsrts off                                # ハードウェアフロー制御を off にする

provider:
        set authname ユーザID                         # ISP に接続するための ID
        set authkey パスワード                        # ISP に接続するためのパスワード
        add default HISADDR                           # 接続先を default route に設定する
        set mode ddial                                # 接続後にモードを ddial に設定する

square:
        set authname ユーザID                         # フレッツスクエアに接続するための ID
        set authkey パスワード                        # フレッツスクエアに接続するためのパスワード
        nat enable yes                                # フレッツスクエア宛は ppp の nat 機能を利用する
        set server /var/run/square "" 0177
        add 220.210.194.0/25   HISADDR                # フレッツスクエア宛の静的ルーティング
        add 220.210.199.160/27 HISADDR
        add 220.210.196.192/27 HISADDR
        add 220.210.196.0/25 HISADDR
        add 220.210.196.128/26 HISADDR
        add 220.210.198.0/26 HISADDR
        add 220.210.199.144/28 HISADDR

default:provider:square: で始まる行は必ず行頭から始め、 それ以外の行は必ず先頭にスペースかタブを入れなければならない。

ルーティング情報は 2009/12/01 現在の情報であり、 変更になる可能性がある。

ISP への接続

設定を行った後 ppp(8) コマンドを実行して接続動作を確認する。
動作が問題ない場合は 起動時に ppp 接続が開始される様 /etc/rc.conf に以下の設定を追加する。

ppp_enable="YES"                           # ppp を有効にする
ppp_mode="background"                      # ppp は background モードで実行
ppp_profile="-unit0 provider"              # 使用するプロファイルを指定
ppp_nat="NO"                               # ISP 接続では ppp による nat は使用しない。

当初、ppp_modeddial を指定していたが、 そうすると ppp 接続が開始される前にバックグラウンドで実行してしまうため ppp で使用する tun デバイスが生成される前に処理が進行してしまうため、 正常にネットワークサービスが提供できなくなってしまう。 そこで、接続開始までは background を指定し 接続が確立した後で ddial を設定する様にする。

フレッツスクエアへの接続

/usr/local/etc/rc.d/square を作成し、 起動時に自動接続される様に設定する。
#!/bin/sh
#
# PROVIDE: square
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable connectiong flets square:
# square_enable (bool):     Set it to "YES" to enable connecting flets square
#                           Default is "NO".
# square_flags (str):       Set to "" by default.
#                           Extra flags passed to ppp
#

. /etc/rc.subr

name="square"
rcvar=`set_rcvar`
command="/usr/sbin/ppp"
pidfile="/var/run/square.pid"

load_rc_config $name

: ${square_enable="NO"}
: ${square_flags=""}

run_rc_command "$1"

作成した起動スクリプトは最近の FreeBSD の流儀を継承した作りなので、 /etc/rc.conf に自動起動するための設定を追加する。

square_enable="YES"                        # square 接続を有効にする
square_flags="-ddial -unit1 square"        # 使用するプロファイルを指定

フレッツスクエアのルーティング

フレッツスクエアのルーティング情報は フレッツスクエアのサイト にて確認できるが、 フレッツスクエアに接続した後だと http://routing.flets/routing.html から 多少加工に適したフォーマットにて取得可能なので、 以下のスクリプトを利用して /etc/ppp/ppp.conf 形式のルーティング情報を自動生成できる。
#!/usr/bin/perl
if(open(IN, "fetch -q -o - http://routing.flets/routing.html|")){
    while(<IN>){
        if(/^Route.*Add,(\d+.\d+.\d+.\d+),\d+.\d+.\d+.(\d+).*/){
            for($n = $2, $m = 24; $n & 0x80; $n <<= 1){
                $m++;
            }
            print "$1/$m\n";
         }

    close(IN);
}

Last Update: 4 Feb. 2010