ネットワーク設計を見直してみた(内部ネットワークのIPv6対応)(4)

前回のネットワーク見直しに加えて、同時に内部ネットワークのIPv6化を進めてみたので、こちらについてまとめてみる。

設定方法については、こちらを主に参照した。。
http://mimiyori.org/vine-ipv6.shtml

まず最初に各NICIPアドレスを振る必要がある。CentOS, Fedoraでは、/etc/sysconfig/network, /etc/sysconfig/network-scripts/ifcfg-eth* を使用する。(インストール時に指定することも出来るようだ。。)

/etc/sysconfig/networkには、次を設定する。

NETWORKING_IPV6=yes

/etc/sysconfig/network-scripts/ifcfg-eth* には、次の2行を追記する。

IPV6INIT=yes
IPV6ADDR=(IPv6のアドレス)/(netmask)

v6アドレスには、定まったプライベートアドレスがないらしく(fe80: から始まるリンクローカルアドレスはあるのだが、このアドレスはルーティングが行われないらしい。。)、基本的には上位のISPからもらったプレフィックス(IPv4でいうところの、 192.168. や10. など)をつけるのがよさそうである。ただ、筆者が利用している回線の関係上、IPv6でインターネット側に出ることはできなさそうなので、ここでは、次の置き換えでv6アドレスを設定した。

192.168.xx.xx  ==> ::192:168:xx:xx

これだと、IPv4IPv6が同じように記述できるので確認等がしやすい。
ただし、IPv6では:の間に16ビットを含められる(IPv4では8bit)ので、次の置き換えをしておくと、ネットマスクの管理がしやすいようだ。

Ipv4=>IPv6
/8=>/80
/16=>/96
/24=>/112

IPアドレスの確認には、ifconfigを使用できる。

$ ifconfig

ルーティングテーブルの管理には、netstatコマンドを使用できる。

$ netstat -nr -A inet6

また、IPが正しく設定されているかを確認するために、ping6を使用することが出来る。

$ ping6 v6アドレス
(実行例)
$ ping6 ::192:168:1:15
PING ::192:168:1:15(::192:168:1:15) 56 data bytes
64 bytes from ::192:168:1:15: icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from ::192:168:1:15: icmp_seq=2 ttl=64 time=0.045 ms
64 bytes from ::192:168:1:15: icmp_seq=3 ttl=64 time=0.040 ms
^C
 --- ::192:168:1:15 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2092ms
rtt min/avg/max/mdev = 0.036/0.040/0.045/0.006 ms
$ 

内部で使用しているサービスは様々だが、まず最初にSSHDNSを設定した。(サーバーとクライアントの両側で設定を行う必要がある。。)

SSH

SSHのサーバーは、デフォルトではIPv6をListenしないようなので、明示的に/etc/ssh/sshd_configに設定を追加する必要がある。次の設定で、各v6アドレスでListenしてくれる。

ListenAddress ::

クライアント側ではFedora, CentOS5あたりでは最初からv6に対応していた。sshコマンドの後にv6アドレスを入力することで、ログインできるようだ。。

$ ssh ::192:168:1:135

次でDNSのAAAAレコードを定義するが、その後はホスト名でもログインできるようになる。解決の順番は、v6=>v4となるらしく、AAAAを定義した後、NICをListenしていないと、一時的にログインが遅延するようなので注意。。 orz

DNS

DNSの場合は、サーバー、クライアントの設定に加えて、各ホストへのAAAAの設定も必要となる。(本来は逆引きアドレスも設定するべきなのだが、筆者はまだ行っていない。。 orz)

AAAAレコードは、通常のAレコードと並べて次のように定義する。

fedora-virt5 IN A 192.168.1.135
fedora-virt5 IN AAAA  ::192:168:1:135

サーバーにv6アドレスをListenさせるには、次の設定が必要なようだ。。

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
...
}

この状態で、digコマンドでv6アドレスから名前解決ができるかを確認する。もちろんv6経由で、Aレコード、AAAAレコード両方を取ることができる。 W

$ dig @::192:168:1:15 jp.example.org SOA

無事に取れていれば、最後にクライアントの/etc/resolv.confを設定する。

nameserver v6アドレス
(設定例)
nameserver ::192:168:1:15
nameserver ::1

これで、名前解決のクエリはv6で行われるはずである。。ただし、通信はあくまでDNSサーバーとの間だけであり、アプリケーションがv4アドレスを要求していた場合、実際の通信はv4で行われることもあるので注意。。 (例えばFirefoxで外部サイトを見る場合,直近のDNSサーバーでv4アドレスを得た後、v4で外部サイトにつなぎにいく。。 w)

ここまでで、DNS, SSH通信あたりをv6化する方法をまとめたので、次回以降Apache, NTPのv6化(Squidはあまりv6対応が進んでいないようなので、書くことがない。。 )についてまとめてみようと思う。