Skip to main content.
Google custom search

NetBSD ドキュメンテーション: PPPoE (DSL) 経由の接続手順

PPPoE (DSL) 経由の接続手順

さまざまな覚書


PPPoE (DSL) 経由の接続手順

はじめに (トップ)

この文書は、 PPPoE (DSL プロバイダーでよく使われています) 経由で インターネットに接続するための簡単なセットアップについて説明します。

この文書が対象としているのは NetBSD 1.6 以降です。これより前のリリースには カーネル PPPoE サポートが含まれません。古い NetBSD リリース版を使っている場合は、 pkgsrc から net/rp-pppoe パッケージをインストールするようおすすめします。 これにはすべてを設定してくれる adsl-setup というコマンドが含まれています。

PPPoE は Point-to-Point Protocol over Ethernet の略です。典型的な設定は、 DSL モデム (これは DSL 線経由で Access Concentrator と呼ばれるプロバイダーのルーターと喋ります) とあなたのマシンを通常のイーサネットでつなぐことです。このため、対 DSL モデム専用のイーサネットインターフェースが必要です。このイーサネット インターフェース上に PPP 接続が構築されます。

よく見るとこれは妙なことのように見えます。イーサネットで接続しているのです - プロバイダーはなぜその上層で IP を使わないのでしょう? いくつかのプロバイダーは、 (ケーブルモデム接続のように) DHCP で IP アドレスを割り振って、 IP を使っています。 ほとんどのプロバイダーは、そのようにはしていません。 PPPoE を使ったほうが、 プロバイダーにとっては若干楽になるからです。 PPPoE では妙に小さい MTU を使っており、そのせいで、インターネット上の不適切に設定された防火壁の 向こうにいるシステムの多くとの通信ができなくなるため、ユーザーにとっては若干面倒になります。 回避策はあとで説明します。

以下の例では、対 DSL モデム用のイーサネットインターフェースとして ne0 を使います。もちろん、これ以外のインターフェースでも 使えます。

カーネルの確認 (トップ)

PPPoE を使うためには、カーネルが PPPoE をサポートしている必要があります。 そのことを確認するため、

 ifconfig -C 

を実行し、出力から "pppoe" を探します。もしなければ、カーネルコンフィグファイルに

  pseudo-device pppoe

を追加する必要があります。

手動で接続テストする (トップ)

マシンを自動接続するよう設定する前に、手動でテスト接続をすることを おすすめします。うまくいかない場合、このテストは設定のデバッグのための 簡単な方法になります。

まず最初に、 pppoe インターフェース自体を作り、ダミーの IP アドレス (これは PPP ネゴシエーションによって置き換えられます) を割り振ります。このインターフェース はまだ準備できていないので、ここでは down させておきます。

  ifconfig pppoe0 create
  ifconfig pppoe0 inet 0.0.0.0 0.0.0.1 down

次に、この pppoe インターフェースを、 DSL モデムへの接続に使っている イーサネットインターフェースに割り付けます。このインターフェースは UP されている必要がありますが、 IP アドレスが振られている必要はありません。

  ifconfig ne0 up
  pppoectl -e ne0 pppoe0

ここで、認証データが必要になります。 windows のソフトウェアはよく悪さをしたり プロバイダーが個別に対応する必要があったりするため、ほとんどのプロバイダーは、 Linux ユーザー向けにデータのフォーマット方法の資料を提供しています。 t-online を使っている場合は この傍注 をご覧ください。以下のようなコマンドで認証データを入力します (特殊な文字は、 シェルが解釈しないように単引用符を使って保護する必要があることに注意) :

  pppoectl pppoe0 myauthproto=pap 'myauthname=XXX' 'myauthsecret=YYY' hisauthproto=none

ここで XXX はユーザー名、 YYY はパスワードです。 hisauthproto=none は、 PPP が通信相手に認証を要求すること -多くのプロバイダーはこれを拒否します-を防ぎます。お使いのプロバイダーが CHAP プロトコルに対応している場合は myauthproto=chap にすることもできます。

これで、最初の接続を試す準備ができました。設定が誤っている可能性があるため、 ここでは再試行を制限しておきます:

  pppoectl pppoe0 max-auth-failure=1

そしてインターフェースをアクティブにします:

  ifconfig pppoe0 up

何事も起こりません (詳細なデバッグメッセージを有効にはしていないので) 。すべて 順調であれば PPPoE セッションが接続され、そのことは以下のようにして 確認できます:

  # pppoectl -d pppoe0
  pppoe0: state = session
          Session ID: 0x254f
          PADI retries: 0
          PADR retries: 0

この出力例は動作している設定のものです。 PPPoE セッションが確立して、 それを使用中 (state = session) です。もし出力中に session state がなければ、 認証データが間違っている (上記参照) か、アクセスコンセントレーターが 応答しないかセッションを確立していないかで、この場合は PADI または PADR 再試行が起きるでしょう。これは、 DSL のセットアップがうまくできていないか、 サービス名を指定する (pppoectl で -s オプションを使う) 必要があるか、 または、アクセスコンセントレーター名を指定する (pppoectl で -a オプションを使う) 必要があるということです。プロバイダーでは必要な事項を 文書化しているはずです。詳細は pppoectl(8) を参照してください。

PPPoE セッションが張れると、 PPP の IP ネゴシエーションを確認することが できるようになります:

  # ifconfig pppoe0
  pppoe0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1492
          inet 117.80.111.85 -> 118.5.113.169 netmask 0xff000000

これは、ローカル (117.80.111.85) とリモート (118.5.113.169) の IP アドレスが 割り振られていて (もちろん、実際にはこの例とは異なる IP アドレスになります) 、 動作する接続です。この例のような表示にならない場合、 PPP 認証データが 間違っています。再確認のうえ、 pppoectl の設定を再度おこなうところから やり直してください。

永続的な接続の設定 (トップ)

動作確認は済んだので、マシンが自動で接続を行なうように 設定したくなるでしょう。

マシンのブート時に自動で接続するためには、 先ほどの手動設定で行なった手順をコード化して、スクリプトや設定ファイル内に 書いておく必要があります。

プロバイダーとの契約が均一料金体系ならば、 常時接続にすることになるでしょう。

接続時間に応じて料金を払うのであれば、 オンデマンド接続がよいでしょう。

ISP がネームサーバーの IP アドレスを提供するはずですが、 自分で /etc/resolv.conf に書いておくべきです。 詳細は resolv.conf(5) および Networking FAQ を参照してください。

常時接続回線の設定 (トップ)

この設定の目標は、できるかぎりの間、回線を確保しておくことと、 (なんらかの理由で) 切断された場合はすみやかに再接続することです。 これはデフォルトの操作モードです。 上記の手動のテストで使った認証データを用意して、ファイルに書きます:

以下の内容を /etc/ifconfig.pppoe0 ファイルに書きます:

create
# PPPoE インターフェースとして使われる物理インターフェースを up する
! /sbin/ifconfig ne0 up
# $int が ne0 をイーサネットインターフェースとして使うようにする
! /sbin/pppoectl -e ne0 $int
# 認証の設定
! /sbin/pppoectl $int myauthproto=pap 'myauthname=XXX' 'myauthsecret=YYY' hisauthproto=none
# PPPoE インターフェース自身の設定。ここで使うアドレスはいずれも、
# 私たちは面倒を見ず、リモート ppp で選ばれたものを意味する
# 特殊なもの。
0.0.0.0 0.0.0.1 up

このファイルが root にしか読めないことを確認してください。

/etc/ppp/ip-up に以下の内容を書きます:

#! /bin/sh
/sbin/route add default $5

このファイルは root が実行可能にしておきます。

/etc/ppp/ip-down に以下の内容を書きます:

#! /bin/sh
/sbin/route delete default $5

このファイルも root が実行可能にしておきます。

最後に、次の一行を /etc/rc.conf に追加します:

ifwatchd=YES

これで完了です。 pppoe0 インターフェースに link1 フラグがないので 可能な限り接続が確立されたままになり、また、接続が失われた場合は すみやかに再構築されます。接続できた時はいつも /etc/ppp/ip-up スクリプトが実行され、切れたときはいつも /etc/ppp/ip-down が実行されます。さらに、これらのスクリプトは、 クリーンアップ (例えば、接続が切れたときに古い NAT コネクションを捨て、 再接続時に動的に新しい IP が振られる) や、 再接続したときの情報を必要とするサーバーへの通知 (たとえば、 named のフォワードやキャッシュ) に使うことができます。

システムが ifwatchd デーモン (これは ip-up と ip-down スクリプトを実行します) をブートするのは、おそらくかなり遅い時期になることに注意してください。 PPPoE 接続は、ネットワーク起動の初期の、 ifconfig.pppoe0 ファイルが実行される ころに確立されます。接続はすみやかにされますが、 /etc/ppp/ip-up スクリプトはまだ実行されていません。 ifwatchd(8) 起動時に、常時接続の場合は ip-up スクリプトが実行されます。 多くのネットワークデーモンはこの間に起動されますが、 デフォルトルートがないために外部への接続ができません。 これらのデーモンを ip-up スクリプトでキックするのはよい考えです (そして、動的 IP アドレスを使った場合にこれらのデーモンの引き起こす問題の ほとんどにも注意を払ってください) 。典型的な例としては、すべての NAT コネクションを捨て、 named と ntpd を再起動するものです:

#! /bin/sh
/sbin/route add default $5
/etc/rc.d/ntpd restart
/etc/rc.d/named restart

オンデマンド接続回線の設定 (トップ)

この接続設定では、トラフィックが生じたときのみ PPPoE 接続を確立します。 あらかじめ設定したアイドル時間が経過すると自動的に接続を切ります。

常時接続との主な違いは以下のとおりです

  • pppoe0 インターフェースに link1 フラグがある

  • idle timeout (以下の例では 60 秒) により、トラフィックがないまま 一定時間経過すると接続を切断する

  • ルーティングの設定。たとえ接続が確立されていない間であっても、 ルートパケットを pppoe0 インターフェースに向けておく必要があります。

以下の内容を /etc/ifconfig.pppoe0 に書きます:

create
# PPPoE インターフェースとして使われる物理インターフェースを up する
! /sbin/ifconfig ne0 up
# $int が ne0 をイーサネットインターフェースとして使うようにする
! /sbin/pppoectl -e ne0 $int
# 認証の設定
! /sbin/pppoectl $int idle-timeout=60 myauthproto=pap 'myauthname=XXX' 'myauthsecret=YYY' hisauthproto=none
# PPPoE インターフェース自身の設定。ここで使うアドレスはいずれも、
# 私たちは面倒を見ず、リモート ppp で選ばれたものを意味する
# 特殊なもの。
0.0.0.0 0.0.0.1 link1 up
! /sbin/route add default -iface 0.0.0.1

この設定では、デフォルトルートは上記設定ファイルによるものが常に使われるので ifwatchd を使う必要はありません。 IP アドレスの変更や接続の切断や再構築を 知る必要がある場合は、 ifwatchd を設定して /etc/ppp/ip-up/etc/ppp/ip-down を使うようにすることもできます。 例は、常時接続の場合を 参照してください (ただし、デフォルトルートを変えてはいけません) 。

MSS の調節を伴う NAT の設定 (トップ)

誤設定された防火壁の向こうにあるシステムは Path-MTU-Discovery を使おうと しますが、その防火壁があらゆる ICMP メッセージをブロックしてしまいます。 これは不正な設定ですが、珍しいことではありません。通常、このような (遠隔で、あなたの管理下にない) 状況をあなたが修正することはできません。 しかも、時にはこういったリモートシステムを利用 (そこからデータをダウンロード したり、オンラインバンキングするなど) する必要があります。

上記の説明のように特に配慮されたシステム群以外では、大きなデータ塊を PPPoE 経由で接続しているシステムに送ることはできないでしょう。しかし、回避策 (いんちきとも言うかも) があります: 最初の TCP ハンドシェークにおいて、 小さいサイズの MSS (maximum segment size) オプションを送って、 大きなパケットを扱えないように見せかけるのです。

PPPoE 接続されたあなたのマシン側からのコネクションについては、 sysctl 変数 net.inet.tcp.mss_ifmtu を 1 に設定します。 つまり、

# Obey interface MTUs when calculating MSS
net.inet.tcp.mss_ifmtu=1

/etc/sysctl.conf に追加します。 PPPoE ルーターの向こうのシステム側 からのコネクションについては、以下の /etc/ipnat.conf の例のようにして、 NAT ルールに mssclamp オプションを設定する必要があります:

map pppoe0 192.168.1.0/24 -> 0/32 portmap tcp/udp 44000:49999 mssclamp 1440
map pppoe0 192.168.1.0/24 -> 0/32 mssclamp 1440

NAT の設定に関してより詳しいことは、 NetBSD ネットワーキング FAQ を参照してください。

NAT を使わないのであれば、単に MSS 調節をするために 1:1 の NAT ルールの 設定が必要です:

map pppoe0 x.x.x.x/24 -> 0/0 mssclamp 1440

上の例では MTU が 1492 バイトであると仮定しています。お使いになっている PPPoE 接続で MTU がもっと小さい値の場合は、 MTU から 52 バイトを引いた値を使ってください。 例えば MTU が 1460 バイトなら 1408 バイトにします。

注意: 理論的には、上の例での適切な値は 1452 バイト (これは、小さめの PPPoE MTU 、TCP ヘッダーと、最大 0x40バイトの TCP オプションからなります) になるはずなのですが、これでも場合によっては大きすぎるようです。 多くの人達が試した結果によれば、上で例示した MSS 値 (1440 バイト) に調節すると一番うまくいっています。


さまざまな覚書

T-Online のアカウント名に関する一般的な情報 (トップ)

ドイツの ISP T-Online へダイアルインで入る場合、 正しいユーザー名と、独自のチャットスクリプトについての 2 点について、 大変トリッキーな事柄があります。一般的な ppp の設定方法の説明は NetBSD Network FAQ を参照してください。

  1. T-Online のログイン名は、三つの部分を つなぎ合わせたものになっています:

    1. Anschlußkennung: 12 桁の数字 (AAAAAAAAAAAA)、 たとえば 000120123456

    2. T-Online Nr: 12 桁の数字 (TTTTTTTTTTTT)、 たとえば 3200123456。 しばしば "32" で始まります; 12 桁より少ない場合は、 '#' を加えます)

    3. Mitbenutzer-Nummer, 大抵は "0001" (MMMM)、 たとえば 0001

    すると、ログイン名は、この三つの部分を何も挟まずに 一行に並べたもの ("AAAAAAAAAAAATTTTTTTTTTTTMMMM") 、 たとえば 0001201234563200123456#0001 になります。 これを PPP オプションファイルの "user" 行に書きます。

  2. チャットスクリプトでは、モデムが CONNECT を知らせてきてから、 "." を送るように注意する必要があります:

    ABORT BUSY    '' AT
                  OK ATZ
                  OK ATL1
                  OK ATD0191011
                  CONNECT '.'
    

    この最後のドットがないと、最初の LCP ConfReq frame を送出後、 T-Online ダイアルインサーバーからの返答なしに、 すぐに接続が切られることがあります。

  3. T-Online を T-DSL 経由で使う場合は、ログイン名に "@t-online.de" を追加してください。 たとえば "0001201234563200123456#0001@t-online.de" のように。

さらなる情報について、 (ドイツ語の) リンクをいくつか示します (これらのほとんどは NetBSD 向けではありませんが、 心配は無用です─他の Unix-like オペレーティングシステムで うまく使える手法は、普通は NetBSD でもうまくいきます):

ISDN や DSL 用の T-Online アカウント名 (トップ)

従来 ISDN で T-Online に接続していたユーザーは、 T-DSL でのユーザー名が ISDN でのものとは異なることに注意してください。 DSL でのユーザー名は 末尾に @t-online.de を追加したものになるため、 T-Online のアカウント名に関する一般的な情報 の節を参照してください。

PPPoE サーバーのセットアップ (トップ)

PPPoE のテストをしたいが DSL 回線がない場合は、どうすればいいでしょうか? もちろん、その場合は自分で PPPoE サーバーをセットアップするのです。 pppoe(4) マニュアルページに、必要な情報はほぼすべて載っています。

  • カーネルに "options PPPOE_SERVER" が含まれていることを確認します。

  • サーバーの pppoe0 インターフェースに link0 フラグをセットします。

  • ローカルおよびリモートの IP アドレスとして、それぞれで使いたいアドレスを設定します。 たとえば、サーバーで 10.3.3.1 を使い、 クライアントで 10.3.3.2 を使いたい場合は、 /etc/ifconfig.pppoe0 ファイルの最後の行を、"0.0.0.0 0.0.0.1 up" ではなく "10.3.3.1 10.3.3.2 up" にします。

  • 認証のために、クライアントで "my" になっている部分は サーバーでは "his" に置き換えてください。たとえば、クライアントで "myauthproto" となっている部分はサーバーでは "hisauthprot" となります。

サーバーの /etc/ifconfig.pppoe0 ファイルの全文は、以下のとおりです。

create
# Server:
link0
#
! /sbin/ifconfig re1 up
! /sbin/pppoectl -e re1 $int
! /sbin/pppoectl $int hisauthproto=pap hisauthname='foobar@baz.com' hisauthsecret='oink' myauthproto=none
10.3.3.1 10.3.3.3 up
  

これに対応するクライアントの /etc/ifconfig.pppoe0 ファイルは、以下のとおりです。

create
! /sbin/ifconfig re1 up
! /sbin/pppoectl -e re1 $int
! /sbin/pppoectl $int myauthproto=pap 'myauthname=foobar@baz.com' 'myauthsecret=oink' hisauthproto=none
0.0.0.0 0.0.0.1 up