IPv6の実践

要約:





openSUSEを使用すると、すべてが明確になるため、IPv6の意味について説明しましょう。







Selectel企業ブログのオリジナル記事。



クラウドサーバーのIPv6



サンクトペテルブルク(1)およびサンクトペテルブルク(2)プール内のすべての仮想マシンについて、新しい仮想マシンをインストールし、既存の仮想マシンを再インストールすると、IPv6サポートがデフォルトで有効になります(発信接続の優先プロトコルです)。 もちろん、IPv4は残り、機能します。 以前は、IPv6を発行しましたが、デフォルトでは有効にしませんでした。



なぜこれが必要なのですか? 正直なところ、今ではインターネットの大部分がipv4で機能しています。 アジアには独立したライブIPv6の島があり、さらにいくつかの大きなサイト(google.com、vk.com、facebook.comなど)がIPv6経由で応答します。 ロシアのほとんどすべてのホームユーザーは、IPv4でのみ動作します。

以下は、どのロシアのプロバイダーがIPv6を持っているかについての関連情報です。version6.ru / isp



ただし、IPv6への移行が行われる必要があります。また、IPv6を使用するサイトが増えれば増えるほど、移行はより簡単で落ち着くものになるため、これは将来の投資です。



IPv6の出現は、特定のクラウドサーバーの実用的な観点からどのような意味がありますか?







クラウドサーバーサービスには、クラウドストレージサービスとの非公式な競合があります。つまり、IPv6トラフィックが増加します。 今日まで、クラウドストレージが勝ちましたが、フラグを横にドラッグする希望があります。



IPv6トラフィックが送信される主なもの:





現実のIPv6



一般的な変更点として、最新のすべてのOSがそのままIPv6をサポートし、すべてがそこで機能し、すべてがシンプルで簡単であるというものがあります。 彼らは、すべてがバギーとビープ音になると反対の意見があります。 実践が示すように、そのまま使用でき、ビープ音が鳴ります。 または、反対に、バグがあり、すべてが簡単でシンプルです。 言い換えれば、それは機能しますが、それ自体の熊手はかなりの量をもたらしますが、あなたは生きることができます。



以下はそれらのいくつかについての物語です。



デュアルスタックの存在は、IPv6が明示的または暗黙的に(たとえば、発信接続)出現するすべての場所で、 それについて考える必要があることを意味します。 そのような場所はたくさんあります-デュアルスタックがあるとすぐに、すべてのユーティリティ(wgetで始まりsshで終わる)がすぐに見つかり、ipv4を介してIPv6を経由し始めます。 時々静かに、時には静かに落ちる。 尊敬される企業の中には、ドメインに対してAAAAを規定しているものの、Webサーバーのセットアップを忘れているものがあります。 事件が判明した。



PostgresqlとIPv6



PostgreSQLは、その優れたデータ型セットで常に有名です。 幾何学的なオブジェクトから始まり、お金で終わる。 IPアドレスも含まれます。 inetとcidrの2つのタイプがあります。 両方とも特別な方法でIPアドレスとマスクを保存します。 違いは、inetがホストアドレスを格納する(つまり、マスクの下のゼロゾーンでゼロ以外のビットが許可される)ことと、cidrがネットワークを格納する(つまり、ゼロゾーンのホストアドレスが無効である)ことです。 実際、これはまったく同じものですが、cidrでホストアドレスを書き込もうとすると、条件が満たされないためエラーが生成されます。



IPv4およびIPv6に1を入力します。 寸法は自動的に決定されます。



許可される操作:スカラーによる加算、スカラーの減算、範囲内、範囲外、同等などのあらゆる種類の比較 ipv4の場合、これにより、必要なものをすべて実装できます。 たとえば、ipv4の分布を作成する場合、max_ipv4を取得して+1と言うだけで、選択可能な範囲に収まるかどうかを確認します。



IPv6では、状況は異なります。 アドレスが割り当てられます/ 64、およびルーティングされたネットワークの割り当ての場合-/ 48。 次の/ 48を取得するには、最後に選択したものを取得し、max_ipv6 + 1208925819614629174706176(2 128-48 = 2 80 )にする必要があります。 すべてが問題ありませんが、postgresのbigintは64ビットの数値であり、2 80は言うまでもなく2 64を格納することさえできません。 つまり、このような「プラス」を試みると、追加されたスカラーのサイズが大きすぎるためにエラーが発生します。 合計-postgresでは、IPv6ネットワークを管理するメカニズムは完全に壊れています。 私たちの一時的な解決策は、inet / cidrのpersist(DBMSを操作するためのhaskellライブラリ)の実装と、独立した数学の実装です。 アップストリームでは、問題は修正されていますが、解決策はありません(9.2以降)。



インターフェイス、DADおよびnginx上の複数のIPv6



インターフェイスに複数のIPv6アドレスを登録する唯一の方法は、ifconfigを使用してpostセクションとpreセクションを使用することです。 DAD-重複アドレスの検出が機能するため、インターフェイスにアドレスが表示されますが、すぐには表示されません。 最も単純な形式では、コンピューターは「誰かが私のアドレスを持っていますか?」と尋ね、答えを待っています。 このプロトコルは重複アドレスの出現を回避しますが、ifconfigはDADでの待機が完了するまでインターフェースの設定作業を終了します。



その結果、nginx(または他のサーバー)にアスタリスクではなく対応するアドレスの設定がある場合、そこでリッスンしようとすると、サーバーはエラーを受け取ります。 そして、聞いていません。 これは、サーバーのブートプロセス中にのみ気付かれる純粋な状態の競合です(他の場合では、サーバーが起動/再起動する前にDADが動作する時間があります)。 この問題のデバッグは非常に不快でした。



IPv6アドレスのドット



信じられない? コロンだけを考えますか?

:: 192.168.1.1-有効なIPv6アドレス。ただし、インターネットでは使用されません。



つまり、インターフェース内のIPv6アドレスの正規表現がシンプルになることを望んでいた皆さんにおめでとうと言います...



ルーティング広告と転送



Linuxは、ルーターであると言われた場合、ルーティングアドバタイズメントを信頼しなくなります。 特に、ホストがRAからのみルートを受信する場合、ルーティングをオンにした後、ホストはこれらのRAを信頼しなくなります(つまり、ipv6ネットワークは機能しなくなります)。 RAと転送の両方が必要な場合は、RAを2に設定する必要があります(net.ipv6.conf.eth0.accept_ra = 2)。 アナウンスサービス(radvd)が実行されている場合、信頼するアナウンスとそうでないアナウンスを慎重に区別する必要があります。 あなた自身の発表を信じることはばかげており、うまくいきません。



All Articles