2018年5月2日水曜日

IPv6のルーティング

Ubuntu14.04マシンに2つNICを挿し、
一方を普通にブロードバンドルータ経由でインターネット接続、
他方を閉じたローカルネットで固定IPアドレス、
デフォルトゲートウェイ設定なしにして使っていたのですが、
ふと気がつくとIPv6でインターネットにアクセスできません。
同じブロードバンドルータに繋がった他のマシンでは可能なのに。

原因は両NIC共にIPv6のRAを受けてそれぞれ設定されており、
別途ルーティング設定をするのを忘れていたことでした。
まあIPv6のことなど気にしてなかったと言うべきかも。
ならば設定してやろうと粋がったまではよかったのですが…

この手の設定はIPv4なら
"/etc/network/if-up.d/"ディレクトリに適当なスクリプトを作って、
route add default gw <デフォルトゲートウェイ> dev <インターフェイス名>
と書いてやるだけで対応できます。多くの環境では
route add default gw 192.168.1.1 dev eth0
となるでしょう。
必要ならもっと複雑なルーティングにすることも可能ですし、
代わりに設定ファイル"/etc/network/interfaces"の適切な所に
"post-up"コマンドで上記を直接設定しても構いません。

ではIPv6は…はたと手が止まってしまいました。
通常ISPが配布するグローバルIPアドレスは接続の度に変わります。
IPv4だと通常LAN側はプライベートアドレスで運用するので、
デフォルトゲートウェイのIPアドレスが変わることは普通ありません。
ところがIPv6ではLAN側でもグローバルアドレスアドレスを使用、
つまりデフォルトゲートウェイのIPアドレスも度々変わります。
となると起動時の自動設定ってどうすればいいんだ?

うまい解決策が思いつかなかったため、
とりあえず閉じたローカルネット側のNICのIPv6を
無効にしてみることに。どうせ使ってないし。
設定ファイル"/etc/sysctl.conf"の末尾に
net.ipv6.conf.<インターフェイス名>.disable_ipv6 = 1
を加えて再起動してみると、
IPv6でインターネット接続できるようになりました。解決です。

ところで後で思いついたのですが、
デフォルトゲートウェイをリンクローカルアドレス(fe80::*)で
設定してやればいいんじゃないかと。これなら固定されています。
まあ面倒で試していませんので、間違ってたらごめんなさい。

0 件のコメント:

コメントを投稿