楽天モバイルのIPv6ではNAT64/DNS64が利用できることが知られている1。 筆者の自宅では固定回線が引けないため楽天モバイルを使用しているが、IPv4でいくつかのサイトが開けないことがあった。 NAT64ではそのようなサイトも開けたため、しばらくはIPv6シングルスタックのネットワークを切って利用していたが、色々面倒になったのでメインのネットワークのIPv4デフォルトルートを464XLATにした。

OpenWRTの設定

上流のIPv6ネットワークがNAT64に対応していれば、OpenWRTでは464xlatパッケージをインストールし設定を行えば使える。

まずは464xlatをインストールする。LuCIでもsshのopkgでもよい。

LuCIで464XLATのinterfaceを作成する。上流のIPv6 interfaceがwan6なので、今回はinterfaceの名前はwan6_4とした。

firewallでwan zoneにinterfaceを追加する。interface作成時にはwebから設定できるが、作成後はLuCIからは変更できないので、 その際は/etc/config/firewallのwan zoneにlist network ‘wan6_4’を追加し、firewallを再起動する。

これで464xlatでIPv4パケットが通るようになる。他にIPv4の上流がある場合はmetricを調整する。

IPv6 prefix変更時に464XLATが通信できなくなる問題の対処法

楽天モバイルでは再接続時にIPv6 prefixが変更されることがある(当然IPv6アドレスも変わる)。 OpenWRTの464xlatパッケージはこのような場合を自動では取り扱ってくれないので、今回は自動化のためhotplugにスクリプトを用意した。

IPv6の上流ネットワークが変更された場合、新しいIPv6アドレスが振られた状態でwan6_4をdownさせれば、数秒後に再起動して通信が可能になる。 そこで、次のようなスクリプトを用意した。

Filename: /etc/hotplug.d/iface/50-464xlat
#!/bin/sh

[ "$ACTION" = ifupdate ] && {
	[ "$INTERFACE" = "wan6" ] && {
		[ "$IFUPDATE_ADDRESSES" = 1 ] && {
			[ "$IFUPDATE_ROUTES" = 1 ] && {
				ubus call network.interface.wan6_4 down 
			}
		}
	}
}