ネットワーク設計を見直してみた(内部ネットワークのIPv6対応)(4)
前回のネットワーク見直しに加えて、同時に内部ネットワークのIPv6化を進めてみたので、こちらについてまとめてみる。
設定方法については、こちらを主に参照した。。
http://mimiyori.org/vine-ipv6.shtml
まず最初に各NICにIPアドレスを振る必要がある。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
これだと、IPv4とIPv6が同じように記述できるので確認等がしやすい。
ただし、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 $
内部で使用しているサービスは様々だが、まず最初にSSHとDNSを設定した。(サーバーとクライアントの両側で設定を行う必要がある。。)
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対応が進んでいないようなので、書くことがない。。 )についてまとめてみようと思う。