この度、無事にIPoE環境にすることができたので、そのへんの諸々を記録しておくことにします。
(updated 2020/5/4: ndppd.conf について追記)
IPv6を利用するにあたって、ひかり電話なし、での Edgerouter ではNDプロキシがないことで、ndppdをどうにかしてクロスコンパイルしながら、Edgerouter 本体へ持っていかなければなりません。できる限り省力化して、かつ誰でも実装できるように、Dockerコンテナとソースコードを準備しましたので、そちらを使ったやり方を紹介します。
前提条件
- docker が動かせること
- git コマンドが動作すること
- Edgerouteへsshできること
※ EdgeMax(ER-X用) firmware 1.10.11で確認していますが、2.xでもきっと動くでしょう。きっと。
実行手順
github にもさらっと書いていますが、4回の手順で Edgerouter向けのndppdが準備できます。
- git clone する
- docker を起動する
- コンパイルする
- scp する
1. git clone する
適当なワーキングディレクトリへ移って、git clone します。本家のではなく、わたしのところへForkしたものなので、まちがわずに。
git clone https://github.com/sho7650/ndppd.git
2. docker を起動する
MIPS(Little Endian)用にコンパイラがすでに準備されたUbuntuコンテナイメージで、ndppdディレクトリをマウントしつつ起動させます。
docker run -v $PWD/ndppd:/ndppd -it --rm sho7650/mipsel
3. コンパイルする
もうすでに、Edgerouter用の MIPS(Little Endian)でコンパイルできるようなMakefileに変更してありますので、ディレクトリを移ってmakeするだけです。
cd /ndppd
make
4. scp する
もうこれでndppdの実行ファイルは準備できました。dockerを終了して、ワーキングディレクトリ内から、scpを使って Edgerouter へファイルを転送します。せっかくなので、起動スクリプトも準備しましたから、それらも該当のディレクトリへ移してください。
scp ndppd <user>@<hostname>:/ndppd/local/sbin
scp scripts/ndppd <user>@<hostname>:/config/scripts/post-config.d
scp scripts/ndppd.initscript <user>@<hostname>:/ndppd/local/sbin
すでにsshでEdgerouterへログインできることが前提なのと、事前にEdgerouter側に/ndppd/local/sbinディレクトリを掘っておく必要があります。
例えばこんな感じで。ファイルをコピーする時のユーザー権限など気をつけてください。ここ以下の作業は Edgerouter側で実行しますので、お間違いなきよう。
mkdir -p /ndppd/local/sbin
ファイルをコピーしたあと、ユーザによってはrootとは異なっている可能性が大なので、chownしとくと良いでしょう。
chown -R root /ndppd
chown root /config/scripts/post-config.d/ndppd
5. ndppd.conf を準備する
構成にもよりますが、ここでは WAN側のインタフェイスを eth0、LAN側のインタフェイスがswitch0の場合の設定例です。
proxy eth0 {
router no
timeout 500
autowire yes
keepalive yes
retries 3
ttl 30000
rule ::/0 {
iface switch0
}
}
proxy switch0 {
router yes
timeout 500
autowire yes
keepalive yes
retries 3
ttl 30000
rule ::/0 {
auto
}
}
各項目の意味は次のとおりです。
基本形式
proxy <interface名> {
rule 1234:5678::/96 {
}
}
proxyとその中に含まれるruleが必須項目です。ndppdのlistenするインタフェイスをproxyに指定し、ターゲットとなる該当のIPv6アドレスをruleに記述します。rule内には転送先のインタフェイスを指定します。
proxy内のオプション
proxy <interface名> { 〜 } には各種オプションが設定可能です。
-
router:Neighbor Advertisementを流すかどうかを指定します。主にルータ内のLAN側に配置されるIPv6端末の情報をWAN側に提供する場合にyesにします -
timeout:ruleで指定した対象にNeighbor Advertisementを転送して待機するまでの時間です -
ttl: proxyで保持する情報をどの程度の期間キャッシュへ保持するかを指定します -
autowire:Neighbor Advertisementを受信したときに、ルーティングテーブルに自動的にホストエントリーを作成するかどうかを指定します -
keepalive: セッションが切れる前に、セッションを維持し続けようとするかどうかを設定します -
retries: NDプロキシが、ホストに到達できるかどうかNDP Solicitationを送信する回数
実際にNDプロキシを利用してIPv6化するには
「Edgerouter (ER-X) で NDプロキシを使って IPv6通信を行う (ひかり電話なし)」を参考になさってください