注意:2020/07/01現在、Debian 10/11上のNDP 0.2x系では動かなくなっています。(当方 Edgerouter Xがないので、Edgerouter Xでの確認はしていません。)
なお、対処方法としては、1.0-devel:開発版をインストールするか、
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
にて通信できますが、後者はNATですのでいずれも制約はあります。
ーーーーーーーーーーーーーーーーーーーーー
LinuxでIPv6 routerを設定しました。
最終的には、図のような構成が可能になります。
(例:15*15=225サブネット)
お詫びと注釈:2002/07/02,07/04,07/23:/56の委譲を受けたONU一体型ルータに、RAクライアントが/64で接続できるのと同じく、実際にテストしたところ、/60のアドレスの機器を接続できました。しかしながら/56の委譲を受けたネットワークには/56のアドレスの機器を接続するほうが正解に近いと思いますので、この場を借りて訂正し、お詫び申し上げます。
追記(2020/07/04):/56のネットワークに/56-/60-/64の機材を導入することは本来正しいのですが、ndppd(1.0-devel 開発版)を使っている場合、/56に/60、さらに孫ルータを接続すると孫ルータ以下のクライアントの動作が不安定だったので、NURO光 G2VでONU一体型ルータを含めた3段以上の多段ルータの接続はおすすめできません。
追記(2020/07/05):ndppd(1.0-devel)の場合、2台目以降のルータのクライアント動作が不安定でしたので、残念ながら複数の子ルータを接続する構成もおすすめできません。0.2x系でも以前は正常に通信できていたので残念です。なお、上図のような構成や多段ルータによるセグメンテーションを希望する場合は、基本的にndppdが必要ないフレッツ光(光電話あり)またはフレッツ光クロスをお勧めします。
ここでは
26xx:1234:5678:9A10::/60
を追加したものとします。RAとDHCPv6を使用する設定にはしません。(こうすることで、ONU+RTには複数のルータを接続できるようになります。)
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の基本的な設定は以上です。設定出来たら再起動してください。
なお、対処方法としては、1.0-devel:開発版をインストールするか、
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
にて通信できますが、後者はNATですのでいずれも制約はあります。
ーーーーーーーーーーーーーーーーーーーーー
LinuxでIPv6 routerを設定しました。
プロバイダーから提供されたルータ機能付きのONUの配下に、パブリックなIPv6サブネットを構成できるルータを設定した時のメモです。
プロバイダは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以下のサブネットを構成できるルータを別途接続することができません。
そこで調べたところ、「スタティックプレフィックス」という項目があり、これだと、
26xx:1234:5678:9A00::/56 ← ONU+RTに払い出されたアドレス
26xx:1234:5678:9A10::/60 ← Linux RT(eth0)へ払い出されるアドレス。
26xx:1234:5678:9A11::/64 ← Linux RT(eth1)から払い出されるアドレス。
が、設定できそうでした。
しかし、この設定でも、Linux RTの eth0を26xx:1234:5678:9A11::/64のルートとしてONU+RTは認識しません。
そこでログを見たところ、やはり、F660Aは内部的にはONU+RTのイーサネットデバイスを26xx:1234:5678:9A11::/64のルートとして設定しているだけでした。
つまり、26xx:1234:5678:9A11::/64のルートとするには、Linux RTの eth0に、eth1配下にあるクライアントの「NDP Proxy」 (IPv4でいうProxy ARP)を設定すれば良いのでは?という方針を立てました。結論から言えばこれでOKでした。
最終的には、図のような構成が可能になります。
(例:15*15=225サブネット)
追記(2020/07/04):/56のネットワークに/56-/60-/64の機材を導入することは本来正しいのですが、ndppd(1.0-devel 開発版)を使っている場合、/56に/60、さらに孫ルータを接続すると孫ルータ以下のクライアントの動作が不安定だったので、NURO光 G2VでONU一体型ルータを含めた3段以上の多段ルータの接続はおすすめできません。
追記(2020/07/05):ndppd(1.0-devel)の場合、2台目以降のルータのクライアント動作が不安定でしたので、残念ながら複数の子ルータを接続する構成もおすすめできません。0.2x系でも以前は正常に通信できていたので残念です。なお、上図のような構成や多段ルータによるセグメンテーションを希望する場合は、基本的にndppdが必要ないフレッツ光(光電話あり)またはフレッツ光クロスをお勧めします。
2. ONU+RT(OUTER ROUTER)の設定
特に必要な設定はありません。(訂正:2020/06/30)
これは、前述の「スタティックプレフィックス」を追加するだけです。
3. Linux RTの設定
3-1. アドレス・デフォルトルートの設定とPromiscuousモードの設定
シェルコマンドでの設定相当分は、以下の通りです。( 訂正:2020/07/02)
#/bin/sh
ip -6 addr add 26xx:1:2:310::1/60 dev eth0
ip -6 addr add 26xx:1:2:311::1/64 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)の設定 ( 訂正:2020/07/02)
/etc/ndppd.conf
proxy eth0 {
router no
rule 26xx:1234:5678:9A11::/64 {
iface eth1
rule 26xx:1234:5678:9A11::/64 {
iface eth1
}
}
proxy eth1 {
rule 26xx:1234:5678:9A10::/60 {
iface eth0
}
}
proxy eth1 {
rule 26xx:1234:5678:9A10::/60 {
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:9A11::/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の設定について
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で通信できるようになります。投稿時点からそのようにしていたのですが、追記しました。
追記(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で通信できるようになります。投稿時点からそのようにしていたのですが、追記しました。
以上です。
コメント
コメントを投稿