スキップしてメイン コンテンツに移動

IPv6 ポリシーベースルーティング on linux behind nat

NATルータ配下にて、トンネルデバイスを含め、複数のIPv6アドレスを同時に扱うため、ポリシーベース(アドレスベース)のIPv6ルータを設定してみました。ネットワーク構成の概要は以下の通りです。

破線の部分がIPv6(固定)トンネルで、実線の部分がネィティブIPv6(半固定)です。この例では、

1.eth0:Native( not static ) IPv6 ( table 102, priority 102 )
2-1.  he-ipv6:IPv6 over IPv4 /64 tunnel ( table 100, priority 100 )
2-2.  eth1:static /48 IPv6 network assigned by Tunnel Broker ( table 100, priority 100 )
3.  6to4:static 6to4 tunnel ( table 101, priority 101 )

とし、それぞれの計三回線をポリシーベースルータで同時に扱います。なお、設定はDebian10/Busterを使っています。
また、NAT routerの外側のグローバル IP アドレスは、10.10.10.10、IPv6 policy based routerのプライベートIPアドレスは192.168.1.254とし、システム標準のデフォルトルート(デフォルトデバイス)は、スクリプトあるいは設定で標準のmainテーブルにデフォルトルートを設定する必要があり、以下ではeth0:ダイナミック(半固定)IPv6をデフォルトルート(デフォルトデバイス)にしています。なお、今回の設定では/etc/network以下の設定だけでPBRするようにしています。

1. eth0:Native IPv6 (table 99, priority 99)の設定
# /etc/network/interfaces.d/eth0
auto eth0
iface eth0 inet static
  address 192.168.1.254
  netmask 255.255.255.0
  gateway 192.168.1.1
  nameservers 8.8.8.8 1.1.1.1

iface eth0 inet6 static
  address 2400:XX:YY:ZZ00::1
  netmask 60
  up ip -6 route add 2400:XX:YY:ZZ00::1/60 dev eth0 tab 102
  up ip -6 route add default via fe80::1 dev eth0 tab 102
  up ip -6 rule add from 2400:XX:YY:ZZ00::1/128 tab 102 priority 102
  up ip -6 route add default via fe80::1 dev eth0
2-1.  he-ipv6:IPv6 over IPv4 /64 tunnel ( table 100, priority 100 )の設定
# /etc/network/interfaces.d/he-ipv6
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
  address 2001:XX:YY:ZZ::2
  netmask 64
  endpoint EP.ADR.OF.TB
  local 192.168.1.254
  ttl 255
#  gateway 2001:XX:YY:ZZ::1
  up ip -6 route add 2001:XX:YY:ZZ::2/64 dev he-ipv6 tab 100
  up ip -6 route add default via 2001:XX:YY:ZZ::1 dev he-ipv6 tab 100
  up ip -6 rule add from 2001:XX:YY:ZZ::2/128 tab 100 priority 100
2-2.  eth1:static /48 IPv6 network assigned by Tunnel Broker ( table 100, priority 100 )の設定
# /etc/network/interfaces.d/eth1
auto eth1
iface eth1 inet6 static
  address 2001:AAAA:BBBB::1
  netmask 48
  ttl 255
  up ip -6 route add 2001:AAAA:BBBB::1/48 dev eth1 tab 100
  up ip -6 rule add from 2001:AAAA:BBBB::1/128 tab 100 priority 100
3.  6to4:static 6to4 tunnel ( table 101, priority 101 )の設定
# /etc/network/interfaces.d/6to4
auto 6to4
iface 6to4 inet6 v4tunnel
  mode sit
  address 2002:0a0a:0a0a::1
  netmask 16
#  gateway ::192.88.99.1
  local 192.168.1.254
  endpoint any
  ttl 128
  up ip -6 route add 2002:0a0a:0a0a::1/16 dev 6to4 tab 101
#  up ip -6 route add default via ::192.188.99.1 dev 6to4 tab 101
  up ip -6 route add 2000::/3 via ::192.88.99.1 dev 6to4 tab 101
  up ip -6 rule add from 2002:0a0a:0a0a::1/128 tab 101 priority 101
4. /etc/sysctl.confについて sysctl.confは例えば以下のようにして、staticな設定にし、forwadingもするようにします。
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1

net.ipv6.conf.all.autoconf=0
net.ipv6.conf.default.autoconf=0
5.回線のテストについて
ping6 を -I にてインターフェースアドレスを指定して実行してください。例えば、eth1のアドレスをソースアドレスとする場合、
ping6 -I 2001:AAAA:BBBB::1 -c2 www.google.com
としてください。各デバイスのソースアドレスを指定してPINGが通れば回線は正常につながっており、PBRは正常に設定できているということになりますので、外部からも接続できるということになります。なお、参考までに、6to4は到達性に問題がある場合があります。たとえば、www.kame.netには6to4では到達できません。(2020/03/13現在)
また、実際の運用になると、ip6tablesのファイアウォール設定が必要になりますが、今回の記事では触れていません。
今回は以上ですが、he-ipv6と6to4のアドレスはpublicかつ固定かつ/64または/48のアドレスですので、広大なアドレスで楽しんでみてください。
追記:
nat配下故、トンネルデバイスがアクティブであることを示すため、he-ipv6の場合、例えば、対向の::1のtunnelbroker側のルータへの定期的なping6などの何らかの通信が必要になります。6to4も同様です。

コメント