UNIX IPv6全般¶
概要¶
IPv6の設定はBSDとLinuxで流儀が異なる。 また、/etc以下の設定方法も異なる。 本ドキュメントでは、 CUIからのIPv6設定方法と、startupへの設定方法を説明する。
スタートアップの書き方¶
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の設定の多くを設定できるが、 本ドキュメントでは、
- ipv6用スクリプトを用意
- 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