pppd
PPPoEでプロバイダに接続できます。
kernel config
Device Drivers --->
[*] Network device support --->
<*> PPP (point-to-point protocol) support
<*> PPP over Ethernet
カーネルサポートが必要です。
Buildroot
Target packages --->
Networking applications --->
[*] pppd
でビルドすればインストールできます。
初期状態で設定ファイルを置くディレクトリがありません。
# mkdir /etc/ppp
# mkdir /etc/ppp/peers
/etc/ppp/peers/provider
plugin pppoe.so
nic-eth0
name "プロバイダの接続ID"
usepeerdns
defaultroute
persist
ファイル名は好きなもので。接続の際にファイル名を指定します。
PPPoE接続の場合は"plugin rp-pppoe.so"が必要です。
eth0は終端装置に接続しているLAN。
nameがプロバイダのID。
usepeerdnsでプロバイダのDNSが利用できます。
defaultrouteでデフォルトゲートウェイとなります。
persistは切断した場合に再接続。
現行バージョンのpppdの場合、rp-pppoe.soではなくpppoe.soが入っているようです。
pppoe.soを使う場合は、インターフェイスをeth0ではなくnic-eth0と書くようです。
usepeerdnsが設定されている場合は接続時に/etc/ppp/resolv.confが作成されて書き換えられます。
/etc以下が自動的に書き換えられてしまうので、プロバイダのDNSではなく8.8.8.8などで良い場合はusepeerdnsは設定せずに/etc/resolv.confにDNSを設定するのが良いと思います。
/etc/ppp/chap-secrets /etc/ppp/pap-secrets
プロバイダの接続ID * プロバイダの接続パスワード
2つのファイルはプロバイダの認証方式がCHAPの場合とPAPの場合で使い分けられますが、両方に書いておけばいいです。
# pon provider
で接続します。
ppp0(ネットワークインターフェイス)が出てきます。
providerは/etc/ppp/peers以下にあるファイル名です。
# poff provider
切断。
現行バージョンのpppdではponとpoffが同梱されなくなっているようです。
# pppd call provider
で設定を読み込んで起動。
# killall pppd
で終了できるようです。
/etc/network/interfaces
auto eth0
iface eth0 inet manual
pre-up ip link set dev eth0 up
post-up pppd call provider
pre-down killall -q pppd
自動起動。
これで多くのページは見れるのですが、IP通信ではデータを1,500byte単位でフレーム化(MTU)して通信が行われ、
PPPoEではパケット内に追加データが入るためMTUを変更しないと見れないページがあります。
フレッツ接続の場合のMTUは最大で1454になります。
また、ルーター化する場合、クライアントのMTUは通常の1500なのでルーターが変換する必要があり、
nftablesで
# nft add rule ip filter forward oiftype ppp tcp flags syn tcp option maxseg size set 1414
とするとMSSを1414に変換できます。
MSSはMTUから40引いた値です。
#nft add rule ip filter forward oiftype ppp tcp flags syn tcp option maxseg size set rt mtu
こんな感じにするとMTUを自動計算してくれるようです。
ただし環境によっては自動計算は間違える可能性があるとか。