OpenWrt で自分自身のグローバルIP(PPPoE)へHTTPすると、RFC1918
例えば次のように、グローバルIPへ内部から接続すると
curl -v http://{$my-global-ip}
RFC1918のエラーになる。
Rejected request from RFC1918 IP to public server address
これは、OpenWrtの管理画面UIであるLuciから出ている。
Luciのuhttpd が 0.0.0.0/0
をリッスンしていて、PPPoEのIPで応答するため、上記のエラー(Reject RFC1918) が発生する。
対応
対応は「何をしたいか」によって分かれる。
Luciを見たい、見せたいのであれば、対応策1を使う。
Luciを応答させずに、別のApache/nginxなどWEBサーバーを応答させたいときは、対応策2を使う。
私が、この事象に遭遇したのは次の理由による。
443ポート(https)を転送するけど、80(http)はDNAT(リダイレクト)を未記入で使っていた。
最近は80を使うことが減ったのでポート転送を書いてなかった。
しかし、HTTP->HTTPSのリダイレクトを行うには、いったん80で応答しなくてはいけなかった。
対応策1
rfc1918_filter をオフにする。
/etc/config/uhttpd: option rfc1918_filter '1'
対応策2
ファイアウォールでリダイレクトを書く。
/etc/config/firewall
config redirect option target 'DNAT' option name 'wan-http-to-local' option family 'ipv4' list proto 'tcp' option src 'wan' option src_dport '80' option dest_ip '192.168.1.xxx' option dest_port '80'
ファイアウォールの転送は、uhttpd応答より前段階である。FWが転送してuhttpdにパケットが届く前に処理されるように設定している。