James Bottomley’s random Pages

Linux Plumbers Conferenceの最近の経験の1つは、真のオープンソースのWebRTCベースのピアツーピアのオーディオ|ビデオの相互作用に参加したいのであれば、NATの背後にないインターネットアドレスが必要であることを私に確信させました。 実際には、このプロトコルは、stunサーバーに連絡して外部アドレスが何であるかを伝えることができ、両方のエンドポイントがNATedされている場合はパケッ このすべての解決策は、独自のアドレスを持つ地球上のすべてのデバイスをサポートするのに十分な大きさのアドレス空間を持つIpv6を介して接 すべての現代のLinuxディストリビューションは、箱から出してIpv6をサポートしているので、チャンスはあなたが実際に誤ってIpv6自動設定の美しさの一

しかし、私は最近移動したので、ケーブルへのファイバーインターネット接続を失いましたが、ipv6アドレスが付属していたケーブルなので、これはすべて プロトコルの基本を本当に気にしない場合は、方法にスキップすることができます。 このガイドでは、”デュアルスタック”構成(Ipv6アドレスとIpv4アドレスの両方を持つ構成)にも焦点を当てています。 純粋なIpv6構成は可能ですが、インターネットの一部はまだIpv4のみであるため、Ipv4カプセル化ブリッジをセットアップしない限り、完全ではあり

Ipv6の基本

Ipv6は長い間成熟したプロトコルであったので、私は誤ってそれについて良いHOWTOsの負荷があるだろうと仮定しました。 しかし、Ipv6 128ビットアドレス空間がどのように機能するかについての20の異なる説明を読んだ後、私は絶望してあきらめ、代わりにRfcを読みました。 私はあなたがこれらのHOWTOの少なくとも1つを読んだと仮定します、それで私はIpv6アドレスの接頭辞、接尾辞、インターフェイスIdまたはサブネットに入る必要はありません、それで私はHowtoのほとんどが終わるところから始めます。

Ipv6はどのように機能しますか?Ipv4にはdynamic host configuration protocol(DHCP)と呼ばれるプロトコルがあり、DHCPサーバーを見つけることができれば、接続に必要なすべての情報(ローカルアドレス、ルーター、DNSサーバー、タイム しかし、このサービスは誰かによってセットアップされなければならず、Ipv6はそれなしでネットワークを設定するように設計されています。

Ipv6ステートレスアドレス自動設定(SLAAC)が行う最初の仮定は、/64サブネット上にあることです(したがって、Ipv6のすべてのサブネットには、Ipv4インターネッ これは、ほとんどの実際のサブネットには<100システムが含まれているため、ランダムなアドレスを選択するだけで、既存のシステムと衝突する可能性 実際には、アドレスを選択する三つの現在の方法があります/64:

  1. EUI-64(RFC4291)は、基本的に1ビット反転され、ff:feが中央に配置されたMACアドレスに基づいています。
  2. 静的なキー、インターフェイス、プレフィックス、カウンタに基づいてハッシュから生成されるStable Private(RFC7217)(衝突がある場合、カウンタは増加します)。 これらはEUI-64のものよりも好まれ、MACアドレスに関連付けられた設定(使用しているネットワークカードの種類など)
  3. Privacy Extension Addresses(RFC4941)に非常によく似ていますが、ipv6アドレス廃止メカニズムを使用して時間の経過とともに変更され、匿名性を維持したいクライアントシステム用です。

Linuxの次の問題は、誰がインターフェイスを設定するかです。 カーネルIpv6スタックは実際にはそれを行うように設計されており、そうしないと言われない限りそうなりますが、最新のネットワークコントローラ(NetworkManagerのよ また、デフォルトでは、ファイルシステム(/var/lib/NetworkManager/secret_key)で維持されている静的秘密を使用して安定したプライベートアドレス指定を行います。

Ipv6アドレスについて次に理解すべきことは、それらがスコープに分割されていることであり、最も重要なのは、従来常に接頭辞fe80::/64を持つリンクローカルア リンクローカルアドレスは、最初に上記の方法のいずれかを使用して構成され、次にネットワークのプローブに使用されます。

マルチキャストとネイバーディスカバリ

Ipv4とは異なり、Ipv6にはブロードキャスト機能がないため、すべての検出はマルチキャストで行われます。 ネットワーク上のノードは、スイッチによってインターセプトされた特別なパケットを介して、特定のマルチキャストアドレスにサブスクライブし、サブスクライブされていないマルチキャストを受信しません。 従来、すべてのリンクローカルマルチキャストアドレスは接頭辞ff02::/64を持ちます(他のタイプのマルチキャストアドレスについてはRFC4291を参照)。 すべてのノードは”all nodes”マルチキャストアドレスff02::1をサブスクライブし、ff02::1:ffXX:XXXXの独自の要求ノードマルチキャストアドレスをサブスクライブす この後者は、アドレス解決のためにノードの特定のサブセットをターゲットにできるようになったため、以前はARPブロードキャストからIpv4で発生していた中断を回避するためです。

IPV6アドレス解決プロトコルは、RFC4861で説明されているNeighbour Solicitation(NS)と呼ばれ、RFC4862で説明されているSLAACで使用され、知りたい完全なIpv6アドレスを含む発見したいノードのneighbour solicitationアドレスにマルチキャストを送信することによって行われ、一致するアドレスを持つノードは、Neighbour Advertisement(NA)パケット内のリンク層(MAC)アドレスで応答します。

ノードがリンクローカルアドレスを選択すると、まずNSパケットを選択したアドレスに送信して、誰も返信しないかどうかを確認し、誰も返信しない場 一意のアドレスが検出されると、ノードはこのリンクローカルアドレスを設定し、ルータを探します。 Ipv6ネットワークが存在しない場合、検出はここで停止するため、ほとんどのネットワークインターフェイスは常にリンクローカルIpv6アドレスを示

Router Discovery

ノードに固有のリンクローカルアドレスがあると、それを使用してRouter Solicitation(RS)パケットを”all routers”マルチキャストアドレスff02::2に送信します。 ネットワーク上のすべてのルーターは、ルーターの寿命、ネットワークMTU、ルーターが担当する一つ以上のプレフィックスのセット、ルーターのリンクアドレス、M(Managed)およびO(Other Configuration)フラグ、および場合によってはDNSサーバーのセットを含む一連のオプションフラグを記述するRouter Advertisement(RA)パケットで応答します。

アドバタイズされた各接頭辞には、接頭辞と接頭辞の長さ、A(autonomous configuration)とL(link local)を含むフラグのセット、およびライフタイムのセットが含まれます。 リンクローカルプレフィックスは、ローカルネットワークユーザがどのグローバルプレフィックスを使用しているか(複数存在する可能性があります)、およびグロー ルーターの有効期間がゼロ以外の場合は、そのルーターがサブネットの既定のルーターであると想定できます。

ノードが一つ以上のルータを検出したので、独自のグローバルアドレスを設定することができます(Ipv6ルーティング可能なすべてのノードには、リンクローカル ノードが最初に知る必要があるのは、グローバルアドレスにSLAACを使用するのかDhcpv6を使用するのかです。 これは、RAパケット内の任意のリンクローカルプレフィックスのaフラグによって完全に決定されます。 Aが設定されている場合、ノードはSLAACを使用することができ、Aがクリアである場合、ノードはアドレスを取得するためにDhcpv6を使用する必要があります。 Aが設定され、M(Managed)フラグも設定されている場合、ノードはSLAACまたはDhcpv6(またはその両方)を使用してアドレスを取得でき、MフラグがクリアであるがO(Other Config)フラグが存在する場合、ノードはSLAACを使用する必要がありますが、Dhcpv6を使用してネットワーク(通常はDNS)に関する他の情報を取得することができます。

ノードがグローバルアドレスを持つと、デフォルトルートが必要になります。 これは、ゼロ以外のルータの有効期間を持つRAパケットからデフォルトルートリストを形成します。 これらはすべて、RA指定されたホップ数を使用して、リンクローカルアドレスへのデフォルトルートとして設定されます。 最後に、ノードは、ルータの寿命がゼロであるが、非リンクローカルプレフィックスを持つRAパケットから特定のプレフィクスルートを追加することができる。

Dhcpv6はかなり複雑な設定プロトコルです(RFC8415を参照)が、接頭辞の長さ(取得されたすべてのアドレスが/128として設定されていることを意味します)また したがって、SLAACとDhcpv6の両方で設定すると、SLAACアドレスは/64として追加され、Dhcpv6アドレスは/128として追加されます。

: あなた自身のホームルーターを設定する

あなたが上記から考えることの一つは、Ipv6は常に自動設定することであり、それはあなたが単にケーブルモデムのイーサネットポートにあなたのラップトップを差し込むと、それだけで自動的に設定されますことは事実ですが、ほとんどの人は、それが動作する前に、いくつかの特別な同軸を必要とするルータを含むより複雑なホーム設定を持っています。 つまり、特別なDhcpv6要求を使用してISPから追加機能を取得する必要があります。

このセクションは私自身の視点から書かれています: 私は完全に開いているが帯域幅が制限されている(信頼されていないクライアントに)wifiネットワーク、およびいくつかの保護された内部ネットワーク(私の研究室用、私の携帯電話用、家庭用ビデオカメラ用)を持つかなり複雑なIpv4ネットワークを持っているので、私は自宅のすべてのデバイスにIpv6アドレスを与えるために少なくとも4つのサブネットが必要です。 私はまた、私のルータの配布としてOpenWRTを使用しているので、すべてのIpv6設定情報はそれに非常に固有のものです(ドキュメントを掘る準備ができていDhcpv6は/128アドレスのみを渡すため、ルータ自体のIPアドレスであるため、これでは十分ではありません。 ルータになるには、Dhcpv6のIdentity Association for Prefix Delection(IA_PD)オプションを介してIpv6アドレス空間の一部の委任を要求する必要があります。 これが行われると、ルータのIPアドレスは、ISPによって委任されたすべてのプレフィックスのルートであると想定されます。 ここでの微妙な点は、複数のサブネットが必要な場合は、それを具体的に要求する必要があることです(クライアントは探している正確な接頭辞の長さを指定する必要があります)。 あなたが63を要求するならば、あなたは2を持っています。 問題は、ISPがあなたに何個のサブネットを提供してくれるかをどのように知っているかです。 残念ながら、これを見つける方法はありません(私はISP、Comcastを発見するためにインターネット検索をしなければならなかったが、接頭辞の長さ60、つまり16 検索でISPがどれだけ委任しても構わないかがわからない場合は、48から始めて64に1単位で作業して、最大の委任が何であるかを確認してください(Ispが最初の委任された接頭辞の長さでロックしているという報告がありますので、64から始まらないでください)。 最後の微妙な点は、委任されている接頭辞が、ルーターが取得したアドレスと同じ接頭辞ではない可能性があることです(現在のcomcast設定では、ルーターは2001:558:600a:… 注取得できるプレフィックスのサイズを調べるためにISPを調べる必要がある場合は、-Pオプションを使用してodhcp6cを手動で実行できます。OpenWRTの用語では、ルータWAN DHCP(v6)の設定は/etc/default/networkによって制御されます。 Dhcpv4用のWANインターフェイス(おそらく’wan’と呼ばれる)が既にあるので、追加の’wan6’インターフェイスを追加して追加のIpv6を取得し、デュアルスタックにな 私の設定では、これは

config interface 'wan6' option ifname '@wan' option proto 'dhcpv6' option reqprefix 60

のように見えますが、わずかな奇妙さはifnameです: @wanは、単に’wan’インターフェイスと同じifnameを使用するように設定に指示します。 Wanがブリッジである場合は、このように名前を付けることが不可欠ですが、とにかく良い習慣です。 他のオプション’reqprefix’は、/60プレフィックス委任を要求するようにDhcpv6に指示します。

委任された接頭辞を渡す

これは非常に簡単です。 まず、ルータ上の他の各インターフェイスに委任された接頭辞を割り当てる必要がありますが、それぞれに新しいOpenWRTインターフェイスを追加せずにこれを 私の内部Ipv4ネットワークにはすべての静的アドレスがあるので、各インターフェイスに三つのディレクティブを追加します:

config interface 'lan' ... interface designation (bridge for me) option proto 'static' ... ipv4 addresses option ip6assign '64' option ip6hint '1' option ip6ifaceid '::ff'

ip6assign’N’はあなたが/Nネットワークであることを意味し(これは私にとっては常に/64です)、ip6hint’N’はサブネットidとしてNを使用することを意味し、ip6ifaceid’S’はIpv6サフィックスとしてSを使用することを意味します(これはデフォルトで::1なので、これで大丈夫なら、このディレクティブは省略してください)。 したがって、2601:600:8280:66d0::/60接頭辞がある場合、このインターフェイスのグローバルアドレスは2601:600:8280:66d1::ffになります。 Acidテストでは、この権利があれば、このグローバルアドレスはIpv6インターネット上のどこからでもping可能でなければなりません(そうでない場合は、ファ

ルーターとしての広告

ローカルルーターインターフェイス上で委任されたプレフィックスを委任されるだけでは不十分です。 今、あなたはff02::2上のルータの勧誘に応答し、必要に応じてDhcpv6を行うためにあなたのルータを取得する必要があります。 残念ながら、OpenWRTにはこれを行うための二つのメカニズムがあり、通常はodhcpdとdnsmasqの両方がインストールされています。 私が見つけたのは、odhcpdを完全に無効にするまで/etc/config/dhcp私のディレクティブのどれも有効にならないことでした

/etc/init.d/odhcpd stop/etc/init.d/odhcpd disable

そして、私はdnsmasqを他の場所(内部/外部ネットワー まず、dnsmasqに必要なオプションと、OpenWRT/etc/config/dhcpファイルのエントリを使用してこれを達成する方法を説明します(OpenWRTが/var/etc/dnsmasqに入れたものを常に確認するのがconfファイル)。

最初に必要なdnsmasqオプションは’enable-ra’であり、これはdnsmasqにルータ通知を処理するように指示するグローバルパラメータです。 次に必要なパラメータは、グローバルルーター広告パラメータを指定するインターフェイスごとの’ra-param’であり、広告するインターフェイスごとに一度表示する必要があります。 最後に、’dhcp-range’オプションを使用すると、RAフラグのタイプとオプションのDhcpv6のより詳細な設定が可能になります。

SLAACまたはDhcpv6(またはその両方)

多くの点で、これは個人的な選択の問題です。 SLAACを許可すると、プライバシー拡張アドレス(Android携帯電話など)を使用したいホストがそうすることができますが、これは良いことです。 Dhcpv6アドレスの選択も許可すると、ホストに割り当てられたアドレスのリストが表示され、dnsmasqはそれらのDNS解決を行います(ただし、SLAACアドレスのDNSを 特別なタグ’constructor’が’dhcp-range’オプションのために存在し、指定されたインターフェイスのIpv6グローバルプレフィックスから(RAまたはDhcpv6のいずれかの)指定されたア ‘Dhcp-range’のモードは、Dhcpv6を完全に禁止する’ra-only’、Dhcpv6アドレス選択を許可する’slaac’、Dhcpv6アドレス選択を禁止するが他のDhcpv6設定情報を許可する’ra-stateless’です。

試行錯誤に基づいて(そして最後に/etc/initのスクリプトを調べます。d/dnsmasq)上記のdnsmasqオプションを実現するために必要なOpenWRTオプションは、’ra_management’をキーオプションとして

config dhcp lan option interface lan option start 100 option limit 150 option leasetime 1h option dhcpv6 'server' option ra_management '1' option ra 'server'

で、’0’はDHCPV6オプションを持つSLAACを意味し、’1’は完全なDhcpv6を持つSLAACを意味し、’2’はDhcpv6のみを意味し、’3’はSLAACのみを意味する。 別のOpenWRTの奇妙なことは、リース範囲を設定する方法がないように見えることです:常にstatic onlyまたは::1000から::ffffのいずれかにデフォルト設定されます。

ファイアウォール設定

人々をつまずくことの一つは、LinuxがIpv4用とIpv6用の二つの完全に別々のファイアウォールを持っているという事実です。 あなたがそれらのためのカスタムルールを書いたことがあるなら、あなたはOpenWRT/etc/firewallでそれをした可能性があります。これは、Ipv4ファイアウォールにルールを追加しただけであることを意味します。 Ipv6に同じルールを追加するには、ip6tablesコマンドを使用してルールを複製する必要があります。 別の重要な問題は、私のようにポートノック検出に接続追跡を使用している場合、Linux接続追跡はIpv6マルチキャストでは困難であるため、マルチキャストに出て行くが、ユニキャストとして戻ってくるパケット(ほとんどの検出プロトコルがそうであるように)が間違ったconntrack状態になることです。 これを修正するには、最終的にすべてのIcmpv6とDhcpv6(udpポート546と547)を受け入れるだけの入力ルールが必要でした。 他のファイアウォールの考慮事項は、誰もが自分のIPアドレスを持っているので、NATは必要ありません(OpenWRTはこれを自動的に処理するように説得できま 最後のものは私にはもっと適用可能です: 私のwifiインターフェイスは、ローカルインターネットの拡張として設計されており、それに接続するすべてのマシンは、空港wifiのような敵対的な環境に移行するため、自分自身を保護できることが期待されているため、ポートプローブを含むすべてのポートの一般的なインターネットにwifi接続されたデバイスを完全に露出させます。 私の内部デバイスでは、内部ネットワークから移行するように設計されていないため、プローブされていないことを確認するための関連する確立された

今OpenWRTの問題: それらを結合しようとすると(私が最初に行ったように)、OpenWRTはIpv6–ctstate INVALID ruleを追加し、Ipv6マルチキャストのconntrackの問題のために隣人の発見が機能しないようにするので、私のwanゾーンは(まあ、これは私のファイアウォールが手作りされているので嘘ですが、これは手作りのファイアウォールを設置する前に働いてチェックしたものです):

config zone option name 'wan' option network 'wan' option masq '1' ...config zone option name 'wan6' option network 'wan6' ...

lanゾーン(完全にアクセス可能)のルーティングルールは、

config forwarding option src 'lan' option dest 'wan'config forwarding option src 'lan' option dest 'wan6'config forwarding option src 'wan6' option dest 'lan'

です。: クライアントのIpv6接続の取得

ルータを設定したので、すべてがうまくいくはずです。 その場合、ラップトップのwifiインターフェイスにグローバルIpv6アドレス

ip -6 address show dev wlan0

が必要になります。 リンクローカル(fe80::prefix)アドレスのみがある場合、Ipv6は有効になっていますが、ルーターは広告していません(検出パケットやdnsmasqの設定ミスによるファイアウ グローバルアドレスが表示されたら、完了です。 今、あなたはhttps://testv6.comに行き、10/10のスコアを確保することができるはずです。パズルの最後のピースは、DNSがIpv4またはIpv6アドレスの選択肢を提供するときに、新しいIpv6接続を優先することです。 現代のすべてのLinuxクライアントは、デュアルスタックネットワークに接続されている場合、利用可能な場合はIpv6を好むべきです。www.google.com そして、あなたが完了したIpv6アドレスを参照してください。 そうでない場合は、ipv6アドレスラベル(RFC6724)とgaiの暗い世界に入る必要があります。コンフ…

結論

Ipv6への追加と既存のIpv4設定は、現在のところ単純なプラグインとgo操作ではありません。 しかし、あなたが2つのプロトコルの違いのほんの一握りを理解していれば、それは克服できない問題でもありません。 私はまた、あなたがあなたのISPで遭遇するかもしれない問題の多くを詳しく説明しました。 一部の人々は、Ispが接頭辞の委任なしで1つのIpv6アドレスしか配布しないと報告しています。 他の人は、ISPが1つの/64接頭辞しか委任しないと報告しているので、ここでの選択は1つのサブネット(多くのホームネットワークには十分である可能性が高い)を実行するか、/64より大きいサブネットを実行してSLAACを禁止することですが、これは間違いなく推奨される構成ではありません。 ただし、ISPが合理的であれば、このブログ記事は少なくともあなたを始めるのに役立つはずです。

Write a Comment

メールアドレスが公開されることはありません。