ネットワークをグローバルIPv6スペースに接続する

少し前に、記事「ローカルネットワークのIPv6ゲートウェイ」へのコメントで、プロジェクトの1つでIPv6をアクティブにした方法について話すように頼まれました。 プロジェクト自体についていくつかの言葉から始めます。 CareNetは、スウェーデンの2つの大規模大学、 KTH Royal Institute of TechnologyKarolinska Institutetの協力の結果です。 要するに、CareNetは病院外の緩和患者を監視するためのシステムです。 小さなデバイスが患者の家に設置され、インターネットにアクセスでき、VPNを介してCareNetサーバーに接続されます。 このデバイスには、HDVCクライアント、患者の状態を監視するための一連のセンサー、およびすべての患者情報を含む医療ポータルへのアクセス手段が含まれています。 医療情報は、患者と医師の両方が利用できます。



しかし、この記事はIPv6アクティベーションに関するものなので、クライアントではなくCareNetインフラストラクチャの中心部分に関心があります。 ストックホルムのKTH大学サイトにある多数のルーターとサーバーが含まれています。 この図は、ネットワークの規模を示しています。







20週間、私のタスクは、指定されたインフラストラクチャを稼働状態に維持し、その機能を向上させることでした。 自分で定義したタスクの1つは、この小さなネットワークトポロジでのIPv6のアクティブ化です。 さらに、ネットワーク内にIPv6を展開することに加えて、CareNetをグローバルIPv6スペースに接続したいと考えました。



アドレッシング



大学の管理者に、私の小さなサンドボックスのIPv6ラボの範囲の一部を提供するように依頼することから始めました。 プレフィックス2001:6b0:32 :: / 49は厳soleに委任されました。 最初は気分を害し、何度か実行してさらに要求したかったのですが、最終的には、このようにアドレス指定方式を廃止し、紙の上で、6x10 23個のアドレスで十分であると判断しました。

アドレス指定を決定したら、ルーターのインターフェイスを構成しました。 ここで、CareNetのルーターは、高性能ハードウェア/ソフトウェアLinuxプラットフォームBifrostに基づいて構築された珍しいものであると言わなければなりません。 これは現在商業市場に参入している大学開発です。 ルーター間のインターフェースの帯域幅は10 Gb / sです。 ルーティング(コントロールプレーン)では、Quaggaソフトウェアパッケージを担当します。



内部ルーティング、OSPFv3



IPv6アドレスをルーターインターフェイスに追加することで、OSPFv3を動的ルーティングプロトコルとして起動しました。 基本設定、1つのOSPFゾーン0.0.0.0。 OSPFが選択されない理由についての技術的な説明はありません。 個人的には、名前で選択します。 RIPng好きではありません。 IS-ISは喜んでいますが、Quaggaはそれをサポートしていません。

Quaggaはこのパッケージを初めて使用しましたが、コマンドインターフェイスがCisco CLIに似ているため、すぐに慣れました。 2つのルーターのospf6dデーモンの構成例を示します。



hostname VR-ospf6d <br>

!

router ospf6

router-id 192.16.126.9

interface eth1 area 0.0.0.0 # HR <br>

interface eth2 area 0.0.0.0 # KR <br>

interface dummy0 area 0.0.0.0 #loopback <br>

!







hostname KR-ospf6d <br>

!

interface eth2 # <br>

ipv6 ospf6 passive # OSPF Hello <br>

!

router ospf6

router-id 192.16.126.10

interface eth2 area 0.0.0.0 # <br>

interface eth0 area 0.0.0.0 # VR <br>

interface dummy0 area 0.0.0.0

!







動的アドレス割り当て、DHCPv6



ルーティングがアクティブになり、ファーム内のサーバーとアクセスネットワーク内のクライアントにIPv6アドレスを動的に割り当てることに関して次の質問が生じました。 このタスクをDHCPv6サーバーに割り当てることが決定されました。 ISC DHCPとDibblerの2つのDHCPv6サーバーを展開しました。 コンテストは、IPv6アドレスを割り当てて最初にクライアントにサービスを提供するサーバーが引き続き機能するという条件で開催されました。 Dibblerは速かったため、ISC DHCPは破壊されました。 割り当てられたアドレスの範囲を設定する例:



vp@dns:~$ cat /etc/dibbler/server.conf <br>

... <br>

option dns-server 2001:6b0:32:0::66 #IPv6 DNS <br>



class {

pool 2001:6b0:32:0::0000 - 2001:6b0:32:0::0fff # IPv6 <br>

}

client duid 0x000100011657fdc9be10f563c5bf {

address 2001:6b0:32:0::69 # Ipv6 SIP <br>

}

... <br>







IPv4の通常のDHCPとの2つの興味深い違い:

  1. まず、DHCPv6はクライアントにデフォルトゲートウェイアドレスを提供しません。これは、この場合はKistaのルーターです。 ゲートウェイ自体は、近隣探索メカニズムに従ってその存在を宣言する必要があります。 RFC 2461ではこのメカニズムについて詳しく説明しています。ルーターは定期的にルーターアドバタイズメント(RA)メッセージを送信し、このセグメントでデフォルトゲートウェイを宣言する必要があることを説明します。 私の場合、これにはKRルーターの構成を補完する必要がありました。



    hostname KR-zebra <br>

    !

    interface eth2 # <br>

    no ipv6 nd suppress-ra # RA <br>

    ipv6 nd prefix 2001:6b0:32::/64 no-autoconfig #IPv6 <br>

    !







  2. 2番目の機能は、DHCPv6サーバーがどのアドレスに基づいて静的アドレスを割り当てるかです。 DHCPv4で永続アドレスを割り当てる必要のあるデバイスのMACアドレスを設定するだけで十分だった場合、DHCPv6サーバー構成では、いわゆるDHCP一意識別子(DUID)を登録する必要があります。 以前に個別に指定した構成で見つけることをお勧めします。 RFC 3315のDUIDについて読むことができます。



外部ルーティング、BGP



内部ルーティングは機能しており、クライアントはアドレスを受信して​​います。IPv6インターネットアクセスを開くのはユーザー次第です。 私のすぐ隣人-AS 2839(KTH-LAN)はすでにグローバルIPv6スペースの一部であると推測して、私は管理者にIPv6プレフィックスをアドバタイズするためにKTH-LANとの追加のBGPセッションを確立することを許可するように敢えて求めました。 すべての技術的な詳細に同意した後、IPv6 BGPネイバーフッドが確立されました。 チェーンの次の自律システム(SUNET)の自律システムを説得して着信BGPフィルターを更新し、最後にプレフィックスをフリーフロートに解放するのに数日かかりました。 Bgpdデーモンの構成:



hostname VR-bgpd <br>

!

router bgp 8973 # CareNet <br>



bgp router-id 192.16.126.1

neighbor 2001:6b0:1:2::1 remote-as 2839 #IPv6 BGP- <br>



no neighbor 2001:6b0:1:2::1 activate

!

address-family ipv6

network 2001:6b0:32::/49 # <br>

neighbor 2001:6b0:1:2::1 activate

neighbor 2001:6b0:1:2::1 soft-reconfiguration inbound

neighbor 2001:6b0:1:2::1 route-map only-default6-in in # <br>

neighbor 2001:6b0:1:2::1 route-map only-carenet6-out out # <br>

exit-address-family

!

ipv6 prefix-list CARENET6 seq 5 permit 2001:6b0:32::/49 # 2001:6b0:32::/49 <br>

ipv6 prefix-list DEFAULT6 seq 5 permit ::/0 # ::/0 <br>

!

route-map only-default6-in permit 10

match ipv6 address prefix-list DEFAULT6

!

route-map only-carenet6-out permit 10

match ipv6 address prefix-list CARENET6

!







アナウンスおよび受信されたプレフィックスのフィルタリングに加えて、「IPスプーフィング」攻撃に対抗するメカニズムとして、自律システムの境界を越えるトラフィックに対して同一のフィルターを直接アクティブ化することをお勧めします。 単純なACL ACLがトリックを行います。



BGPを設定してフィルターを整理した後、シャンパンを開き、ipv6.google.comからのpingとして知られる最初のICMPv6の回答を満たす準備をしました。 以下のルートトレース:



vp@dns:~$ traceroute6 ipv6.google.com <br>

traceroute to ipv6.l.google.com (2a00:1450:4010:c01::93) from 2001:6b0:32::66, 30 hops max, 24 byte packets

1 kis-lanlink.carenet-se.se (2001:6b0:32::1) 1.13 ms 0.457 ms 0.49 ms

2 lpp01m02-in-x93.1e100.net (2a00:1450:4010:c01::93) 0.944 ms 0.933 ms 1.115 ms

3 br1g-cn6-p2p.gw.kth.se (2001:6b0:1:2::1) 1.261 ms 1.3 ms 1.091 ms

4 * * *

5 t1fre-ae5-v1.sunet.se (2001:6b0:1e:1::36) 1.467 ms 1.256 ms 1.239 ms

6 se-fre.nordu.net (2001:948:0:f051::1) 1.718 ms 1.562 ms 1.463 ms

7 se-tug.nordu.net (2001:948:1:1::3) 1.344 ms 1.315 ms 1.269 ms

8 se-tug2.nordu.net (2001:948:1:5::3) 1.505 ms 1.359 ms 1.287 ms

9 google-gw.nordu.net (2001:948:0:f008::3) 1.443 ms 1.616 ms 1.298 ms

10 2001:4860::1:0:26ec (2001:4860::1:0:26ec) 1.896 ms 2.002 ms 1.911 ms

11 2001:4860::8:0:26e5 (2001:4860::8:0:26e5) 41.025 ms 11.119 ms 11.02 ms

12 2001:4860::2:0:2aaf (2001:4860::2:0:2aaf) 11.223 ms 11.455 ms 11.955 ms

13 2001:4860:0:1::4d0 (2001:4860:0:1::4d0) 22.558 ms 21.472 ms 17.857 ms

14 lpp01m02-in-x93.1e100.net (2a00:1450:4010:c01::93) 10.833 ms 10.878 ms 13.669 ms







IPv6のDNS



最後に、IPv6アドレスで動作するようにDNSがどのように構成されたかを説明します。 ネットワークにはすでにIPv4範囲を提供するBINDサーバーがあったため、DNSサーバーを最初からインストールする必要はありませんでした。 IPv6レコードは、既存のIPv4アドレスへの直接DNSゾーンに追加されました。 とても簡単でシンプルですが、念のため、構成例を示します。

vp@dns:~$ sudo cat /etc/bind/zones/external/carenet-se.se.db <br>

... <br>

;; Routers' loopacks

vr IN A 192.16.126.9

vr IN AAAA 2001:6b0:32:10::1

... <br>







しかし、逆ゾーン(逆DNSルックアップ)をいじる必要がありました。 canons 2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpaに従って命名された別のファイルが作成されました。 名前は2001:6b0:32 :: / 49プレフィックスから形成され、逆順で記述され、ゼロで補完されます。 さらに、ネットワーク上のすべてのIPv6システムのリバースDNSレコードは、やや不親切で読みにくい形式で追加されます。 構成の一部を以下に示します。



vp@dns:~$ sudo cat /etc/bind/zones/2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpa <br>

$TTL 600

$ORIGIN 2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpa. # <br>

@ IN SOA ns.carenet-se.se. adm.carenet-se.se. (

2011120101;

28800;

604800;

604800;

86400);



IN NS ns.carenet-se.se.

IN NS ns.ssvl.kth.se.

IN NS ns2.ssvl.kth.se.



6.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ns.carenet-se.se.

... <br>

$ORIGIN 0.0.0.0.2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpa.

9.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR sip.carenet-se.se.

4.9.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR log.carenet-se.se.

... <br>

$ORIGIN 0.1.0.0.2.3.0.0.0.b.6.0.1.0.0.2.ip6.arpa.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR vr.carenet-se.se.

... <br>







結論と追加情報



CareNetは目標を達成し、グローバルIPv6ドメインの一部になりました。 CareNetで入手可能な公式プロジェクトドキュメントで、IPv6アクティベーションのプロセス全体について詳しく説明しました。 そこにも回路を見つけることができます。 プロジェクトは学術的であり、情報は公開されており、秘密は含まれていません。 ご清聴ありがとうございました。



All Articles