9
11

More than 3 years have passed since last update.

Edgerouter X(ER-X) 用に ndppd をカンタンにビルドする (ひかり電話なし)

Last updated at Posted at 2020-04-20

この度、無事に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が準備できます。

  1. git clone する
  2. docker を起動する
  3. コンパイルする
  4. 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の場合の設定例です。

/etc/ndppd.conf
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通信を行う (ひかり電話なし)」を参考になさってください

参考

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11