何というてんこ盛り。知見があんまりないので苦しんだ。
前提条件
- Edgerouter X。ファームウェアは EdgeOS v2.0.8-hotfix.1。
- NTT 東日本。ひかり電話なし。よって RA、IPv6 アドレスが /64 で降ってくることが前提。
- 地獄プロバイダ・BIGLOBE。v6オプションライトを契約している。
以下 Edgerouter X を ER-X とする。
Edgerouter X の初期設定
ER-ペケに PC を繋げてやる
情報によれば、ER-X は初期状態では DHCP しないそうなので差し当たり PC に ER-X を直結する。そして PC の NIC なりのアダプタ設定で IP アドレスを手動設定する。
ER-X のアドレスは 192.168.1.1
らしいので、PC のアドレスは 192.168.1.2
あたりにすればいいだろう。設定したら ER-X にアクセスできるはずである。
どうでもいいが SSH でも接続できる。ssh ubnt@192.168.1.1
でアクセスできるんじゃない?パスワードも ubnt
のはず(初期設定段階で試していない)。
本当の初期設定(IPv4 PPPoE)
多分最初ぐらいは GUI (=HTTP)でやると思うのでそれ前提。それっぽい画面が開いたら順々に設定を進める。ER-X を買うぐらいなら多分自力でやれると思うのだが……。ER-X の GUI はそこそこに優秀である。ほぼなんでも出来る。
設定のウィザードが出たら Port を eth0(か eth4)、 Internet connection type を PPPoE にする。Account Name と Password は ISP から受けた通りにやる。
各種ファイアウォールで有効で構わないと思う。DHCPv6 PD なのだが、これはひかり電話を契約しているならチェックする。そして ndppd とかいう謎は忘れて良くなる。一方契約していないならチェックせず ndppd 地獄を経験する流れとなる。したくないならヤマハとか NEC のルータとか買えばどうにかなる(ND Proxy がある)。
DNS Forwarding はお好みで。必要なら Cloudflare DNS とか?One LAN はよくわからん。チェックしてるけど動いてる。LAN Ports はいわゆる DHCP なのでサブネットをいじりたいなら要設定。後から DHCP いじろうとすると結構辛いので慎重にやる。10.0.0.1/255.0.0.0
とかなら気持ちいいアドレスになる。
User setup はユーザ名・パスワード共に堅牢なものにする。初期状態なユーザ名・パスワードは全機種で一緒なので、攻撃に極めて脆弱である。必ず変える。か・な・ら・ず。まあ後で WAN からのアクセスを封じるので微妙なところではあるが、念には念を入れる。
本当にいいなら Apply ボタンを叩く。多分再起動を促されるので素直に従ったほうが良い。してる間に ER-X を PC から一旦切り離してアドレス設定なんかをもとに戻す。次は eth0
に WAN(NTT なら ONU からの線)を繋く。ちょっと待とう。起動し終わって IPv4 でアクセスできるなら後はどうにでもなる。ならなかったら天を仰げ。
第二の初期設定・身の回りを固める
ファームウェアを最新版に更新
多分初期設定(というより工場出荷状態?)ではファームウェアが v1 台だと思う。v2系がもうあるのでそっちに更新したほうが良い。v1 だとハードウェアオフロードに不具合がある([1-2] 参考)。v2 では解決している。なんせ v1 の CHANGELOG に確かにあったハードウェアオフロードの不具合の項が v2 のチャンゲログでは確かに消えている。
Ubiquiti のサイトから v2 系のファームをダウンロードして、GUI にアクセス → 下部の System → Upgrade System Image → Upgrade でよい。結構時間が掛かる。面倒なら、もっと面倒な UMNS とかいう奴でリモート更新ができるが……。
グッバイ外部からのアクセス
初期設定では GUI / SSH に外部からアクセスできる。グローバル IP アドレスさえあれば簡単。マジで画面が出てくる(経験済み)。これがユーザ名・パスワードの再設定を強く勧める理由である。もちろん外部からアクセスできると危険なので潰す。
ここからは SSH でやる。以下のコマンドを実行する。以後似たようなコマンドが出てくるときは最初の configure
と最後の commit
を実行する。コミットで本当に叩いた設定がおっけーなのか確かめて適用し、save
で保存する。exit
は configure モードを抜ける。
$ configure
# set service gui listen-address 10.0.0.1
# set service ssh listen-address 10.0.0.1
# commit; save; exit
10.0.0.1
の部分は DHCP なあたりで振ったアドレスに応じて変える。最悪アクセスできなくなるので、GUI のほうを先にやって commit
した後 GUI アクセスが外部から出来ないか確かめれば安全。外部からというのは、即ちグローバル IP アドレスから入ればいい。
DNS を明示的に設定する
これは簡単。GUI なら下部にある System → Nameserver に色々詰める。SSH なら set system name-server 2606:4700:4700::1111
(Cloudflare DNS の場合)といったところか。
NTP もいじってしまおう
set system ntp server
ntp.nict.jp とか? mfeed とかだと IPv6 な NTP を提供している。お好みでいいが変なところを選ぶ理由はない。
ハードウェアオフロードを設定する
ER-X は NAT と IPsec をソフトウェアではなくハードウェアで処理できる。しましょう。これも SSH で set system offload hwnat enable
, set system offload ipsec enable
で OK。GUI の Config Tree を見るともっともっとたくさん設定できそうだが、できない。思うに Edgerouter 6P とかもっと上位でやれるような機能も見えてしまうせいだと思う。ソフトウェアは同一で、ハードがコロコロ変わるような具合だ。繰り返すが ER-X は NAT と IPsec をオフロードできる。
IPoE をついに設定する
まあ IPv6 アドレスを拾ってきて、それを LAN に広報するだけなのだが。
IPv6 アドレスを拾う
[2-2] によると以下のよう。
set interfaces ethernet eth0 ipv6 address autoconf
set interfaces ethernet eth0 ipv6 dup-addr-detect-transmits 1
これで拾える。show interfaces
を実行すると eth0
に IPv6 アドレスが /60 か /64 できているのが見えるはずだ。/60 なら DHCPv6 できるので、そちらを中心にやる(ここではやらない)。/64 なら地獄の下見に行ったほうが良い。辛い。
10分掛かるという情報もあるが、自環境の場合一瞬であった。再起動の時もういっぺん拾いにいくので IPoE の立ち上がりに時間がかかるという情報もある。これもまあ、再起動のほうが時間がかかるといった感じ。要は上のコマンドで第一段階はよろしい。
さて、NTT + ひかり電話ありなら DHCPv6 で多分 LAN に IPv6 をばら撒けるのでもう終わりでいいはずだ。しかし私の環境はないので、ndppd というよくわからんやつを突っ込むことになる。こいつを使えば LAN に IPv6 が行き渡るようになる。
LAN に IPv6 を広報する
[2-2] によると、以下の様な設定になる。
set interfaces switch switch0 description Local
set interfaces switch switch0 ipv6 address eui64 '2409:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64'
set interfaces switch switch0 ipv6 dup-addr-detect-transmits 1
set interfaces switch switch0 ipv6 router-advert cur-hop-limit 64
set interfaces switch switch0 ipv6 router-advert link-mtu 1500
set interfaces switch switch0 ipv6 router-advert managed-flag false
set interfaces switch switch0 ipv6 router-advert max-interval 600
set interfaces switch switch0 ipv6 router-advert other-config-flag true
set interfaces switch switch0 ipv6 router-advert prefix '::/64' autonomous-flag true
set interfaces switch switch0 ipv6 router-advert prefix '::/64' on-link-flag true
set interfaces switch switch0 ipv6 router-advert prefix '::/64' valid-lifetime 2592000
set interfaces switch switch0 ipv6 router-advert reachable-time 0
set interfaces switch switch0 ipv6 router-advert retrans-timer 0
set interfaces switch switch0 ipv6 router-advert send-advert true
commit; exit
呪文だ。当然だがコマンドに見えるアドレスっぽい奴は show interfaces
で見える IPv6 アドレスを指定する。おそらくこの時点で、コマンドプロンプトとかを開いてみて ipconfig /all
すると「IPv6 アドレス」と「リンクローカル IPv6 アドレス」の二つが見えるはずだ……私の ND Proxy 観が正しければ!正しくない可能性があるので参考程度に。
ndppd を仕込みに行く
まず ndppd(だいたい ND Proxy と等価) ってなんだよ。こいつは ND Proxy を ER-ペケで実現するデーモンである。ND Proxy とは……うん……極めて端的に言うと IPv6 版 NAT みたいなもの(NAT 機能自体はしない)で、こいつがあると外部と内部に一枚板を噛ませられるのでセキュリティがよろしくなるという魂胆だ([3] を参照な)。近隣LAN への広報でいい気もするが、よくわかっていない。調べてみてほしい……。
ndppd を ER-X にぶち込手段は以下の二つがある。
- ndppd を git から拾ってきてビルドする。ER-X は MIPS アーキテクチャなので普通に x86 ビルドしても動かない。GCC + MIPS みたいなやつがいる。長いので「Edgerouter X ndppd」とかでググってもらえれば([2-1] を参照)。
- 実は多少手順を踏めば apt が使える。具体的に言うと、apt のリポジトリに ndppd が転がっているので、それを apt install して ER-X に仕込む。おそらくこっちのほうが楽だろう。私は 1) のやり方で達成した後知ったのでこの手順は想像を含む。
1)の場合本当に辛い。MIPS という当初はアメリケ技術だったのが紆余曲折の末に中国に渡ったらしいアーキテクチャを採用しているのが悪い。それがためとはいえ、なんで Docker とかをルータの設定するのに使わなけりゃならないんですか?とあるサイトにはバイナリが置いてあったので最悪それを使う手もなくはない……。でも apt でやれるなら多分そこにバイナリがあるんじゃない?手動設定は大変そうだけど。
2)にはもっと説明がいる。実は ER-X の中身を改めると大体 Debian で、SSH からやればふっつーに init.d とか systemd とかが居座っている。上記リンク先の手順を踏めば多分 apt が使えるはずなので、apt install ndppd でおっけー。こっちができるならこっちのほうがいいだろう。ファームウェアが v1 系だと Debian 7 でこっちは ndppd がないので注意。v2 でなければこちらの方法は取れない。
前者の場合おそらく十人十色な設定があるので参考にする記事に従うのが良い。後者の場合、多分 /etc/ndppd.conf
みたいなのがあると思うので、それを見てみる。
すると、[2-1] によると設定は以下のようにすればよいという。
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
}
}
もうすぐだ……。
ndppd を自動起動するようにする
書き疲れた。でももうすぐ終わりなのだ。ndppd をインストールしたのはいいが、特に手動導入の場合再起動した場合多分起動しないで混乱のもとになるのではないか。対応するコマンドが多彩すぎる(apt なら systemd なんですかね?手動の場合 init.d であろう)ので、apt なら systemctl、手動なら update-rc.d で気合する。
IPoE 接続をテストする
本当に書き疲れているんだよ。今この時点で5時だぞ。夕方じゃなくて朝な。早朝。それはよくて、IPv6/IPoE で接続できてるんかテストする方法はいくつかある。IPv6 テスター的なサイトを使うとか、fast.com でポチッとやって IP アドレスが IPv6 であるかとか。前者は純粋な接続テストで、後者は速度向上が実際になされているのか確かめるのに使える。
終わりに
IPv6 自体が早いのではなく、IPv6 に IPoE(フレッツ観)という接続方式を採用しているから早いというのはよく言われること(参考:「IPv6は速い」なんてことはない)である。
IPv4 ではもっぱら PPPoE で接続するのだが、こいつは認証機能とかをパケットに乗せていて各所で荷解きせねばならぬので遅い(参考: NTT フレッツ光における通信速度などの現状について、背景や仕組みから正しく理解する 2020)。しかも荷解きするところは混雑していると来た。一方 IPoE ではこっちの ONU かなんか自体を認証に組み込んでいるらしいので、接続を張るときはとにかく本質的な情報の送受信に徹すれば通信毒度が速くなりうる。
さて、もし、すべてが上手く行っていれば速度がよろしくなっているはずだ。行っていなければ、誰も踏み込んでいない地獄に貴方は踏み込んだということになる。健闘を祈る。
参考文献
先駆者様。しかし投稿日を見よ。2020年時点からみて4年も前である。色々古い。そのせいで今では問題がないことを問題にしていたりして混乱する(ハードウェアオフロードなど)。しかし参考になる情報は多々あった。
ER-X + ndppd + IPoE で調べれば多分出てくるであろう記事。二本立て。かなり最近の記事なので大いに参考になりうる。ndppd 以外はこの記事を見れば間に合うのではないか?非常に素晴らしい。
ND Proxy を詳しく説明している。多少フレッツ光観を元にしたネットワーク知識がないと読むのは難しめか。