Last Update: 2009-03-27 (金) 03:42:05 (5471d)
FrontPage / network / IPv6 / linux

Linux で IPv6を使う

IPv6でマルチホーム

tunnelを使った方法ではありません。あしからず。

光プレミアムで使うTIPSです。vlan構成になっていますが、物理NICで別れている場合も同じ方法が使えます。
ご自宅にどうぞ。幸せになれるに違い有りません:P

別途、IPv6ルータが有り、インターネットへの到達性があるネットワークと、フレッツ光プレミアム等に接続され、インターネットとはルーティングされていないネットワークを同時に接続した場合、IPv6のマルチホーム環境となる。同時に接続した場合、ルーティングテーブルを書き、両方のネットワークと上手に共存する方法を紹介する。

環境・構成

 The Internet   Flets
       |           |
       |v6 default |  CTU(hikariP) 2001:a000::/21
       |           |               2001:0d70::/30
  +----+-----------+-----+
  |(eth0.20)   (eth0.11) |
  | Linux 2.6.x (debian) |
  +----------------------+
devaddr備考
eth0.202001:200:564::80:ffffnative -> インターネット
eth0.112001:a092:c0c0::80:ffffnative -> 地域IP網。closed

※NTTのアドレスブロック

西: 2001:A000::/21
     2001:0D70::/30
東: 2001:0C90::/32
     2404:1a8::/32
     2408::/22

ルータのアドレスを調べる

デフォルトではRAを受け取る設定になっている為、

# netstat -rn -net6

でルーティング情報を調べることができる。 最後の方に存在している

::/0                     fe80::200:87ff:fe8d:e678         UGDA  1024   106       0 eth0.11
::/0                     fe80::21c:c4ff:fe5f:3802         UGDA  1024    1        0 eth0.20

値を見ればよい

ルータにpingが届くか確認

# ping6 -I eth0.11 fe80::200:87ff:fe8d:e678
# ping6 -I eth0.20 fe80::21c:c4ff:fe5f:3802

環境設定

raを受け取らない

# echo 0 > /proc/sys/net/ipv6/conf/default/accept_ra

redirectを無効

# echo 0 > /proc/sys/net/ipv6/conf/default/accept_redirects

ipv6 forwardingを無効(必要な場合のみ有効にしてください。今回の用途では不要)

# echo 0 > /proc/sys/net/ipv6/conf/default/forwarding

※ 勿論、sysctlコマンドでも設定可能です

動作に問題がないことを確認した後、sysctl.confへ設定を書きます。 そのまま、sysctl.confへ追記した場合は、

Setting kernel variables...error: "net.ipv6.conf.default.forwarding" is an unknown key

と怒られてしまいますので、/etc/modules に、ipv6を書きます。 これは、kernelが起動したあと、/etc/network/interfaces の時にmoduleがロードされますが、今回sysctlで変更する場合には、ipv6 moduleがロードされていないためにこの問題が発生します。その為、最初にmoduleを読み込ませる必要があります。

echo "ipv6" >> /etc/modules
/etc/sysctl.conf
-----
# Uncomment the next line to enable packet forwarding for IPv6
net.ipv6.conf.default.forwarding=0
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.accept_redirects=0

吉藤さん、情報をありがとうございます。

アドレスを付ける

# ip -6 addr add 2001:a092:c0c0::80:ffff/64 dev eth0.11
# ip -6 addr add 2001:200:564::80:ffff/64 dev eth0.20
# ifconfig eth0.20 add 2001:200:564::80:ffff/64 でも、同様のことができる

ルーティングテーブルを書く

# route -A inet6 add 2001:a000::/21 gw fe80::200:87ff:fe8d:e678 dev eth0.11
# route -A inet6 add 2001:0d70::/30 gw fe80::200:87ff:fe8d:e678 dev eth0.11
# route -A inet6 add 2001:0C90::/32 gw fe80::200:87ff:fe8d:e678 dev eth0.11
# route -A inet6 add default gw fe80::21c:c4ff:fe5f:3802 dev eth0.20

動作確認

インターネットへの到達性があるか確認

# traceroute6 www.nic.ad.jp

地域IP網へ到達性があるか確認

# traceroute6 ctu.fletsnet.com

起動スクリプトに書く

もっときれいな方法が有るかもしれませんが、今回は次のように設定。

vi /etc/network/interface
auto eth0.11 eth0.20 
iface eth0.11 inet6 static
	address 2001:a092:c0c0::80:ffff
	netmask 64
	up route -A inet6 add 2001:a000::/21 gw fe80::200:87ff:fe8d:e678 dev eth0.11
	up route -A inet6 add 2001:0d70::/30 gw fe80::200:87ff:fe8d:e678 dev eth0.11
	up route -A inet6 add 2001:0C90::/32 gw fe80::200:87ff:fe8d:e678 dev eth0.11
iface eth0.20 inet6 static
	address 2001:200:564::80:fff
	netmask 64
	up route -A inet6 add default gw fe80::21c:c4ff:fe5f:3802 dev eth0.20

※ RedhatLinuxやCentOS、Fedoraは、書き方わかりません。強引に、コマンド類をrc.localに書けば、起動時は動くでしょう(知っている人追記募集)

 <ぼそ>
っていうか、IPv6はnetmaskではなく、prefixrenなんだけどな…
 </ぼそ>

関連記事

光プレミアムにおけるIPv6問題への手軽な対策

サイトが消えていたため、WebArchivesから回収できたコンテンツを転載しておく。


IPv6問題については光プレミアムにおけるIPv6問題のまとめに書いた通り。

NTTに頼んでもどうしようもないと分かりました。
多分microsoft.comとかが明日からIPv6対応になって、ユーザーの半分位が接続が遅くなったとかって文句言わないと直らないでしょう。駄目過ぎ。

なので自前で解決しましょうって話です。
解決の方法は何種類かあります。
メニューに合わせて選びましょう。

さて、ここからは僕みたいな「v6stageの動画はみたいけど、他のIPv6はどうでもいいや」って人のための説明です。できるだけ自堕落に適当に対策します。対策は、一言で言うと、IPv4のアドレスがあったらそっちを使い、IPv6しかないときだけIPv6を使うという物です。適当ですね♪

設定にはnetshを使います。
まずは”netsh interface ipv6 show prefixpolicy”とcmdから入力します。以下のような物が出力されたはずです。

> netsh interface ipv6 show prefixpolicy

アクティブ状態を照会しています…

Precedence Label Prefix
--------------------------------------------------------------------------------

   5  5  3ffe:831f::/32
  10  4  ::ffff:0:0/96
  20  3  ::/96
  30  2  2002::/16
  40  1  ::/0
  50  0  ::1/128

この表の中で、::/0がIPv6を、::ffff:0:0:/96がIPv4を意味します。そしてこのルールはPrecedenceの大きい方から適用されます。もうお分かりですね、両者のエントリーのPrecedenceを入れ替えればいいわけですw

上の表を参考にして以下を打ち込みます。ひとつでも設定すると中身が空になってしまうので、入れ替えるふたつだけではなくて、全部を設定しなおさなくてはいけませんでした。

netsh interface ipv6 set prefixpolicy ::1/128 50 0
netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 40 4
netsh interface ipv6 set prefixpolicy 2002::/16 30 2
netsh interface ipv6 set prefixpolicy ::/96 20 3
netsh interface ipv6 set prefixpolicy ::/0 10 1
netsh interface ipv6 set prefixpolicy 3ffe:831f::/32 5 5

これで完成です。v6stageで映画を見ながら、快適に http://www.netbsd.org/ をチェックしにいけます。但しこれは対処療法だということを覚えておいてください。本来ならNTT-Wがこういう問題を解決しなくてはいけませんし、そういった問題を残したままの製品を売るなんて最低です。

もしこの設定で快適になったなら、一度NTT-Wに電話して、光プレミアムにしてから http://www.netbsd.org/ のホームページを見るのにタイムラグが発生するようになった。何とかしろ。なんて文句を一言いって、NTT-Wの方に問題を伝えてください。よろしくお願いします。

TOPページへ戻るページの更新   ページの編集新しいページの作成新しい下位ページの作成そのページを引用して新規作成そのページにファイルの添付ページの削除ページ名の変更前回の編集内容の表示ページの凍結バックアップページの参照ページへのリンク元を表示   サイトのページ一覧サイト内単語検索編集したページの履歴削除したページの履歴   別ウィンドウでマニュアルページへ