FreeBSDで行うISPとフレッツスクエア-のマルチセッション

最初にISPおよびフレッツスクウェアにそれぞれ単独で普通に接続できることを確認してください。ここでは詳しくは述べませんが、tunデバイスとnetgraphを使用可能にし、

/etc/ppp/ppp.confと/etc/rc.confで以下のように記述すれば接続できるはずです(NATもpppで行っています)。

ppp.conf

default:
 set device PPPoE:xl0
 set MRU 1448
 set MTU 1448
 set log Phase Chat IPCP CCP tun command
 accept CHAP
 enable lqr
 nat enable yes
 add default HISADDR
 set server /var/run/internet "" 0177
# enable dns

square:
 set authname guest@flets
 set authkey guest

isp:
 set authname yourname@yourisp
 set authkey yourpassword

tunデバイスを複数使えるようにしておきます。 2セッション接続する場合は、tun0とtun1が必要です。

最近のFreeBSDではtunはcloning deviceなので、kernel configに個数を書く必要はなく、/dev/tun*があればOKです。通常はtun0~3があるはずですが、足りない場合は適宜/dev/MAKEDEVを実行しておきます。

ppp.confを編集します。 通常は、add default HISADDRと書き、PPPで接続した相手をデフォルトルーターとしますが、同時に複数接続する場合にはこのままだとうまくいきません。そのため、メインの接続先(ISP)をデフォルトルーターとし、他方(フレッツスクウェア網)については個別に静的ルーティングします。 NTT東日本のフレッツスクウェア網では、2004年8月現在、以下の11個のネットブロックのルーティングが必要となっています。

NTT東日本のフレッツスクウェア網のネットブロックのルーティング

220.210.194.0/25
220.210.195.0/26
220.210.195.64/26
220.210.197.128/25
220.210.198.0/26
220.210.198.128/26
220.210.199.0/27
220.210.199.128/28
220.210.199.160/28

ppp.confの設定例は以下のようになります

default:
 set device PPPoE:xl0
 set MRU 1448
 set MTU 1448
 set log Phase Chat IPCP CCP tun command
 accept CHAP
 enable lqr
 nat enable yes

square:
 set authname guest@flets
 set authkey guest
 add 220.210.194.0/25   HISADDR
 add 220.210.195.0/26   HISADDR
 add 220.210.195.64/26  HISADDR
 add 220.210.197.128/25 HISADDR
 add 220.210.198.0/26   HISADDR
 add 220.210.198.128/26 HISADDR
 add 220.210.199.0/27   HISADDR
 add 220.210.199.128/28 HISADDR
 add 220.210.199.160/28 HISADDR
 set server /var/run/square "" 0177

isp:
 set authname yourname@yourisp
 set authkey yourpassword
 add default HISADDR
 set server /var/run/isp "" 0177

ファイアウォールの設定を変更します。

# 外向きTCPとその応答を許可
add allow tcp from any to 220.210.194.0/25 out xmit tun1
add allow tcp from 220.210.194.0/25 to any in  recv tun1 established
# tracerouteとDNS要求を許可
add allow udp from any to 220.210.194.0/25 33434-33499,domain out xmit tun1
# DNS応答を許可
add allow udp from 220.210.194.0/25 domain to any in recv tun1
# ICMPを許可
add allow icmp from any to any via tun1
# それ以外は禁止
add deny all from any to any via tun1

通常どおりメインのISPに接続します。ここで、pppが使用するtunデバイスを-unitで固定しておくと、予期せぬtunデバイスが使われてipfwで困る事態を防げます。

ppp -unit1 square
Working in interactive mode
Using interface: tun1
ppp on mido>dial
ppp on mido>
Ppp on mido>
PPp on mido>
PPP on mido>

上手く接続できればネットワークインターフェイスとルーティングテーブルが以下のようになっているはずです。

$ ifconfig tun1
tun1: flags=8051 mtu 1448
        inet 220.216.199.15 --> 220.210.195.70 netmask 0xffffffff
        Opened by PID 71646

$ netstat -rn -finet
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            210.138.170.21     UGSc       11   448909   tun0
127.0.0.1          127.0.0.1          UH          2   316667    lo0
192.168.0          link#1             UC          4        0    xl0
192.168.0.3        00:60:97:b7:69:3f  UHLW        0      202    lo0
192.168.0.255      ff:ff:ff:ff:ff:ff  UHLWb       2    22836    xl0
210.138.170.21     210.138.35.209     UH          8        0   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

フレッツスクウェアのサーバー群と通信できるようになります。ただし、この段階ではfletsドメインのホスト名の解決はまだできませんので、基本的にIPアドレスで指定します。ホスト名を解決するには、フレッツスクウェアのネームサーバーを明示的に指定して引く必要があります。ネームサーバーのアドレスは、以前は県によって違っていましたが、現在では東日本全域で同じです。なお、tracerouteやpingは地域や相手サーバーによっては届かないかもしれません。

$ host www.flets 220.210.194.67
Using domain server:
Name: 220.210.194.67
Address: 220.210.194.67#53
Aliases:

www.flets has address 220.210.194.69
$ telnet 220.210.194.69 80
Trying 220.210.194.69...
Connected to 220.210.194.69.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK

ローカルでネームサーバーが動いている場合は、fletsゾーンの正引きとフレッツスクウェア網の逆引きをフレッツスクウェアのネームサーバーにforwardすればOKです。 BINDの場合はnamed.confで以下のように設定します。

キャッシュネームサーバーを動かしていない場合は、 fletsドメインのホストを/etc/hostsに並べるしかないでしょう。

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;
    };
};

ホスト名解決と逆引きが可能になります。

$ host ns1.flets
www.flets has address 220.210.194.67

$ host www.flets
www.flets has address 220.210.194.109

$ host wm9.flets
wm9.flets has address 220.210.195.10

$ host 220.210.194.67
67.194.210.220.in-addr.arpa domain name pointer ns1.flets.

$ host 220.210.194.69
69.194.210.220.in-addr.arpa domain name pointer www.flets.

手動接続

# ppp -ddial -unit1 square

自動接続起動スクリプト

#! /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
created:

Back to top