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