この度、無事に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通信を行う (ひかり電話なし)」を参考になさってください