2011年4月21日木曜日

OpenBSDで6to4なIPv6ルータを作る

IPv4アドレスがついに枯渇! …ということで、自宅のOpenBSD/macppcなルータでIPv6接続ができるようにしてみた。 今回は、固定IPv4アドレスが既にあるので、6to4を用いてグローバルIPv6アドレスを設定する。

固定IPv4アドレスを割り当て

最初に、IPv4アドレスをルータに割り当てる。 いつも通り、/etc/hostname.pppoe0に設定を書く。 当然ながら、ユーザ名とパスワードは自分の契約しているプロバイダのものに置き換える。 ここで用いられるインターフェースは、gem0がWAN側ネットワークに接続されている物理インターフェース、 pppoe0がPPPoE接続で用いられるインターフェースである。
# /etc/hostname.pppoe0

inet 0.0.0.0 255.255.255.255 NONE \
pppoedev gem0 authproto chap \
authname 'username' authkey 'passwd' up
dest 0.0.0.1
!/sbin/route add default -ifp pppoe0 0.0.0.1

6to4のトンネルを作成

次に、6to4のトンネルインターフェースを設定する。 OpenBSDのトンネルインターフェースはgifであるので、/etc/hostname.gif0に設定を記入する。
6to4トンネルの宛先は、192.88.99.1で固定の模様。

6to4では、「2002:IPv4アドレスを16進表記したもの::/48」を、 このルータのIPv6ネットワークとして利用することができる。 このルータのグローバルIPv4アドレスは、180.131.124.186なので、 2002:b483:7cba::/48がそれに当たる。
10進→16進変換は、printfコマンドでprintf "%x %x %x %x\n" 180 131 124 186のようにすれば簡単。
# /etc/hostname.gif0

up giftunnel 180.131.124.186 192.88.99.1
inet6 2002:b483:7cba::1 64
!route add -inet6 default 2002:b483:7cba::1

IPv6フォワーディングを有効化

このルータだけがIPv6アドレスを持っていてもあまり面白くないので、 IPv4同様、IPv6フォワーディングを有効化する。 /etc/sysctl.confの以下の部分のコメントアウトを外すだけでOK。
# /etc/sysctl.conf

net.inet6.ip6.forwarding=1

内部インターフェースへのIPv6アドレスの割り当て

内部ネットワークを2002:b483:7cba:39::/64とし、 内部向けインターフェースaxe0に、2002:b483:7cba:39::1を割り当てる。
# /etc/hostname.axe0

inet alias 10.39.39.1 255.255.255.0
inet6      2002:b483:7cba:39::1 64

router advertisement daemonを有効化

IPv6では、DHCPを用いずに動的にIPv6アドレスを割り当てることができる。 OpenBSDでは、rtadvdにより自動割当を行う。 有効化の設定は、/etc/rc.conf.localに、rtadvd_flagsを追加し、 引数に自動割当を行うインターフェース名を記入する。
このrtadvdにより、axe0以下のIPv6対応コンピュータには、axe0のネットワーク 2002:b483:7cba:39::/64の中から自動的にアドレスが割り当てられる。
# /etc/rc.conf.local

rtadvd_flags="axe0"

pfにIPv6のルールを追加

IPv6でも当然ながらフィルタリングは必要なので、pfを設定する。 最低限許可が必要なのは、6to4トンネルのパケットと、自動割り当てに必要なパケットである。 これ以外は必要に応じて追加する。
# /etc/pf.conf

# Pass 6to4 tunnel
pass  out on $ext_if proto ipv6 \
      from pppoe0 to 192.88.99.1
block in log (all) inet6

# Pass Router Solicitations (RS)
pass in  log (all) on axe0 \
     inet6 proto icmp6 \
     icmp6-type routersol

# Pass Router Advertisement (RA)
pass out log (all) on axe0 \
     inet6 proto icmp6 \
     icmp6-type routeradv
正しくグローバルIPv6アドレスが割り当てられているか確認したいときは、ping6 ipv6.google.comするなりlynxで開くなりなんなりと。

0 件のコメント:

コメントを投稿