FICUSONLINE F9E
OpenWRT + V6プラス(MAP-E)
フレッツ光回線はインターネットからは独立したIPv6ネットワーク網で、VNEのIPv6ネットワーク網経由でIPv6インターネットに繋がっています。
Takanobu FuseAdministrator

4 min read

last year

Linux
フレッツ光回線はインターネットからは独立した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サーバから付与されます。

Vpn Install
  • 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


TP-LINK製Archer C6 V2にOpenWRTをインストールしてV6プラス(MAP-E)に対応させます(デフォルトではV6プラス非対応)。

Archer C6 V2
 
ルータの初期状態から下記手順で設定します。
 
  1. アドオン map のインストール

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

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

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

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

参考:
SSH接続してインストールする場合
$ ssh [email protected]
# opkg update
# opkg install map
 
OpenWRTの管理画面からインストールする場合
System > Softwareの "Update Lists" からパッケージの更新作業を行い、map をフィルタリングしてインストールして下さい。
 
Map Addon
 
注)インストール後、ルータの再起動が必要です。
 

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

インターフェイスwan6を再設定します。

IPv6 configuration

ルータへ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設定を下記を参考に変更

Wan6 Dhcp

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

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

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

Map E Auto Calc
 
MAP-EによるIPv6アドレス内にIPv4アドレスとポートを割当てる仕組みについては、下記ドキュメントで詳しく説明されています。
 
 
OpenWRTで新規インターフェイス wan6mape を作成。下記の各項目に取得したパラーメータを入力して下さい。
 
Wan6mape Setting 001

Tunnel Link に wan6 を指定、MTU を1460(任意)に設定。
 
Wan6mape Setting 002

ここまでの設定で wan6 インターフェイスを Restart することでIPv4での接続が確立されます。
wan6mape にIPv4アドレスが付与され、IPv6アドレスを付与されたwan6mapeの仮想インターフェイス wan6mape_ が出現。
wan6mape のRXとTXに何らかの通信量が表示されれば接続出来ています。
 
Interface
 

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

クライアントにはパブリックなIPv6も付与されます。ポート開放は
Network > Firewall > Traffic Rules
から行います。

Firewall HTTP Https
 

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

ファイヤーウォールコマンド:nft, fw4
OpenWRTのファイヤーウォール fw4 の実体は、nftables のテーブル "table inet fw4” を作成・編集し、nftablesを起動・停止、設定ファイルの再読込などを行うスクリプトです。(/sbin/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
#------------------------------------
 
本内容についての追加・修正事項などについては、下記フォーラムサイトの記事でフォローしています。