さくらVPSのFreeBSDサーバでv6対応

さくらの公式で発表されている6rdによる方法ではなく、 Tokyo6to4を利用してFreeBSD 9.0のv6対応を行った。

v6対応の記事の殆どが、v6でping打って終わりになっているので、 最終的にweb公開できるところまで記載しようと思う。 具体的には以下の手順を踏む。 1. v6でのサーバ公開 2. jailのv6対応 3. v6対応のファイアウォールの設定(pf) 4. nginxをv6対応にする

  • v6でのサーバ公開
    (参考にさせて頂いたページ: FreeBSDでIPv6 (6to4) を設定する) Tokyo6to4へトンネルを確立すれば、v6アドレスが配布される。 /etc/rc.confに以下の設定を追記すればよい。
#ipv6
ipv6_enable="YES"
stf_interface_ipv4addr="自分のv4アドレス"
stf_interface_ipv4plen="0"
stf_interface_ipv6_ifid="0:0:0:1"
stf_interface_ipv6_slaid="0000"
ipv6_defaultrouter="2002:c058:6301::1"

ここまで設定を入れたら、サーバを再起動すればv6アドレスが配布される。 配られるipアドレスは、v4アドレスに対応付いたもので、 下記コマンドで確認できる。

#具体例 うちのサイトのアドレスが49.212.150.48なので
$printf "2002:%02x%02x:%02x%02x::/48\n" 49 212 150 48 
  • jailのv6対応
    今回、jailで構成しているので、jailでも利用できるように ループバックインタフェースのエイリアスにもアドレスを振る。 配られたアドレスを確認して、その中の一つを振ってやる。 /etc/rc.confに以下の設定を追記すればよい。
ipv6_ifconfig_lo0_alias0="v6アドレス prefixlen 48"

jailの中の/etc/rc.confにも

ipv6_defaultrouter="2002:c058:6301::1"

を忘れずに。

ezjailの設定 /usr/local/etc/ezjail/JAILの設定ファイルを編集

export jail_JAILNAME1_ip="v4アドレス,v6アドレス" #v6アドレスを追記

jailを再起動すれば、jail側でもv6通信が行える。

# /usr/local/etc/rc.d/ezjail.sh restart
  • v6対応のファイアウォールの設定(pf)
    (参考にさせて頂いたページ: 2012-01-05 jail マシンを IPv4 と IPv6 のデュアルスタックにする) さくらvpsの中で、1つのipアドレスでjailを複数まわすという難儀なことをしているので、 pfの設定がめんどくさかった。 まず外部から入ってくるv6通信を全て許可した後、 トンネルインタフェースの方で不要な物をはねるよう設定しないと動かなかった。 (上記サイトを見るまで気付かなかったので、かなりはまった) /etc/pf.confから必要部分を抜粋
#### Filter ####
pass out quick all #サーバからのパケットは全部通す
block in all #外部からの接続は基本的に全部落とす

### LAN内のパケット処理 ###
pass in quick on lo0 #ループバックアドレスに入る通信は全部通す

#ipv4
pass in on $ext_if inet proto tcp from any to any port 22 flags S/SA modulate state #ssh
pass in on $ext_if inet proto tcp from any to any port 80# flags S/SA modulate state #http
pass in on $ext_if inet proto tcp from any to any port 443 flags S/SA modulate state #https
#以下、v6対応のために追記した部分
pass in on $ext_if inet proto ipv6 from any to any

#ipv6
#v6を通過させる
net.inet6.ip6.forwarding=1
tun_6to4 = "stf0" #トンネルインタフェース
pass in on $tun_6to4 inet6 proto icmp6 from any to any #icmp(ping等)の通信は許可
pass in on $tun_6to4 inet6 proto tcp from any to any port 80 #httpを許可
pass in on $tun_6to4 inet6 proto tcp from any to any port 443 #httpsを許可
  • nginxをv6対応にする
#nginx -V

の出力の中に –with-ipv6 があればv6対応版がインストールされている。 v6対応していなければ入れ直す。

入れ直したら、/usr/local/etc/nginx.conf もしくは/usr/local/etc/site-enabled/の中の設定ファイルを編集し、 v6をリスニングするように設定を1行追加するだけ。

    listen 80 default_server;
    listen [::]:80; #追加

さて、折角v6対応したのだから、優越感に浸りたい。 ちまたではv6でアクセスしたときだけカメが歩いたりひろゆきが踊ったりしている。

こんなサイトを作りたい。 というわけで作ってみた。

・・・まではよかったが、今使っているDNSサービスがv6アドレスに対応していなかったので、 同じアドレスを利用することができなかった(´Д`;) とりあえず v4の動作 v6の動作 下のリンク先が見られなかった場合、あなたの環境はv6対応できていません。

このためのnginxの設定についてはまた次回。

Written on June 19, 2012