OpenWRT V6プラス (MAP-E) 接続設定

V6プラス接続設定(MAP-E)

OpenWRTをインストールしたルータ TP-LINK Archer C6 V2V6プラス接続に対応させます。

フレッツ光回線はインターネットからは独立したIPv6ネットワーク網で、VNEのIPv6ネットワーク網経由でIPv6インターネットに繋がっています。

OpenWRTクライアントとIPv4インターネットとの相互接続は、クライアント側に設置されるMAP CE(ONU)とVNEに設置されるMAP BR間で確立されます。

MAP CEとMAP BRはIPv6アドレスで相互接続されます。

MAP CEのIPv6アドレスのプレフィックスには、パブリックIPv4アドレスと割当てられるポート番号の情報が組込まれています。ルータのインターフェイスwan6mapeには、このパブリックIPv4アドレスが割当てられます。

ルータのインターフェイスwan6のIPv6アドレスは、VNEのDHCPサーバから付与されます。

  • MAP: Mapping of Address and Port
  • MAP CE: MAP Consumer Edge
  • MAP BR: MAP Border Relay
  • NGN: Next Generation Network
  • VNE: Virtual Network Enabler
  • JPNE: Japan Network Enabler

ルータの初期状態から下記手順で設定します。

  1. アドオン map のインストール
  1. wan6, lanインターフェイスの再設定
  1. MAP-Eインターフェースwan6mapeの作成
  1. IPv6ポート開放設定(オプション:http,httpsポートの開放など)
  1. ファイヤーウォールルール追加(オプション:IPv4ロードバランスなど)

1. アドオン map のインストール

注)インストール後、ルータの再起動が必要です。

SSH接続してインストールする場合

$ ssh [email protected]
# opkg update
# opkg install map

OpenWRTの管理画面からインストールする場合

System > Softwareの "Update Lists" からパッケージの更新作業を行い、map をフィルタリングしてインストールして下さい。


2. wan6, lanインターフェイスの再設定

インターフェイス wan6 の設定

ルータへSSH接続し、ネットワーク設定ファイルのインターフェイス wan6 のセクションに

        option ip6prefix '2400:aaaa:bbbb:cccc::/64'
        option iface_map 'wan6mape'   
        option zone_map 'wan'

を追加します。

$ ssh [email protected]
# vi /etc/config/network
config interface 'wan6'
            option device 'eth1'
            option proto 'dhcpv6'
            option reqaddress 'try'
            option reqprefix 'auto'
            option ip6prefix '2400:aaaa:bbbb:cccc::/64'
            option iface_map 'wan6mape'   
            option zone_map 'wan'

ip6prefix: VNEから付与された wan6 のIPv6アドレス上位64ビット

iface_map: 新たに作成するMAP-Eインターフェイス wan6mape

zone_map: ファイヤーウォールゾーン wan を指定


OpenWRTの設定画面でwan6のDHCP設定を下記を参考に変更

OpenWRTの設定画面でlanのDHCP設定を下記を参考に変更


3. MAP-Eインターフェースwan6mapeの作成

まず初めに、wan6に割当てられたIPv6アドレスから、設定に必要な各パラメータを算出します。
以下の自動算出するサイトを利用して下さい。

online MAP-E rule calculator

MAP-EによるIPv6アドレス内にIPv4アドレスとポートを割当てる仕組みについては、下記ドキュメントで詳しく説明されています。

徹底解説v6プラス

RFC 7597 - Mapping of Address and Port with Encapsulation (MAP-E) 日本語訳

OpenWRTで新規インターフェイス wan6mape を作成

下記の各項目に取得したパラーメータを入力して下さい。

Tunnel Linkwan6 を指定、MTU を1460(任意)に設定。


ここまでの設定で wan6 インターフェイスを Restart することでIPv4での接続が確立されます。

wan6mape にIPv4アドレスが付与され、IPv6アドレスを付与されたwan6mapeの仮想インターフェイス wan6mape_ が出現。

wan6mape のRXとTXに何らかの通信量が表示されれば接続出来ています。


4. IPv6ポート開放設定(オプション:http,httpsポートの開放など)

クライアントにはパブリックなIPv6も付与されます。ポート開放は

Network > Firewall > Traffic Rules

から行います。


5. ファイヤーウォールルール追加(オプション:IPv4ロードバランスなど)

ファイヤーウォールについては次の投稿記事を参照願います。

IPV6ファイヤーウォール設定

IPV6ファイヤーウォール設定例

IPv6 firewall testing

You can confirm the state of your IPv6 firewall using a couple of tools:

OpenWRTルータへのSSH接続

MAP-E対応にするためには、SSH接続でのリモート操作が必須です。以下SSH接続後に必要となるコマンドとMAP-Eに対応するために編集が必要なファイルを列挙します。

ルータへの接続

$ ssh [email protected]

ファイヤーウォールルールのリロード(システムデーモン)

# /etc/init.d/firewall reload

# service firewall reload

ファイヤーウォール設定ファイル

/etc/config/firewall

ネットワーク設定ファイルのリロード(システムデーモン)

#/etc/init.d/network/reload

# service network reload

ネットワーク設定ファイル

/etc/config/network

パッケージアップデート、アップグレード、インストール

# opkg update
# opkg upgrade <package_name>
# opkg install <package_name>

ファイヤーウォールコマンド:nft, fw4

OpenWRTのファイヤーウォール fw4 の実体は、nftables のテーブル "table inet fw4” を作成・編集し、nftablesを起動・停止、設定ファイルの再読込などを行うスクリプトです。(/sbin/fw4)

ファイヤーウォール : fw4

設定例

ファイヤーウォールのルール追加は、uci コマンドか nft コマンドで行います。

全テーブルルール確認

# nft list ruleset

全ルールの削除

# nft flush ruleset

fw4 が実行するルールセット

# fw4 print
table inet fw4
flush table inet fw4

table inet fw4 {
	#
	# Defines
	#

....................
....................

	#
	# User includes
	#

	include "/etc/nftables.d/*.nft"
.....................
....................

ルール追加は、デフォルトで読み込まれる設定ファイル

/etc/nftables.d/*.nft

を作成することでも可能です(ただしテーブル inet fw4 限定です)。


MAP-Eを導入する場合、割当てられたパブリックIPv4のポート郡に効率的に通信パケットを割振るため(+ pingを実行可)、ロードバランスルールをICMP,TCP,UDPの各プロトコルに適用したテーブルを追加します。

table inet mape {
	chain srcnat {
		type nat hook postrouting priority filter; policy accept;
		ip protocol icmp oifname "map-wan6mape" snat ip to 10.20.30.40:numgen inc mod 240 map { 0 : xxxx, 1 : xxxx, ......., 239 : xxxx }
		ip protocol tcp oifname "map-wan6mape" snat ip to 10.20.30.40:numgen inc mod 240 map { 0 : xxxx, 1 : xxxx, ......., 239 : xxxx }
		ip protocol udp oifname "map-wan6mape" snat ip to 10.20.30.40:numgen inc mod 240 map { 0 : xxxx, 1 : xxxx, ......., 239 : xxxx }
	}
}

このテーブルを追加する以下のスクリプトを /lib/netifd/proto/map.sh と入替えます。

# cd /lib/netifd/proto
# cp map.sh map.sh.old (バックアップ)
# vi map.sh (内容を削除してコピー&ペースト)
# nft flush ruleset (全ルールセット削除)
# service network restart (ネットワーク再起動)

注)OpenWRTのファイヤーウォール fw4 は、ルールセットテーブル inet fw4 のみ管理するため、上記スクリプトでは再起動する度にテーブル inet mape にルールが追加されてしまいます。

修正)下記箇所にテーブルを削除する条件文スクリプト if ~ nft delete table inet mape ~fi 追加

/lib/netifd/proto/map.sh

#------------------------------------
            #MODIFICATION 2: Create mape table
#------------------------------------
            if nft list tables | grep -q "table inet mape"; then                                               
                nft delete table inet mape                                                                             
            fi                                                                                                         
            nft add table inet mape                                                                                    
            nft add chain inet mape srcnat {type nat hook postrouting priority 0\; policy accept\; }
#------------------------------------
	    #END MODIFICATION 2
#------------------------------------