Ubiquiti Dream Router (UDR) で v6 プラス (MAP-E) を利用できるようにする

2024 年 4 月時点の UniFi Network アプリは DHCPv4, IPv4 PPPoE と transix (DS-Lite) のみ対応し、日本のフレッツ光 v6 プラス (MAP-E) 環境では IPv4 インターネットに出ることができません。今後のアップデートでネイティブ対応がされると思われますが、一足早く接続の確立に挑戦してみました。

普通の方法

(1) 二重ルーター

なお、最も手っ取り早く UDR を v6 プラス環境で使用する方法は既設ルーター(貸与ルーターまたは市販ルーター)の LAN ポートから UDR の WAN ポートに接続して DHCPv4 でプライベート IPv4 アドレスを受け取ることです。ポートを開放するには既設ルーターにログインして DMZ を UDR の IPv4 アドレスに設定する必要もあるでしょう。うまく繋がらないときは UDR 底面のリセットボタンを 15 秒間長押しして工場出荷状態にリセットするとうまくいきました。この方法の問題点は UDR から既設ルーターの設定画面にアクセスできないこと、DHCPv4 サーバがネットワーク内に複数できること、2 重 NAT になることです。

(2) スイッチングハブ

別の方法として、 UDR をハブとして使う方法もあります。既設ルーターの LAN ポートから UDR の LAN ポートに接続し、既設ルーターの DHCPv4 を利用して UDR にプライベート IPv4 アドレスを設定し、既設ルーター経由でインターネットに出ます。UDR から IPv4 アドレスを配らないように DHCPv4 サーバはオフにしておきます。ネットワーク中の DHCPv4 サーバは 1 箇所で、UDR 配下から既設ルーターの設定画面を見られるはずです。この方法は試していません。

どちらの方法も、接続速度の上限が既設ルーターの性能に拘束されるため、既設ルーターなしで接続したいものです。特に既設ルーターが不安定で交換を検討しているのであればなおさらです。ただし、市販品でないルーターが貸与されている場合は上記の方法に頼らざるを得ない ISP もあります。

非公式の方法

前回の記事「【2024 年版】日本のインターネット接続環境の分類」ではインターネットに出るために必要な接続方式やパラメータについて調査しました。2024 年 4 月時点で UDR は MAP-E をサポートしていないため v6プラスは使えませんが、SSH を使うと裏技的に接続可能になります。すべて自己責任であり、製品保証はなくなるためご注意ください。事前に設定のクラウドバックアップを取っておき、困ったら再起動したり工場出荷状態にリセットしたりしましょう。以下の設定について Ubiquiti サポートに質問しないでください。

UDR の https://192.168.1.1/unifi にLAN有線接続のPCから接続(IP アドレスを環境により異なります)。 OS Settings > Console Settings > Advanced > SSH からパスワードを設定。

ssh root@192.168.1.1 でログイン。

❯ ssh root@192.168.1.1  
(root@192.168.1.1) Password:  
(root@192.168.1.1) Password:  
Linux Dream-Router 4.4.198-ui-mtk #1 SMP PREEMPT Fri Jan 26 01:53:34 CST 2024 aarch64  
  
Firmware version: v3.2.12  
  
 ___ ___      .__________.__  
|   |   |____ |__\_  ____/__|  
|   |   /    \|  ||  __) |  |   (c) 2010-2023  
|   |  |   |  \  ||  \   |  |   Ubiquiti Inc.  
|______|___|  /__||__/   |__|  
           |_/                  https://www.ui.com  
  
     Welcome to UniFi Dream Router!  
  
********************************* NOTICE **********************************  
* By logging in to, accessing, or using any Ubiquiti product, you are     *  
* signifying that you have read our Terms of Service (ToS) and End User   *  
* License Agreement (EULA), understand their terms, and agree to be       *  
* fully bound to them. The use of CLI (Command Line Interface) can        *  
* potentially harm Ubiquiti devices and result in lost access to them and *  
* their data. By proceeding, you acknowledge that the use of CLI to       *  
* modify device(s) outside of their normal operational scope, or in any   *  
* manner inconsistent with the ToS or EULA, will permanently and          *  
* irrevocably void any applicable warranty.                               *  
***************************************************************************  
Last login: Fri Mar 22 01:10:40 2024 from 192.168.1.2  
root@Dream-Router:~#

apt install nano shellcheck でエディタ等をインストール。

nano map-e.sh して以下のテキストを貼り付けて Ctrl-X 、名前はそのままで保存、ただしテキスト3行目の BR, CE, IPv4 は計算機の結果を貼り付けてください。

cat >/root/mape-setup.sh <<'EOF'
#!/bin/bash
BR=(peeraddrのアドレス) CE=(CEのアドレス) IPv4=(IPv4アドレス) 
MAPE_PORT_RANGES=(
6224-6239 10320-10335 14416-14431
18512-18527 22608-22623 26704-26719
30800-30815 34896-34911 38992-39007
43088-43103 47184-47199 51280-51295
55376-55391 59472-59487 63568-63583
)
# LAN1-4がeth0..eth3 WANがeth4
WANDEV=eth4 TUNDEV=ip6tnl1
sleep 30
ip -6 addr add "$CE" dev "$WANDEV"
ip -6 tunnel add "$TUNDEV" mode ip4ip6 remote "$BR" local "$CE" dev "$WANDEV" encaplimit none
ip link set dev "$TUNDEV" mtu 1460 up
ip route add default dev "$TUNDEV"
iptables -t nat -I UBIOS_POSTROUTING_USER_HOOK 1 -p icmp -o "$TUNDEV" -j SNAT --to "$IPv4:${MAPE_PORT_RANGES[0]}"
iptables -t nat -I UBIOS_POSTROUTING_USER_HOOK 2 -p tcp -o "$TUNDEV" -j SNAT --to "$IPv4:${MAPE_PORT_RANGES[0]}"
iptables -t nat -I UBIOS_POSTROUTING_USER_HOOK 3 -p udp -o "$TUNDEV" -j SNAT --to "$IPv4:${MAPE_PORT_RANGES[0]}"
EOF
chmod +x /root/mape-setup.sh;
cat >/etc/systemd/system/mape-setup.service <<'EOF'
[Unit]
After=sockets.target network-online.target

[Service]
User=root
ExecStart=/bin/bash /root/mape-setup.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload;
systemctl enable mape-setup;
reboot

chmod +x map-e.sh で実行権限を付与。

./map-e.sh でインストール。

数分待つと PING が通るようになります。

ping 1.1.1.1
curl -v -4 example.com

再起動してしばらく待ち、接続が維持されることを確認してください。

普通にブラウジングする限り機能面では特に問題ありませんでした。
外から VPN 接続する場合は MAP-E で割り当てられているポートだけしか使えません。
そのため Teleport VPN は使えません。ただし、コンソールの設定はリモートでも可能です。

速度テスト結果

インターネットが 100 Mbps 環境なのであまり参考にならない可能性もありますが、簡単に ($${n=1}$$) 速度検証しました。

既設ルータ使用時の速度

Download Mbps: 82.64
Upload Mbps: 78.70

UDR 単体での接続時の速度

Download Mbps: 90.42
Upload Mbps: 49.31

iptables のルールを足してハードウェアオフロードが効かなくなった影響か、上り速度が約 50 Mbps まで下がったようです。やはりネイティブ対応が待たれますね。

まとめ

この記事では、Ubiquiti Dream Router (UDR) を日本のフレッツ光 v6プラス(MAP-E)環境で使用するための方法を解説しました。公式には MAP-E がサポートされていないものの、システムをカスタマイズすることで接続できました。
手っ取り早い方法としては既設ルーターの LAN ポートから UDR の WAN または LAN ポートに接続する方法がありますが、二重 NAT や DHCPv4 サーバーの重複などの問題が発生する可能性があります。非公式な方法では、シェルスクリプトを使用して MAP-E を設定し、IPv4 インターネットへのアクセスが可能になりました。ベンチマークテストの結果、下り速度は大差なく、上り速度は 50 Mbps 程度に低下しました。この記事で紹介した方法を試す場合は自己責任でお願いします。

参考記事

【2024 年版】日本のインターネット接続環境の分類 - 前回の記事
Ubiquiti UDM-SE でIPv6を有効にする - 上流はフレッツ光ネクストの HGW
Linuxでv6プラス MAP-Eなルーターをつくる。IPv6, RAも疎通する版 - 上流はフレッツ光コラボ回線の ONU


この記事が気に入ったらサポートをしてみませんか?