FreeBSD で PPPoE + NAT (2024年版)

職場のルータはずっと FreeBSD なのだけど、自宅に新しく入れた Wi-Fi ルータのルータとしての挙動がどうも怪しかったので、自宅のルータもすごく久しぶりに FreeBSD にすることにした。

で、昔取った杵柄で PPPoE の設定を書いて、natd を起動する。ハマったのは以下の2点。

  1. なんか一部のウェブサイトにつながらないし、外部へ ssh もできない
  2. natd が起動するときに tun0 がまだない (ppp の認証に時間がかかるから?) ので、natd が起動しない

1 はやっかいだった、port 80 への telnet も通るし、openssl s_client -connect www.somewhere 80 みたいなのも通るところは通るけど、通らないところは “CONNECTED(00000005)” と出たっきり、タイムアウトするまで何もできない。netstat でみると ESTABLISHED になっている。

MTU discovery の問題かなー、とか思ったのだが、FreeBSD の PPPoE にはかなり昔から TCP ヘッダの mss フィールドを調整する機能がついており、そんなことはないはずなのだ。

で、FreeBSD ハンドブックの当該セクションとかを眺めていると、”set mtu” とか “set mru” とか書いてないの。もしかしていまどき自動?と思って、この2行を消したらあっさり動いた。

2. は /etc/rc.d で natd_options に “-dynamic” をつけたら解決した。これ、動的にアドレスが変わるのに対応するだけかと思ったら、-n で指定したインタフェイスが動的に生えてくる場合にも気長に待ってくれるのね。

というわけで解決です。Wi-Fi ルータはただの有線-無線ブリッジになった。