EdgeRouter 4/6でNuro光を使う

投稿者: | 4月 4, 2021

前回クロスコンパイラーの記事を書いたが、その経緯がこれ。
実家は、なんとNuro光で、高速インターネット回線である。それも親と兄しか住んでいない家で。なんとも贅沢。ちょっと機材を置かせてもらっているので、ここにもEdgerouter装備である。ただめんどくさくてIPv4の設定しかしていなかった。IPv4が動いていればWireguardが動くのでそれで間に合っていた。
意を決してEdgerouterでNuro光でIPv6環境を構築してみた。これでオカンのiPhoneもIPv6対応。。。何も変わらないが。

まず、環境をおさらいする。
NuroのルータはZTEのF660ルータ。普通のだったらこのルータに接続すれば終わりなんだが、EdgeRouterをかますと少し面倒。

UntitledImage

IPv4の設定
アプリケーション->DMZ
「有効にする」と「MACアドレスのマッピングを有効にする」にチェックを入れて、EdgeRouterのWANのMACアドレスを登録。
IPv4はこれで終わり。これで、LAN側でDHCPでIPv4が変わったとしても、常にF660のパブリックIPv4とマップされる。
そのEdgerouterの下に家のデバイスを接続すればいい。簡単。バイバイF660の標準機能。。。

 

IPv6の設定
IPv6の設定は、かなり面倒。EdgerouterのIPv6の対応があまりイケていないため、LAN側のデバイスにIPv6のアドレスを配ってくれない。
グローバルアドレスだから残念ながらキャプチャーは無しです。

F660での設定

IPv6プレフィックスの調査
ステータスー>ネットワークインターフェース情報ー>WAN接続情報を開く
IPv6プレフィックスアドレスをメモする。
24XX:XXXXX:XXXX:XX00::/56

スタティックプレフィックスの設定
割り当てられているネットワークプレフィックスから60ビットを払い出す。
ネットワークー>LANー>スタティックプレフィックス
プレフィックス: 24XX:XXXXX:XXXX:XX10::/60
望ましいライフタイム: 86400(必要に応じて変更)
正式なライフタイム: 86400(必要に応じて変更)
有効にする: RAとDHCPv6のチェックはつけない

これでF660での設定は終わり。

Edgerouterので設定

Eth0 –> F660 (IPv4は、DMZ)
Eth1 -> 家LAN
となっている。設定は以下
configure
set interfaces ethernet eth0 address 24XX:XXXXX:XXXX:XX10::/60
set interfaces ethernet eth0 ipv6 address autoconf
set interfaces ethernet eth0 ipv6 dup-addr-detect-transmits 1
commit
set interfaces ethernet eth1 ipv6 address eui64 ‘24XX:XXXXX:XXXX:XX11::/64
set interfaces ethernet eth1 ipv6 dup-addr-detect-transmits 1
set interfaces ethernet eth1 ipv6 router-advert cur-hop-limit 64
set interfaces ethernet eth1 ipv6 router-advert link-mtu 1500
set interfaces ethernet eth1 ipv6 router-advert managed-flag false
set interfaces ethernet eth1 ipv6 router-advert max-interval 600
set interfaces ethernet eth1 ipv6 router-advert other-config-flag true
set interfaces ethernet eth1 ipv6 router-advert prefix ‘::/64’ autonomous-flag true
set interfaces ethernet eth1 ipv6 router-advert prefix ‘::/64’ on-link-flag true
set interfaces ethernet eth1 ipv6 router-advert prefix ‘::/64’ valid-lifetime 2592000
set interfaces ethernet eth1 ipv6 router-advert reachable-time 0
set interfaces ethernet eth1 ipv6 router-advert retrans-timer 0
set interfaces ethernet eth1 ipv6 router-advert send-advert true
commit; save; exit;

これで、EdgerouterからIPv6へpingが飛ぶはず。
ping www.google.com
PING www.google.com(nrt12s22-in-x04.1e100.net (2404:6800:4004:80c::2004)) 56 data bytes
64 bytes from nrt12s22-in-x04.1e100.net (2404:6800:4004:80c::2004): icmp_seq=1 ttl=116 time=3.69 ms
ping6 www.google.com
PING www.google.com(nrt13s48-in-x04.1e100.net (2404:6800:4004:80e::2004)) 56 data bytes
64 bytes from nrt13s48-in-x04.1e100.net (2404:6800:4004:80e::2004): icmp_seq=1 ttl=116 time=2.98 ms

 

クロスコンパイラでバイナリ作成

世間には、Edgerouter Xでの設定があるので、Edgerouter Xの人は他を見ていただくとして、以下はEdgerouter 4/6での設定

Ubuntu20.04.2 amd64環境を用意
apt -y install g++-mips64-linux-gnuabi64 vim git make
git clone -b master https://github.com/DanielAdolfsson/ndppd.git
cd ndppd
cp Makefile Makefile-edge

vim Makefile-edge
あたりまえだが、Makefileを書き換え
PREFIX = /config/ndppd/local
CXX = /usr/bin/mips64-linux-gnuabi64-g++
LDFLAGS = -static

make -f Makefile-edge
file ndppd
ndppd: ELF 64-bit MSB executable, MIPS, MIPS64 rel2 version 1 (SYSV), statically linked, BuildID[sha1]=XXXXXXXXXXXXXXXXX, for GNU/Linux 3.2.0, not stripped
となっていればOK。これをndppdをEdgerouterの/tmpに転送しておく。

 

Edgerouterでの作業

相変わらずヒアドキュメントで書いているのでご注意を。

mkdir -p /config/ndppd/local/sbin
mv /tmp/ndppd /config/ndppd/local/sbin
chmod +x /config/ndppd/local/sbin/ndppd
cat << ‘EOF’ > /config/ndppd/ndppd.conf
proxy eth0 {
router no
timeout 500
autowire yes
keepalive yes
retries 3
ttl 30000
rule 24XX:XXXXX:XXXX:XX00::/56 {
iface eth1
}
}

proxy eth1 {
router yes
timeout 500
autowire yes
keepalive yes
retries 3
ttl 30000
rule 24XX:XXXXX:XXXX:XX00::/56 {
auto
}
}
EOF
cat << ‘EOF’ > /config/scripts/post-config.d/ndppd.sh
#!/bin/vbash
# copy to this file into
# /config/scripts/post-config.d/
/config/ndppd/ndppd.initscript start
EOF
chmod +x /config/scripts/post-config.d/ndppd.sh
cat << ‘EOF’ > /config/ndppd/ndppd.initscript
#!/bin/sh

# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
if [ true != “$INIT_D_SCRIPT_SOURCED” ] ; then
set “$0” “$@”; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
fi

DESC=”NDP Proxy Daemon”
PIDFILE=/run/ndppd.pid
CONFIGFILE=/config/ndppd/ndppd.conf
DAEMON=/config/ndppd/local/sbin/ndppd
DAEMON_ARGS=”-d -c $CONFIGFILE -p $PIDFILE”
EOF
chmod +x /config/ndppd/ndppd.initscript
/config/scripts/post-config.d/ndppd.sh

ちゃんと動いていればOK
ps ax | grep ndppd
9594 ? Ss 0:01 /config/ndppd/local/sbin/ndppd -d -c /config/ndppd/ndppd.conf -p /run/ndppd.pid
14133 pts/0 S+ 0:00 grep ndppd

IPv6のファイヤウォールの設定
configure
set firewall ipv6-name WANv6_IN default-action drop
set firewall ipv6-name WANv6_IN description ‘WAN to LAN’
set firewall ipv6-name WANv6_IN enable-default-log
set firewall ipv6-name WANv6_IN rule 10 action accept
set firewall ipv6-name WANv6_IN rule 10 description ‘Allow established/related’
set firewall ipv6-name WANv6_IN rule 10 state established enable
set firewall ipv6-name WANv6_IN rule 10 state related enable
set firewall ipv6-name WANv6_IN rule 20 action drop
set firewall ipv6-name WANv6_IN rule 20 description ‘Drop invalid state’
set firewall ipv6-name WANv6_IN rule 20 state invalid enable
set firewall ipv6-name WANv6_IN rule 30 action accept
set firewall ipv6-name WANv6_IN rule 30 description ‘Allow IPv6 ICMP’
set firewall ipv6-name WANv6_IN rule 30 protocol ipv6-icmp
set firewall ipv6-name WANv6_LOCAL default-action drop
set firewall ipv6-name WANv6_LOCAL description ‘WAN to Router’
set firewall ipv6-name WANv6_LOCAL enable-default-log
set firewall ipv6-name WANv6_LOCAL rule 10 action accept
set firewall ipv6-name WANv6_LOCAL rule 10 description ‘Allow established/related’
set firewall ipv6-name WANv6_LOCAL rule 10 state established enable
set firewall ipv6-name WANv6_LOCAL rule 10 state related enable
set firewall ipv6-name WANv6_LOCAL rule 20 action drop
set firewall ipv6-name WANv6_LOCAL rule 20 description ‘Drop invalid state’
set firewall ipv6-name WANv6_LOCAL rule 20 state invalid enable
set firewall ipv6-name WANv6_LOCAL rule 30 action accept
set firewall ipv6-name WANv6_LOCAL rule 30 description ‘Allow IPv6 ICMP’
set firewall ipv6-name WANv6_LOCAL rule 30 protocol ipv6-icmp
set firewall ipv6-name WANv6_LOCAL rule 40 action accept
set firewall ipv6-name WANv6_LOCAL rule 40 description ‘Allow DHCPv6’
set firewall ipv6-name WANv6_LOCAL rule 40 destination port 546
set firewall ipv6-name WANv6_LOCAL rule 40 protocol udp
set firewall ipv6-name WANv6_LOCAL rule 40 source port 547
set interfaces ethernet eth0 firewall in ipv6-name WANv6_IN
set interfaces ethernet eth0 firewall local ipv6-name WANv6_LOCAL
save; exit

長かった。IPv6のアドレス採番のところは自信がないが、ちゃんと動いている。オカンのiPhoneでも。

コメントを残す