UNIX IPv6全般 ===================== 概要 -------------- IPv6の設定はBSDとLinuxで流儀が異なる。 また、/etc以下の設定方法も異なる。 本ドキュメントでは、 CUIからのIPv6設定方法と、startupへの設定方法を説明する。 アドレスの付与方法 ------------------------ FreeBSDの場合 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ まず、アドレスの付与については、通常通り行える。 :: ifconfig tap6 inet6 fe80::100/64 スタートアップの書き方 ------------------------------------------- FreeBSD ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */etc/sysctl.conf* ポリシ的に、アドレスはすべて静的に書きたいときには、 次のconfigを入れること。 RAを併用、あるいはRAしか使わない場合は特にいらない :: # RAを受け取らない(0) net.inet6.ip6.accept_rtadv=0 # リンクローカルアドレスを動的につけない(0) net.inet6.ip6.auto_linklocal=0 また、実験などでIPv6の拡張ヘッダを使う場合、 この次の設定をいれること。 :: # 見知らぬipv6パケットを受け取っても破棄しない net.inet6.ip6.fw.deny_unknown_exthdrs=0 */etc/rc.conf* :: ipv6_enable="YES" ipv6_network_interfaces="auto" ipv6_defaultrouter=" fe80:0::10:0:143:1" ipv6_ifconfig_lo0=" fe80::1 prefixlen 64" ipv6_ifconfig_vlan2=" fe80:0::10:0:143:143 prefixlen 64" ipv6_ifconfig_vlan2_alias0=" fe80:1::192:168:143:143 prefixlen 64" ipv6_ifconfig_vlan3=" fe80:0::10:0:128:50 prefixlen 64" ipv6_ifconfig_vlan3_alias0=" fe80:1::192:168:128:50 prefixlen 64" Linux ^^^^^^^^^^^^^^ */etc/sysctl.conf* FreeBSDと同様にRAを受け取らないようにする。 :: # RAを受け取らない(0) net.ipv6.conf.all.accept_ra=0 # リンクローカルアドレスを動的につけない(0) net.ipv6.conf.all.autoconf=0 */etc/networks/interfaces* Linuxの場合、"interfaces内で複数のアドレスを設定することができない"。 そのため、/etc/network内にipv6の設定スクリプトを用意する。 たとえば次の通り。 :: auto eth0 iface eth0 inet static address 10.0.143.143 netmask 255.255.255.0 gateway 10.0.143.1 post-up /bin/sh /etc/network/if_eth0_ipv6.sh auto eth0:0 iface eth0:0 inet static address 192.168.143.143 netmask 255.255.255.0 auto eth2 iface eth2 inet static address 10.0.128.50 netmask 255.255.255.0 post-up /bin/sh /etc/network/if_eth2_ipv6.sh auto eth2:0 iface eth2:0 inet static address 192.168.128.50 netmask 255.255.255.0 この上で、 :: cat /etc/network/if_eth0_ipv6.sh #!/bin/sh ip -f inet6 addr add fe80:0::10:0:143:143/64 dev eth0 ip -f inet6 addr add fe80:0::192:168:143:143/64 dev eth0 ip -f inet6 route add ::/0 via fe80:0::10:0:143:1 と、 :: cat /etc/network/if_eth2_ipv6.sh #!/bin/sh ip -f inet6 addr add fe80:1::10:0:128:50/64 dev eth0 ip -f inet6 addr add fe80:1::192:168:128:50/64 dev eth0 を用意する。 さらにこの手法の場合、 :: cat /etc/modules ipv6 を書くこと。 補足 ^^^^^^^^ LinuxではinterfacesのみでIPv4の設定の多くを設定できるが、 本ドキュメントでは、 1. ipv6用スクリプトを用意 2. modulesへのipv6追加 を行う。なぜこの2点が必要なのかを説明する。 まず、/etc/network/interfaceはipv6アドレスを複数ハンドリングできない。 そのため、1については必須となり、networkで書くわけにはいかない。 また、2については、"post-upはmodulesが処理される前に呼ばれる"ため、 ipv6スクリプトが呼ばれた際に、ipv6がloadされていないということが生じる。 基本的な操作方法 -------------------------------- 経路を見る ^^^^^^^^^^^^^^^^^^^ :: (FreeBSD) netstat -finet6 -rn (Linux) netstat -Ainet6 -rn あるいは、 ip -f inet6 addr show NDをみる ^^^^^^^^^^^^^^^ :: (FreeBSD) ndp -a (Linux) ip -f inet6 neigh show ND追加する(static neighbor cacheつっこむ) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: (FreeBSD) ndp -s 2001:db8::1 00:00:00:00:00:00 (Linux) ip -f inet6 neigh add 2001:db8::1 lladdr 00:00:00:00:00:00 dev vlan100 ping6 ff02::1する ^^^^^^^^^^^^^^^^^^^^^^^^ :: (FreeBSD) ping6 ff02::1%bge0 (Linux) ping6 ff02::1 -I eth0