[Japanese|English]

具体的な設定

ハードウェア

PPPoEルータを構成するには、イーサネットのインターフェースが 2 つ必要です。詳しく言うと、1 つでも実現できないわけではありませんが、2 つ使う方がオススメです。その他には、特別なハード構成は必要ありません。私が実際に使っているハードウェアも別掲しました。

私は、SiS900 というチップを搭載した、MELCO/BUFFALO の LGY-PCI-TXC というボードを使いました。FreeBSD では、このボードは、sis ドライバが対応します。2 枚挿すと、sis0sis1 になります。以下では、sis0 を「家庭内 LAN」に繋ぐためのポート、sis1 をADSLモデムに繋ぐためのポートとして使っています。

なお、同じボードを 2 枚挿すと、どちらが sis0 でどちらが sis1 になるのかよく分かりません。(技術的には、PCI スロットの優先順位によるらしいのですが。) そこで、ボードを挿す前に、イサーネットアドレス (MAC Address) を確認しておくことを勧めます。大抵のイーサネットカードでは、ボードに、イーサネットアドレスを書いたシールが貼ってあると思います。FreeBSD の起動時に、sis ドライバの初期化の段階でイーサネットアドレスが表示されますから、それを使って対応を取ることができます。(起動時のメッセージは、後から dmesg コマンドを使って確認することもできます。

ソフトウェア

OS のバージョン

私は、FreeBSD 4.2 RELEASE (実際には、これをベースに、いくつかのセキュリティパッチを適用したもの) を使っています。また、ppp は 2.3 版に入れ換えています。どのバージョンの FreeBSD から PPPoE に対応しているのかははっきりしない (ハンドブックに「PPPoE を使うためにはバージョン××以降が必要です」という記述があるのだか、「××」の部分がどんどん新しくなってしまう。:-) 基本的には ppp は入れ換えてしまいますので、NETGRAPH が対応していればいいはずです。たぶん、3.4 RELEASE 以降、というのが正解のようです。

ppp については、MTU に関する説明でも書いていますが、ルータとして PPPoE を使うには2000年12月以降のバージョンが必要です。これは、FreeBSD 4.2 RELEASE までには含まれていませんから、最新版に入れ換えることが必要です。

なお、FreeBSD にもときどき、いわゆるセキュリティホールが見つかり、随時修正が提供されています。ADSL でインターネットに常時接続されることになるわけですから、ちょっとしたセキュリティホールが致命的になるおそれもあります。あまり古いバージョンのソフトウェアを使い続けるのは、この意味で、PPPoE ルータには不適切です。新規にインストールするならできるだけ新しい版の RELEASE や STABLE を使い、適切なタイミングでセキュリティパッチも適用するように心がけるべきです。

パッケージ

いわゆる NAT BOX に仕立てるため、いくつかのパッケージもインストールしています。(ports でもいいのでしょうが、コンパイルが面倒なので。)

isc-dhcp
ずっと WIDE DHCP を使っていたのですが、ISC が FreeBSD の基本システムに含まれて以来、乗り換えてしまいました。bind との組合せで動的 DNS も使っています。

設定の対象のネットワーク

ここで示している設定は、以下のようなネットワークを対象にしています。

WAN 側

LAN 側

ルーティング動作

その他のサービス

設定ファイルの内容

以下、私が 2000 年 3 月の時点で実際に使っている設定ファイルの内容を示します。

/etc/rc.confの設定

ifconfig_sis0="inet 192.168.250.1  netmask 255.255.255.0"
ifconfig_sis1="up media 10baseT/UTP"            # to be used by PPPoE
ppp_enable="YES"
ppp_profile="-unit0 adsl"
hostname="bear.home.example.com"
sendmail_enable="NO"
named_enable="YES"
named_flags=""
gateway_enable="YES"
xntpd_enable="YES"
sshd_enable="NO"
inetd_enable="YES"
usbd_enable="YES"
apm_enable="YES"
blanktime="60"
saver="apm"
rand_irqs="10 12 14 15"
portmap_enable="NO"

/etc/ppp/ppp.confの設定

default:
  set log phase tun command

pppoe:
  set device PPPoE:sis1
  set mru 1454
  set mtu 1454
  set dial
  set login
  set redial 1 8
  set timeout 900       # 15 minutes

protect:
  nat enable yes
  nat deny_incoming no # yes
  nat same_ports yes
  nat use_sockets yes
  nat log yes
  set filter in     0 permit udp src eq  123 dst eq  123
  set filter in     1 deny   udp             dst lt 1024
  set filter in     2 deny   tcp             dst lt 1024
  set filter in     3 permit 0/0 0/0
  set filter out    0 permit udp src eq  123 dst eq  123
  set filter out    1 deny   udp src lt 1024
  set filter out    2 deny   tcp src lt 1024
  set filter out    3 permit 0/0 0/0
  set filter dial   0 deny   udp             dst eq  123
  set filter dial   1 permit 0/0 0/0
  set filter alive  0 deny   udp             dst eq  123
  set filter alive  1 deny   udp src eq  123
  set filter alive  2 permit 0/0 0/0

adsl:
  load pppoe
  load protect
  set authname XXXXXXXX
  set authkey XXXXXXXX
  set ifaddr 10.0.0.1/0 10.0.0.2/0
  add! default HISADDR

設定例の更新について

上の例で、MTU/MRU を指定する部分は、このページを初めて公開した時点では以下のようになっていました。

  set mru 1454
  set mtu 1454

実際、当時は私のマシンの設定もそうなっており、問題なく動作していました。

ところが、FreeBSD を 4.4 RELEASE にアップデートしたところ、また、ブラックホール問題が発生するようになってしまいました。調べると、MTU/MRU に関するネゴの動作が変更になっているようでした。この新しいバージョンで、TCP MSS FIXUP を機能させるためには、maxというキーワードを追加する必要がありました。

/etc/namedb/named.confの設定

options {
        directory "/etc/namedb";

        listen-on { 192.168.250.1; 127.0.0.1; };

        forwarders {
                211.15.32.8;            // Metallic
                211.15.32.18;           // Metallic
        };

        dump-file "s/named_dump.db";
};

zone "." {
        type hint;
        file "named.root";
};

zone "0.0.127.in-addr.arpa" {
        type master;
        file "localhost.rev";
        allow-query { 127.0.0.1; 192.168.250.0/24; };
};

zone "0.0.10.in-addr.arpa" {
        type master;
        file "pppdummy.rev";
        allow-query { 127.0.0.1; 192.168.250.0/24; };
};

zone "example.com" {
        type master;
        file "s/example.com";
        allow-update { 127.0.0.1; };
        allow-query { 127.0.0.1; 192.168.250.0/24; };
};

zone "250.168.192.in-addr.arpa" {
        type master;
        file "s/250.168.192.in-addr.arpa";
        allow-update { 127.0.0.1; };
        allow-query { 127.0.0.1; 192.168.250.0/24; };
};

/etc/namedb/pppdummy.revの設定

$TTL    3600

@       IN      SOA     bear.home.example.com. root.bear.home.example.com. (
                                1       ; Serial
                                3600    ; Refresh
                                900     ; Retry
                                3600000 ; Expire
                                3600 )  ; Minimum
        IN      NS      bear.home.example.com.

/etc/namedb/s/example.comの設定

(未稿)

/usr/local/etc/dhcp.confの設定

(未稿)

/etc/ntp.confの設定

(未稿)