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