タイトル: PPPoE
SEOタイトル: PPPoE とは(Discovery / Session / IPoE との違い / MTU 1492 の理由)
| この記事の要点 |
|
PPPoE とは
PPPoE (Point-to-Point Protocol over Ethernet) は RFC 2516 で定義された、PPP プロトコルを Ethernet フレーム上で運ぶカプセル化方式です。元々の PPP は電話回線・ISDN・専用線向けに設計されたものですが、ADSL / 光ファイバ時代に「ユーザ認証・IP アドレス払い出し」の仕組みとして再利用されました。
日本では NTT 東日本/西日本のフレッツ網を経由して ISP に接続する標準的な方式として広く使われています。
PPPoE が必要な背景
| 必要な機能 | 素の Ethernet | PPP | PPPoE |
|---|---|---|---|
| ユーザ認証 (PAP/CHAP) | 無し | あり | あり |
| 動的 IP アドレス払い出し | DHCP 別途 | IPCP | IPCP |
| セッション管理 (切断・接続) | 無し | あり | あり |
| イーサ媒体で動く | ○ | × | ○ |
動作フェーズ: Discovery と Session
[Discovery フェーズ] - 接続相手 (アクセスコンセントレータ) を探す
Client BAS/AC (ISP 側)
│ ── PADI (broadcast) ──→ ① 接続要求
│ ←── PADO ── ② 応答 (利用可能なサーバ広告)
│ ── PADR ──→ ③ サーバ選択
│ ←── PADS ── ④ Session ID 割当て
│
[Session フェーズ] - PPP で通信
│ ←── LCP Configure ──→ ⑤ リンク確立
│ ←── 認証 (PAP/CHAP) ──→ ⑥ ID/Pass 検証
│ ←── IPCP ──→ ⑦ IP アドレス払い出し
│ ←──── データ送受信 ────→ ⑧ 通常の IP 通信
│
│ ── PADT ──→ ⑨ 終了 (切断)
PADI = PPPoE Active Discovery Initiation
PADO = PPPoE Active Discovery Offer
PADR = PPPoE Active Discovery Request
PADS = PPPoE Active Discovery Session-confirmation
PADT = PPPoE Active Discovery Terminate
MTU 1492 の謎
Ethernet の MTU は標準で 1500 バイトですが、PPPoE 環境では1492 バイトがよく使われます。これは以下のオーバーヘッドのためです:
[Ethernet フレーム ペイロード 1500]
+--------------------------------+
| PPPoE Header (6 bytes) | <- バージョン/タイプ/コード/セッションID/長さ
| PPP Header (2 bytes) | <- プロトコル番号
| IP payload (max 1492 bytes) | <- ★ アプリのデータはここまで
+--------------------------------+
合計オーバーヘッド: 8 bytes
PPPoE 上の MTU = 1500 - 8 = 1492
これより大きな IP パケットを送ると、フラグメンテーション or DF=1 なら破棄
→ HTTPS が一部のサイトで「読み込みが途中で止まる」原因に
MSS Clamping (MSS の調整)
TCP の MSS (Maximum Segment Size) は MTU - 40 (IP 20 + TCP 20) で計算され、通常 1460。PPPoE では 1452(= 1492 - 40)に調整する必要があります。ルータ側で自動調整する機能が MSS Clamping:
! Cisco IOS でのインターフェース設定例
interface Dialer1
mtu 1492
ip tcp adjust-mss 1452 ← MSS Clamping
! Linux iptables
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu
IPoE / IPv4 over IPv6 への移行
日本では夜間の 網終端装置 (NTE) 混雑により PPPoE 接続が遅くなる問題があり、近年はIPoE 方式(IPv6 ネイティブで IPv4 を内包する方式: v6 プラス、transix、IPv6 オプション など)への移行が推進されています:
| 項目 | PPPoE | IPoE (v6 プラス等) |
|---|---|---|
| 認証 | ID/Pass による PPP 認証 | 回線情報で自動認証 |
| 終端装置 | NTE (網終端装置) を経由 | NTE をバイパス |
| 混雑時の速度 | 遅くなりがち | 安定 |
| 固定 IP | ISP プラン次第で可能 | 原則 動的 (オプションで可) |
| 対応ルータ | ほぼ全機種 | v6 プラス対応など制限あり |
| ポート開放 | 自由 | 共有 IP の制約あり |
OS / ルータ別の PPPoE 設定
Linux (rp-pppoe)
# Debian/Ubuntu
sudo apt install pppoeconf
sudo pppoeconf # 対話的に設定
# 直接設定ファイル (/etc/ppp/peers/dsl-provider)
plugin rp-pppoe.so
nic-eth0 # WAN 側 NIC
user "user@isp.example.jp"
password "your_password"
mtu 1492
mru 1492
defaultroute
persist
maxfail 0
# 接続
sudo pon dsl-provider
# 切断
sudo poff
Windows 10/11
1. 設定 → ネットワークとインターネット → ダイヤルアップ
2. 「新しい接続を設定する」
3. 「インターネットに接続します」 → 「ブロードバンド (PPPoE)」
4. ユーザー名 / パスワード / 接続名を入力
5. 接続
! 既存接続の MTU 変更 (管理者 PowerShell)
netsh interface ipv4 show subinterfaces
netsh interface ipv4 set subinterface "接続名" mtu=1454 store=persistent
家庭用ルータ (例: NEC Aterm)
1. http://aterm.me/ にアクセス
2. 「動作モード」を「PPPoE ルータ」に変更
3. 「PPPoE 接続設定」
- 接続先名: ISP 名
- ユーザー ID: xxxxxx@isp.example.jp
- パスワード: ********
4. MTU 値: 1454 (一部 ISP) または 1492
5. 保存して再起動
PPP 認証方式: PAP と CHAP
| 方式 | 仕組み | セキュリティ |
|---|---|---|
| PAP (Password Authentication Protocol) | ID/Pass を平文で送る | 低 (盗聴で漏洩) |
| CHAP (Challenge Handshake AP) | チャレンジ文字列に対するMD5 ハッシュで応答 | 高 (パスワード自体は流れない) |
| MS-CHAP v2 | CHAP を強化、相互認証 | 高 |
現代の ISP はほぼ CHAP / MS-CHAP v2 を使います。物理層が暗号化されていない PPPoE では PAP は避けるべきです。
FAQ
Q: 接続できるが特定サイトだけ開けない
A: MTU/MSS のミスマッチが原因。MTU を 1492 → 1454 や 1438 に下げる、または MSS Clamping を有効化する。
Q: 認証エラー (Authentication failed) が出る
A: ID の @isp.example.jp 部分(レルム)を含めて入力しているか確認。ISP によって不要な場合もある。
Q: PPPoE は IPv6 では使う?
A: 規格上は PPPoEv6 (PPP の IPv6CP) もあるが、現在は IPoE / DHCPv6-PD の方が一般的。