web-dev-qa-db-ja.com

ipv6のルーターアドバタイズメントはアドバタイズリンクローカルアドレスです

私は次の状況にあります:FreeBSD9.1マシンをgif0インターフェース上のハートビートSixXSトンネルのエンドポイントとして設定しました。これまでのところ機能しており、IPv6経由でping6を実行できます。

LANに接続されている割り当てられたIPv6サブネットから静的IPv6を集約したインターフェイスである別のインターフェイスlagg0に割り当てました。ここで、rtadvdデーモンを使用してこのネットワークプレフィックスをLANにアドバタイズしたいと思います。

これはその/etc/rtadvd.confファイルです:

lagg0:\
     :addr="xxxx:yyyy:zzzz:aaaa::":prefixlen#64:tc=ether:

xxxx:yyyy:zzzz:aaaa::/64がネットワークプレフィックスです。ここでクライアントをネットワークに追加すると、クライアントはネットワークプレフィックスを取得し、autoconfと一時アドレスを生成します。それはうまくいきます。

ただし、欠落しているのは正しいIPv6デフォルトルートです。ルーティングテーブルでは、IPv6のデフォルトルートはルーターのfe80::リンクローカルアドレスです。

これで、パケットはインターネットにルーティングされません。デフォルトルートを手動でホストに追加すると、機能します。

私の質問

ルーターアドバタイズメントは、クライアントで正しいデフォルトルートを構成する必要があると思いました。ここで何かが足りませんか?なぜそれは正しいものの代わりにそのリンクローカルアドレスを宣伝するのですか?

5
GorillaPatch

リンクローカルアドレスは問題なく機能するはずであり、実際にはrtadvdによって使用されるアドレスです。

私は6to4を使用していますが、基本的に同じ構成です。私の場合、私がすることは次のとおりです。

ifconfig stf0 create
ifconfig stf0 inet6 2002:c0a8:1:ffff::1/16
ifconfig lan0 inet6 2002:c0a8:1::1/64

これは接続を作成するだけで、トンネルは同じ目的を切断する必要があります。

route add -inet6 default 2002:c058:6301::

この時点で、ping6 ipv6.google.comは私のルーターから機能します。

sysctl net.inet6.ip6.forwarding=1

リンクローカルアドレスを使用している場合でも、DG IPv6が機能するときにルーターを使用するようにクライアントを手動で構成すると、ルーティングが有効になります。ただし、ある程度の自動構成が必要です...したがって、/etc/rtadvd.confには次のものが含まれます。

lan0:\
    :addr="2002:c0a8:1::":prefixlen=64:tc=ether:

残っているのは、構成をrc.confファイルに追加することだけです。

ipv6_gateway_enable="YES"               # Route IPv6 Traffic
rtadvd_enable="YES"                     # IPv6 Router Advertisement Daemon
rtadvd_interfaces="lan0"

cloned_interfaces="stf0"
ifconfig_stf0_ipv6="inet6 2002:c0a8:1:ffff::1/16"

ipv6_defaultrouter="2002:c058:6301::"   # 6to4 Default Router

クライアントにはfec0 :: rangeのデフォルトルートがありますが、完全に機能します。 tcpdumpは、グローバルIPv6アドレスからfec0アドレスに送信するクライアントを示します。

6to4を実行したいこれを読んでいる人にとって、上記の「内部」アドレスは192.168.0.1用であり、インターネット上でルーティングすることはできません。外部IPv4アドレスに基づいて独自の内部IPv6アドレスを計算する必要があります。

3
Chris S