yas.muトップ > FreeBSDを用いた 〜 家庭用ネットワーク環境の構築

FreeBSDを用いた フレッツ・スクエアとインターネットを同等に使える 家庭用ネットワーク環境の構築

2002-10-13初版
2002-10-20資料・コメントを追加
2003-3-23ネームサーバアドレスの記述変更
2003-12-1下記青時部分を追加

h@yas.mu 檜垣泰彦
本ドキュメントはリンクフリー・無保証です。 内容についての間違いのご指摘やサジェッションは h@yas.mu まで。 なお、その後、 2003年9月にNTT東日本のフレッツスクウェア網のアドレスが変更になり、 ここに記載してあるものと異なっています。 特にルーティング関連では少し厄介なことになっていますのでご注意ください。 私は諸事情から、同時期にブロードバンドルータBA8000Proを使った環境に 移行してしまったため、 ここに記載した方法で変更後のフレッツスクエアへ接続することは 実際に行っていませんが、 変更点を反映すれば同様に接続可能であると思われます。
FreeBSD搭載のPCをADSL接続ゲートウェイとして用いる方法で、 フレッツ・スクエアとインターネットを同時に使える 家庭用ネットワーク環境を構築した。 ppp(8)を使用しフレッツ・スクエアとプロバイダ両方へセッションを張り、 natd(8)も2つ個別に起動することによって実現した。 インターネットへは常時接続、フレッツ・スクエアへはオン・デマンドで 接続し、タイムアウトで自動切断する。 名前空間の問題はローカルにnamedを立ち上げ、 フレッツ・スクエア内の問い合わせだけをフレッツ用のネームサーバへ 転送することによって、 見かけ上インターネットの世界に「flets」というドメインが存在するかのように して解決した。

1. はじめに

フレッツADSLで固定IPアドレス対応のプロバイダと接続し、 サーバを上げている場合など、これまでフレッツ・スクエアへ切り替えて 使用することは不可能に近かった。 2002年10月より、フレッツADSLでの同時セッション数が2に引き上げられた。 特にどうしても使いたいというわけでもなかったが、 これまでは利用できなかったフレッツ・スクエアを使ってみたくなったので、 インターネットへのアクセスと共存できる方式で環境を構築した。 フレッツ・スクエアにも記述があるように、 複数セッションに対応ルータを用意すれば実現できるわけだが、 ここではFreeBSD搭載のPCをゲートウェイとして用いる方法をとった。 FreeBSDにおける具体的設定を紹介する。

2. 構成

フレッツ・スクエアとインターネットの同時利用
図1. フレッツ・スクエアとインターネットの同時利用
# /etc/rc.conf (追加内容)

ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="NO"
ppp_profile="wakwak"

gateway_enable="YES"
firewall_enable="YES"
firewall_type="/usr/local/etc/ipfw.conf"

named_enable="YES"
図2. rc.confに追加する値
図1に示すように、 FreeBSDのPC(Celeron 900MHz)にネットワークカードを2枚搭載し、 片方をADSLモデム用(ed0)、 片方を家庭内LAN用(fxp0)として使用している。 なおFreeBSDのバージョンは4-STABLEであり、 2002-10-12時点で4.7-STABLEである。 ISPとしてはWAKWAKを使用、 接続もとの住所は横浜なのでここで示したフレッツ・スクエアへの 接続情報は神奈川県のものである。
図2に/etc/rc.confに追加すべき関連定義を示す。 natd(8)はppp.linkupから起動するのでここではppp_nat="NO"とする。 プロバイダへの接続用ppp(8)は rc.conf(5)で記述し、/etc/rc.networkから起動する。 フレッツ・スクエアへのpppは後述のように/usr/local/etc/rc.d/から起動する。 ファイアウォールの設定は ipfw.conf中に記述する。 インターネットの世界とフレッツ・スクエアの世界の名前空間を切り替えるため、 ローカルにBIND8(またはBIND9)によるnamed(8)を上げてゲートウェイ及びLAN側からは それを参照する。

3. フレッツ・スクエア接続のための情報収集

NTT東日本のWebページフレッツ・スクエアについてから、 フレッツ・スクエアへPPPoEで接続するための情報を収集した。 必要な情報は、接続用に使用するユーザ名、パスワード、DNSサーバアドレスである。 表1にこれらの値を示す。 またフレッツ・スクエア接続用のネットワークとしては、全国的に クラスBのプライベートアドレス(172.16.0.0/12)を使用しているらしいことが分かる。 また、フレッツ・スクエア内ではwww.flets, speed.flets等のように 「flets」が使用されている。
表1. フレッツ・スクエア接続のための値
ユーザ名 guest@flets
パスワード guest
DNSサーバアドレス 172.26.35.131、172.26.35.132 (神奈川県の場合*1)
*1: 変更になる場合があるので注意。

4. /etc/ppp まわりの設定

図3に/etc/ppp/ppp.confの内容を示す。 エントリwakwakがプロバイダ接続用で、 /etc/rc.networkから起動されるppp(8)で指定される。 その結果、仮想インタフェースtun0が生成される。 もうひとつのエントリfletsがフレッツ・スクエア接続用で /usr/local/etc/rc.d/flets-ppp.sh(図4)から起動されるpppで指定される。 その結果、仮想インタフェースtun1が生成される。 プロバイダ側は常時接続(-ddial)、 フレッツ・スクエア側はオン・デマンドでの接続(-auto)で 600秒(10分)トラフィックがないと自動切断される。 表2に関連するネットワーク・インタフェースをまとめて示す。
# /etc/ppp/ppp.conf

default:
    set device PPPoE:ed0
    set mru 1454
    set mtu 1454
    set log Phase tun command
    set dial
    set login
    set ifaddr 10.0.0.1/0 10.0.0.2/0
    enable tcpmssfixup

wakwak:
    add default HISADDR
    set authname プロバイダ接続用ID
    set authkey プロバイダ接続用キー

flets:
    set timeout 600
    add 172.16.0.0/12 HISADDR
    set authname guest@flets
    set authkey guest
図3. ppp.conf の内容
#!/bin/sh
# /usr/local/etc/rc.d/flets-ppp.sh

IF=tun1

case $1 in
start)
        echo -n " flets-ppp"
        /usr/sbin/ppp -quiet -auto flets
        ;;
stop)
        if [ -f /var/run/$IF.pid ]; then
                kill `cat /var/run/$IF.pid`
        fi
        ;;
*)
        echo "usage: $0 {start}" 1>&2
        ;;
esac

exit 0;
図4. フレッツ・スクエア用ppp起動スクリプト

表2. 関連インタフェース
ed0 ADSLモデム接続用インタフェース
fxp0 家庭内LAN接続用
tun0 ppp(8)で作成されるプロバイダ側仮想インタフェース
tun1 ppp(8)で作成されるフレッツ・スクエア側仮想インタフェース

図5に /etc/ppp/ppp.linkupの内容を、図6に /etc/ppp/ppp.linkdownの内容を示す。 各エントリ(wakwak, flets)は図3のエントリに対応している。 natdの起動はこのようにppp.linkupで行っている。 プロバイダ側用のnatdは標準のポート8668で、 フレッツ・スクエア用のnatdはポート8669を使用している。 プロバイダ側の接続は常時接続なので、linkupで起動し、linkdownで停止で良いが、 フレッツ・スクエア側はオン・デマンド接続のため、linkdownした場合もnatdは 起動したままにしておく必要がある。 そのため、図7(exec-natd)、図8(kill-natd)に示すような シェル・スクリプトを使用している。 なお、natdのプロセス番号は /var/run/natd.pidに記録されるが、 今回のように複数のnatdを起動する場合、後から起動したものが上書きしてしまい、 利用できない。 /var/run/natd.8669.pid のようにポート番号も含むファイル名で 生成されるべきであろう。
# /etc/ppp/ppp.linkup

wakwak:
  !bg /sbin/natd -p 8668 -n tun0

flets:
  ! sh /usr/local/bin/exec-natd 8669 tun1
図5. ppp.linkupの内容
# /etc/ppp/ppp.linkdown

wakwak:
  ! sh -c "/usr/local/bin/kill-natd 8668"
図6. ppp.linkdownの内容

#!/bin/sh
# /usr/local/bin/exec-natd

PID=`ps ax |
    grep "[0-9]:[0-9][0-9]\.[0-9][0-9] /sbin/natd -p $1 " |
    cut -c1-6|
    sed 's/ //g'`

if [ ! -z "$PID" ]; then
    kill -9 $PID
fi
exec /sbin/natd -p $1 -n $2
図7. exec-natdの内容

#!/bin/sh
# /usr/local/bib/kill-natd

PID=`ps ax |
    grep "[0-9]:[0-9][0-9]\.[0-9][0-9] /sbin/natd -p $1 " |
    cut -c1-6`
kill -9 $PID
図8. kill-natdの内容

5. ipfw関連の設定

図2の/etc/rc.confで指定した ipfw.confの内容を図9に示す。 ipfw, natdを利用するため、図10に示す定義を追加し、 カーネルの再作成を行った。 図9に示す定義はNATの動作のための最低限必要な内容であり、 実際の運用にあたっては各種フィルタリングのための設定を追加するべきである。
# /usr/local/etc/ipfw.conf (簡略版)
add divert 8668 all from any to any via tun0
add divert 8669 all from any to any via tun1
add pass all from any to any
図9. ipfw.confの設定(簡略版)
options         IPFIREWALL
options         IPDIVERT
図10. カーネル定義への追加

6. BINDの設定

以上の設定が完了すればIPアドレスを直接指定することでフレッツ・スクエアの wwwサーバをアクセス可能である。 実際に使用するためにはネームサーバによる名前の解決ができることが必要である。 そのためにローカルにnamedを立ち上げ、図11に示す内容をnamed.confに追加し 「〜.flets」の問い合わせだけを表1に示したDNSサーバに転送するようにする。 /etc/resolv.confは図12の通りとし、自分自身のnamedに問い合わせるようにする。 家庭内LANのPCのネームサーバ指定もfxp0のIPアドレスに問い合わせるように 設定する必要がある。
//  /etc/namedb/named.conf (追加分)

    zone "flets" {
        type forward;
        forward only;
        forwarders {
            172.26.35.131;
            172.26.35.132;
        };
    };
図11. named.confへの追加
# /etc/resolv.conf
domain  yas.mu
nameserver 127.0.0.1
図12. resolv.confの内容

7. おわりに

このドキュメントではできるだけ分かりやすくするため、 直接関係ない部分はできるだけ省略して示した。 実際にはこのFreeBSDはプロバイダから固定IPを割り当てられ、 インターネットへのWWWサーバ、メールサーバ、ドメインのネームサーバとしても 動作している。 そのため、実際の設定はもう少し複雑になっている。 また、実際のファイアウォールの設定(ipfw.conf)の内容は示さなかったが、 これについても安全な運用に必要な内容の記述が必要である。

資料・コメント

[yas.muトップページへ]

#60434, last modified: Sunday, 16-Dec-2007 10:16:03 JST, w@yas.mu