親ルータから子ルータ、子ルータから孫ルータへ等とPrefix Delegationをおこなっていて気が付いたのは、Prefixが動的に割り当てられるため、上位のルータのPREFIXが変更されると下位のルータが通信できなくなる点でした。つまり、Prefix Delegationはするが固定で割り当てる必要があるといまさらながら気が付きました。そこで調べたところ、ホスト固定でprefixを付与する方法があるようなので、本稿をUPしてみました。
まず、最初にしらべないといけないのは、クライアント(下位ルータ)のDUIDです。上位のルータの/var/log/syslogに以下のようなログがあるのでそれを利用します。
再掲:/usr/local/bin/pdr.sh (chmod +x)
まず、最初にしらべないといけないのは、クライアント(下位ルータ)のDUIDです。上位のルータの/var/log/syslogに以下のようなログがあるのでそれを利用します。
dhcpd[1954]: Reply NA: address 2XXX:aaaa:bbbb:cc00:1111:2222:3333:4444 to client with duid 00:0X:00:0X:XX:YY:ZZ:AA:00:BB:CC:DD:EE:FF iaid = ZZZZZZZZZZ valid for 600 seconds後はdhcpd6.confに以下の様に追加設定すれば、固定でPREFIXとアドレスを割り当てることができます。
host gw2 { host-identifier option dhcp6.client-id 00:0X:00:0X:XX:YY:ZZ:AA:00:BB:CC:DD:EE:FF; fixed-address6 2XXX:aaaa:bbbb:cc00::2; fixed-prefix6 2XXX:aaaa:bbbb:cc10::/60; on commit { execute("/usr/local/sbin/pdr.sh", "2XXX:aaaa:bbbb:cc10::", "60", "2XXX:aaaa:bbbb:cc00::2"); } }on commit時に/usr/loca/sbin/pdr.shを固定呼び出しているのは、サブルータへのスタテイックルートを設定するためですが、固定で割当てている場合、dhcp6.ia-pdが存在していて設定をパラメータ渡ししようとしても、no scopeで取得できないためです。(バグなのか仕様なのかわかりません。)
再掲:/usr/local/bin/pdr.sh (chmod +x)
#!/bin/bash rt1=`ip -6 route show $1/$2 via $3` rt2=`ip -6 route show $1/$2` if [ -z "$rt1" ];then if [ -n "$rt2" ]; then ip -6 route delete $1/$2 fi ip -6 route add $1/$2 via $3 fiなお、古いリースファイルが残っている場合、二重でPrefixを取得することがあり、この場合は以下の様に下位ルータ側でリースファイルを削除してください。
rm /var/lib/dhcp/dhclient6.eth0.leases touch /var/lib/dhcp/dhclient6.eth0.leases今回は以上です。それでは。
コメント
コメントを投稿