web-dev-qa-db-ja.com

sysctl.confのipv6max_addresses(Debian 6)

Debian 6ホストに任意の数のIPv6アドレスを割り当てたいのですが、次の設定が表示され、設定を高くするとどうなるか知りたいのですが、この設定はシステムパフォーマンスに影響を与えて制限に近づきますか。

net.ipv6.conf.eth0.max_addresses=16

Linodeや他のいくつかのサイトでは、1つのインターフェースにさらに多くのアドレスを割り当てる必要がある場合、これを32に設定することを推奨していますが、なぜ32なのですか?必要に応じて、64、128、5000のIPv6アドレスを割り当てることはできますか?これは、Webサービスの名前ベースのホスティングをある程度回避するために行っているため、各サイトを異なるIPアドレスのポート80にバインドできます。

できる/すべきかnet.ipv6.conf.eth0.max_addresses=3000?なぜまたはなぜそうではないのですか?

1
mpbloch

効率と時間の複雑さのため。ルーティングテーブルを短くする必要があるのと基本的に同じ理由です(ただし、レベルは異なります)。受信したパケットごとに、システムはルーティングテーブル全体を実行して、そのパケットのルーティング方法を知るために一致するものを探す必要があるためです。これにより、ルーティングテーブルの長さの平均および最悪の場合のルックアップ時間はO(n)になります。

インターフェイスアドレスにも同じ問題があり、同様の影響があります。インターフェイスは、ケーブルを通過する1秒あたり数千のパケットをチェックして、このホスト宛てのパケットを判別する必要がある場合があります。簡単な方法は、到着するパケットごとに、その宛先アドレスをそのインターフェイスに割り当てられた各アドレス範囲と比較することです。これは、パケットごとにO(n))かかる別の順次タスクであることに注意してください。つまり、処理時間がかかり、1秒あたり数千のパケットを処理する必要がある場合はかなりの時間がかかる可能性があります。

また、別の問題があります。ローカルリンクにアドレスを追加するたびに、新しいアドレスごとに、リンク内の他のすべてのホストのネイバー(ARP)テーブルで必要なメモリが増加します。これは大きな問題ではありませんが(ARPプロキシも同じです)、ローカルネットワーク全体のパフォーマンスに影響を与える可能性があることに注意してください。

これにより、単一のホストに多数のアドレスを割り当てることはあまり良い考えではありません。 16や32のような非常に控えめな制限で十分であり、管理者にこれらのコストを思い出させます。

単一のマシンに多数のアドレスをルーティングする必要がある場合は、サブネットを作成する必要があります。 1つのサブネット内のすべての連続するアドレスを選択し、そのサブネット全体をそのマシンにルーティングします。次に、何らかの形式の内部ルーティングまたはiptables/routeトリックを使用して、マシン内のすべての作業を実行します。これは基本的に、単一の物理サーバーで多数の仮想マシンをホストするときに行うことです。

1
Juliano