ちなみに改善案の構成では USB タイプの LAN ケーブルを使うとあるのですが、USB タイプの LAN って、LAN ポートに接続する場合と比べて速度が低下したりなどはないのでしょうか? 試したことはないのですが、なんとなく気になった次第です。
また、本記事の内容からはそれてしまうのですが、iptables を使うなら、そもそも DNS ではなく iptables のパケットフィルタリングで同様のことを実現できたりしないでしょうか? iptables の string モジュールを使って Raspberry Pi に来るパケットに特定のドメインが含まれていたら DROP する、みたいなやり方で DNS でのブロックと同じことができないかなとふと思いつきました。
Discussion
ここまでするなら、
光BBユニット ー USB3 LAN ー Raspberry Pi ー 付属LAN端子 ー ハブ ー 各PCやWiFi APって配線にして、Raspberry Pi上で
IPv4:
iptables(-t nat -j MASQUERADEオプション)と、DnsmasqのDHCPサーバーIPv6:
6relaydを使ったパススルー (-nオプションでRouter AdvertisementのDNSを書き換え)を動かせばIPv6を維持したまま完成系(DNS抜けなし、全ISP対応)に持っていけるはず
6relaydを使うと光 BB ユニットの Router Advertisement を上書きできるのでしょうか?radvdは試したことはあるのですが、どうやら光 BB ユニットの Router Advertisement は優先度が「高」に設定されているらしく、radvdでは上書きできない (できるときもあるができないときもある) ということがわかりました。光 BB ユニットと直接つなげるのは Raspberry Pi だけにして、それ以外のデバイスを Raspberry Pi とつなげばこの問題は回避できるということですか? その場合は
radvdでも実現可能ですか?『DNS 抜けなし』の意味がよくわからなかったのですがこれはどういう意味でしょうか?
iptablesを設定する理由は何でしょうか?この記事での方法は
光BBユニットを主(出入口)とする、"同一"ネットワーク内にRaspberry Piを追加する方法です。 これでは主である光BBユニットの仕様制限の範囲内のネットワークしか作れません。なのでRaspberry Piから別にRA等を出しても、主の方が優先度高かったり、それ以前にPCに複数の端末からのRAが入ると期待通り動かないこともあります。
この制限っていうのがこの記事で問題になってるところです。
なので根本的に違う手法
光BBユニットを主とするネットワークの下に、新たに別のネットワークを立ち上げるを使います。光BBユニットが提供するネットワークにはRaspberry Piのみを接続し、その上でRaspberry Piが新たに主となった別のネットワークを作ります。
ある意味でRaspberry Piで光BBユニットを作るみたいな感じです。
RAを書き換え転送するプログラムです。radvdはRAを1から作成して発信するプログラムなので 目的が全く異なります。書き換えてから転送するのでDNSの値は自由自在です。
(別ネットワークなのでPCなどには光BBユニットからのRAは転送しない限り届きません、その転送時に書き換えてしまいます)
6relaydの仕事をradvdで代替することもIPv6の仕様上困難 な場合が多いです。(/64のプレフィクス問題)
ほぼ今回のケースのためにわざわざ作られたものなので。
(もし手元のIPv6が/64より小さいプレフィクスであれば、IPv4同様に下記3.の手法が使えます。がその場合でも6relaydの方が楽です)
これは単に想定外のDNSがPCに設定されることはないという意味でした
6relaydを設定すればIPv6に関しては通信できるのですが、 IPv4が繋がらなくなってしまいます。
未来はこれで良いのですが、まだまだIPv4も使いたいと思うので、こちらも転送するように設定するためです。
光BBユニットの内部もIPv4の処理は
iptables + Masqueradeのはずです。そこを再現します。ご丁寧に教えていただきありがとうございました。
ちなみに改善案の構成では USB タイプの LAN ケーブルを使うとあるのですが、USB タイプの LAN って、LAN ポートに接続する場合と比べて速度が低下したりなどはないのでしょうか? 試したことはないのですが、なんとなく気になった次第です。
また、本記事の内容からはそれてしまうのですが、
iptablesを使うなら、そもそも DNS ではなくiptablesのパケットフィルタリングで同様のことを実現できたりしないでしょうか?iptablesのstringモジュールを使って Raspberry Pi に来るパケットに特定のドメインが含まれていたら DROP する、みたいなやり方で DNS でのブロックと同じことができないかなとふと思いつきました。Man page of iptables-extensions
DNS でのブロックの弱点として、時間が来て名前解決できなくなったとしても、しばらくは各デバイスが持つキャッシュでアクセスできてしまうのがまた別の問題としてあると思っています。