更新:2024/07/07 Debian 12のオリジナルndppdパッケージで下記設定にてndppdが機能することを確認しました。
----------------------------------------------------------------
LinuxでIPv6 routerを設定しました。
----------------------------------------------------------------
LinuxでIPv6 routerを設定しました。
プロバイダーから提供されたルータ機能付きのONUの配下に、パブリックなIPv6サブネットを構成できるルータを設定した時のメモです。
4. /etc/sysctl.confの設定
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.eth0.accept_ra=0
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.default.autoconf=0
net.ipv6.conf.eth0.autoconf=0
#2020/07/02削除
net.ipv6.conf.all.router_solicitations=1
net.ipv6.conf.all.proxy_ndp=1
net.ipv6.conf.default.proxy_ndp=1
#2020/07/02追記
net.ipv6.conf.eth0.proxy_ndp = 1
net.ipv6.conf.eth1.proxy_ndp = 1
Linux Routerの基本的な設定は以上です。設定出来たら再起動してください。
プロバイダはNuro光 で、G2Vというサービスです。通常、このサービスでは、ルータ付きのONU(図のONU+RT)には、IPv6で接続する場合、クライアントを直接接続する事はできます。しかし、図のように内側にさらにLinux Routerを接続し、eth1以下のClinet側サブネットにPublicなIPv6 addressを付与するには、NDP proxyの設定が必要でした。
構成はおよそ以下の通りです。(図再差し替え:2020/07/04)
1. 問題点と対策方針
今回来たONU+RTはZTE社のF660Aという物でした。このルータには、/56のアドレスが付与され、なおかつ、「プレフィックスデリゲーション」という項目があるのですが、設定しても、RA(ルーターアドバタイズ)は/64しか降りてこず、また、DHCPv6でも/64しか取得できません。つまり、このG2Vというサービスでは、DHCPv6-PDでも、/64しかすら降りてきません。(なお、このサービスとしては機能的にはこれが正常です。)
この制約を説明するとおよそこのような感じです。
26xx:1234:5678:9A00::/56 ← ONU+RTに払い出されたアドレス
26xx:1234:5678:9A00::/64 ← ONU+RTから払い出されるアドレス。
つまり、この設定では、64-56=8bit以下のサブネットを構成できるルータを別途接続することができません。
そこで調べたところ、「スタティックプレフィックス」という項目があり、これだと、(2024/07/06訂正)
26xx:1234:5678:9A00::/56 ← ONU+RTに払い出された(委譲された)アドレス
26xx:1234:5678:9A10::/60 ← Linux RT(eth1)へ払い出される(委譲される)アドレス。
が、設定できそうでした。
しかし、この設定でも、Linux RTの eth0を26xx:1234:5678:9A10::/60のルートとしてONU+RTは認識しません。
そこでログを見たところ、やはり、F660Aは内部的にはONU+RTのイーサネットデバイスを26xx:1234:5678:9A10::/60のルートとして設定しているだけでした。
つまり、26xx:1234:5678:9A10::/60のルートとするには、Linux RTの eth0に、eth1配下にあるクライアントの「NDP Proxy」 (IPv4でいうProxy ARP)を設定すれば良いのでは?という方針を立てました。結論から言えばこれでOKでした。
2. ONU+RT(OUTER ROUTER)の設定
(再訂正:2024/07/06)
これは、前述の「スタティックプレフィックス」を追加するだけです。
ここでは
26xx:1234:5678:9A10::/60
を追加したものとします。RAとDHCPv6を使用する設定にはしません。(こうすることで、ONU+RTには複数のルータを接続できるようになります。)
3. Linux RTの設定
3-1. アドレス・デフォルトルートの設定とPromiscuousモードの設定
シェルコマンドでの設定相当分は、以下の通りです。( 再訂正:2024/07/06)
#/bin/sh
ip -6 addr add 26xx:1234:5678:9A00::1/56 dev eth0
ip -6 addr add 26xx:1234:5678:9A10::1/60 dev eth1
ip -6 route add default via fe80::1 dev eth0
ifconfig eth0 promisc
ifconfig eth1 promisc
ifconfig eth1 promisc
3-2. NDP PROXY デーモン(ndppd)の設定 (再訂正:2024/07/06)
/etc/ndppd.conf
proxy eth0 {
router no
autowire yes
keepalive yes
retries 3
rule 26xx:1234:5678:9A10::/60 {
static
autowire yes
keepalive yes
retries 3
rule 26xx:1234:5678:9A10::/60 {
static
}
}
proxy eth1 {
router yes
autowire yes
keepalive yes
retries 3
rule 26xx:1234:5678:9A00::/56 {
iface eth0
}
}
proxy eth1 {
router yes
autowire yes
keepalive yes
retries 3
rule 26xx:1234:5678:9A00::/56 {
iface eth0
}
}
3-3. radvdの設定
/etc/radvd.conf (RNDSSは、ONU+RTで確認できます)
interface eth1 {
AdvSendAdvert on;
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvLinkMTU 1500;
RDNSS 26xx:ABC::A 26xx:ABC::B {
};
prefix 26xx:1234:5678:9A10::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};
4. /etc/sysctl.confの設定
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.eth0.accept_ra=0
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.default.autoconf=0
net.ipv6.conf.eth0.autoconf=0
#2020/07/02削除
net.ipv6.conf.all.proxy_ndp=1
net.ipv6.conf.default.proxy_ndp=1
#2020/07/02追記
net.ipv6.conf.eth0.proxy_ndp = 1
net.ipv6.conf.eth1.proxy_ndp = 1
Linux Routerの基本的な設定は以上です。設定出来たら再起動してください。
5. Clientの設定。
Windowsの場合、特に設定は不要です。
追記(2020/4/3):
6. IPv4の設定について
追記(2024/7/6):
7. その他
追記(2020/4/3):
6. IPv4の設定について
IPv4のスタティックルートも、IPv6と同じく、660Aのルータには設定項目がありませんので、Inner router以下から外部に通信させるには、Inner routerのeth0(外側)をマスカレードさせます。具体的には、660AのIPv4アドレスは192.168.1.1/24なのでInner routerのアドレスをたとえば192.168.1 254にして、iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE とすると、inner router 以下も外部にIPv4で通信できるようになります。投稿時点からそのようにしていたのですが、追記しました。
追記(2024/7/6):
7. その他
本稿には記載していませんが、子ルータのLinux Routerにdhcpv6サーバーを導入することで、サブルータ(3段目、孫ルータ)へプレフィックス委譲を行う事ができます。IPv4についてはdhcpv4サーバを設定する必要があります。また、ルートの設定が手動では大変なので、Linux Router(子ルータ2段目および孫ルータ3段目)はripng/ripを使うとよいと思います。ただし、Nuro光の親ルータがIPv4スタティックルートを設定できない上、前述の様に子ルータのeth0(wan側)でマスカレードしているので、子ルータにはeth0に対してtagged vlanでインターフェースを追加し子ルータ間でもIPv4の通信ができるようにするなどしてください。なおその場合は、IPv4の各サブネットアドレスが重複しないように注意してください。
追記(2024/07/07)上図の設定を記載しておきます。(ipv4デフォルトゲートウェイが10.1.1.23でipv6デフォルトゲートウェイがリンクローカルアドレスfe80::1の場合)
r50とr51の設定は以下の通りです。
追記(2024/07/07)上図の設定を記載しておきます。(ipv4デフォルトゲートウェイが10.1.1.23でipv6デフォルトゲートウェイがリンクローカルアドレスfe80::1の場合)
r50とr51の設定は以下の通りです。
######## r50 #/etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet manual iface eth0 inet6 manual #/etc/network/interfaces.d/eth0.10 auto eth0.10 iface eth0.10 inet manual #/etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet manual iface eth1 inet6 manual #/etc/frr/frr.conf frr version 8.4.4 frr defaults traditional hostname r50 log syslog informational service integrated-vtysh-config ! ip route 0.0.0.0/0 10.1.1.23 ipv6 route ::/0 fe80::1 eth0 ! interface eth0 ip address 10.1.1.50/24 ipv6 address 26xx:1234:5678:9a00::50/56 exit ! interface eth0.10 ip address 10.0.0.50/24 exit ! interface eth1 ip address 10.1.50.1/24 ipv6 address 26xx:1234:5678:9a50::1/60 exit ! router rip default-information originate network eth0.10 network eth1 version 2 exit ! router ripng default-information originate network eth0.10 network eth1 exit ! ######## r51 #/etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet manual iface eth0 inet6 manual #/etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet manual iface eth1 inet6 manual #/etc/frr/frr.conf frr version 8.4.4 frr defaults traditional hostname r51 log syslog informational service integrated-vtysh-config ! interface eth0 ip address 10.1.50.11/24 ipv6 address 26xx:1234:5678:9a50::51/60 exit ! interface eth1 ip address 10.1.51.1/24 ipv6 address 26xx:1234:5678:9a51::1/64 exit ! router rip network eth0 network eth1 version 2 exit ! router ripng network eth0 network eth1 exit !r60とr61の設定は以下の通りです。
######## r60 #/etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet manual iface eth0 inet6 manual #/etc/network/interfaces.d/eth0.10 auto eth0.10 iface eth0.10 inet manual #/etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet manual iface eth1 inet6 manual #/etc/frr/frr.conf frr version 8.4.4 frr defaults traditional hostname r60 log syslog informational service integrated-vtysh-config ! ip route 0.0.0.0/0 10.1.1.23 ipv6 route ::/0 fe80::1 eth0 ! interface eth0 ip address 10.1.1.60/24 ipv6 address 26xx:1234:5678:9a00::60/56 exit ! interface eth0.10 ip address 10.0.0.60/24 exit ! interface eth1 ip address 10.1.60.1/24 ipv6 address 26xx:1234:5678:9a60::1/60 exit ! router rip default-information originate network eth0.10 network eth1 version 2 exit ! router ripng default-information originate network eth0.10 network eth1 exit ! # /etc/nftables.conf -- snip -- table ip nat { chain prerouting { type nat hook prerouting priority 0; } chain postrouting { type nat hook postrouting priority 0; oifname "eth0" masquerade } } ######## r61 #/etc/network/interfaces.d/eth0 auto eth0 iface eth0 inet manual iface eth0 inet6 manual #/etc/network/interfaces.d/eth1 auto eth1 iface eth1 inet manual iface eth1 inet6 manual #/etc/frr/frr.conf frr version 8.4.4 frr defaults traditional hostname r61 log syslog informational service integrated-vtysh-config ! interface eth0 ip address 10.1.60.11/24 ipv6 address 26xx:1234:5678:9a60::61/60 exit ! interface eth1 ip address 10.1.61.1/24 ipv6 address 26xx:1234:5678:9a61::1/64 exit ! router rip network eth0 network eth1 version 2 exit ! router ripng network eth0 network eth1 exit ! #/etc/nftables.conf # /etc/nftables.conf -- snip -- table ip nat { chain prerouting { type nat hook prerouting priority 0; } chain postrouting { type nat hook postrouting priority 0; oifname "eth0" masquerade } }設定に問題がなければ、r51-r61間でipv4/ipv6共に通信できます。もちろん、外部にも出れます。
以上です。
コメント
コメントを投稿