IPv6 の導入の実験として、IPv6トンネルを無料で利用できる he.net を使って設定してみた。
現在、自宅サーバ自体を IPv6 対応することはできたけど、サーバ配下のパソコンもこのトンネルを使うようにできていないので、まだ目標の半分。
he.netへの登録
Hurricane Electric(he.net)の接続方法を紹介しているサイトの記事を見ながら、he.net に利用者登録をして、トンネルの割り当てを受ける。
トンネル起動の設定
he.netのサイトで、上記の登録が終わると、”Example of Configuration”のタブで、OSを選べば、接続するための設定ファイルのサンプルが表示される。
ただ、Debian/Ubuntu を選ぶと、/etc/network/interfaces 用の設定が示された。自宅サーバは systemd を使っているので、このままでは使えない。ほかのサイトで調べて、最終的に以下に落ち着いた。
(( /etc/systemd/system/he-ipv6.service )) [Unit] Description=he.net IPv6 tunnel After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/ip tunnel add he-ipv6 mode sit remote 74.82.xx.xx local 192.168.yy.yy ttl 255 ExecStart=/bin/ip link set he-ipv6 up mtu 1480 ExecStartPost=/bin/sleep 0.3 ; /bin/ip -6 route add ::/0 dev he-ipv6 Execstop=-/bin/ip -6 route del ::/0 dev he-ipv6 ExecStop=/bin/ip link set he-ipv6 down ExecStop=/bin/ip tunnel del he-ipv6 [Install] WantedBy=multi-user.target
systemd の サービス として設定するために、he-ipv6.service ファイルを作成する。
systemd ではサービスの処理を起動/停止するためのコマンドは、ExecStart / ExecStop に記載する。
“ip tunnel add” の remote 欄は、割り当てられたhe.net のIPアドレス、localには自分のグローバルアドレスを指定する。ただし、自宅サイトはルータ内にサーバがあるので、ポートフォワードされたプライベートのアドレスを指定する。
トンネル開通後のIPv6のデフォルトゲートウェイを設定する “ip -6 route add” の実行は、少し間を置かないと失敗するようなので、若干の sleep を挟んだ。ExecStart 行は、通常1行1コマンドしか使えないが、ExecStartPost は、複数コマンドが書けるので、こういう時には便利。
ExecStop でのデフォルトゲートウェイ削除の処理 “ip -6 route del ::/0″では、前述のsleepが無い場合、エラーが出ることがあるので、コマンドの先頭に”-“をつけエラーで止まらないようにしておいた。
# サービスの登録 $ sudo systemctl enable he-ipv6.service # サービスの起動 $ sudo systemctl start he-ipv6.service # サービスの停止 $ sudo systemctl stop he-ipv6.service
ただし、後にも述べるように常時 IPv6 化は現状では問題があるので、systemctl enable は行わないでおく。
RAの設定(ルーティング広告)
ルータ周りの他のパソコンがグローバルなIPv6アドレスが割り当てられるように、RAの設定を行う。実は、リンクローカル”fe80::”での自宅内IPv6ネットワークの運用では、グローバルIPv6が無いので RA が不要だけど、IPv6の DNS をアナウンスが必要なので、今までは DHCPv6 を使っていた。でも、radvd.conf の設定を調べると、アナウンスするプレフィックス設定の欄を “prefix ::/64” と記載すれば、”fe80::”のリンクローカルはアナウンスされないようなので、radvd に変更。”RDNSS”の欄で、自宅内 IPv6 対応なDNSサーバを指定することで、IPv6経由で名前解決をできるようにしておく。
interface eth0 { AdvSendAdvert on; AdvManagedFlag on; AdvOtherConfigFlag on; # 非リンクローカルなアドレスだけアナウンス prefix ::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; # DNSは、リンクローカルなDNSサーバをアナウンス RDNSS fe80::xxxx:xxxx:xxxx:xxxx { AdvRDNSSLifetime 30; }; DNSSL example.jp { AdvDNSSLLifetime 30; }; };
この段階で、IPv6 のファイアウォールの設定(ferm)の設定が間違っているのが判明したので、別途修正。
常時IPv6対外接続は問題あり
よく、IPv6 を使うとネット通信速度が速くなると言われているけど、現時点では IPv6 利用者が少ないので、上流が詰まらないだけ。今回のような、IPv4 を使ったIPv6トンネリングでは、IPv4 以上には速くなるはずもないし、IPv6 も無料でサービスを提供している he.net では、上流の輻輳もあるだろうし高速通信も期待できない。
このため、上記の IPv6 接続は単なる自分の勉強用で、必要な時だけ”systemctl start he-ipv6.service”でトンネル接続させる予定。。当面、常時 IPv6 運用はしないだろう。