Orange Pi R1 のSPIフラッシュにOSを入れてルーターにする

メニュー

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を自動計算してくれるようです。
ただし環境によっては自動計算は間違える可能性があるとか。
[編集]   [AD]
rentafree.net