UnifiのGWをmap-e対応させる
自宅にUDM-SE(Unifi Dream Machine Pro Special Edition)を導入した際のメモ。
UDM-SE + U6-Pro x 2 の構成でネットワーク+AP環境を構築したが、想定していた二重ルーターの方法でうまく接続できなかったため、自力でmape対応をした。
回線 : So-net 光 プラス 戸建 東日本
UDM-SE : UniFi OS 4.0.6 / Network 8.3.32
前提知識
ipv4 over ipv6関連
徹底解説 v6プラス(PDF無料)
自分もよくわかっていなかったのでこの機会に勉強した。
色々な言葉が出てくるので混乱するがわかってしまえば仕組みはシンプル。
Unifi製品
商業施設、オフィス、東京ドームとかで使われているらしい。一般家庭には正直オーバースペックだが管理コンソールがなかなかよくできており、アクセス分析とかメッシュWi-Fiとかの設定も簡単。
二重ルータで設置 -> 問題発生
Unifiの製品は現在map-eに対応していないため、
(WAN) - HGW - UDM - (LAN)
といった形で、前段にmap-e対応のHGWをかませた二重ルータにする方法が多くのブログで紹介されている。(HGWはONUとルータが一体になった装置。)
自分の場合は下記のような構成だったが、まずは同様にこの方法で設置をした。
(WAN) - ONU - 支給ルータ(WG1200HP4) - UDM - (LAN)
結果
結果、以下のような状況になった。
- プロバイダから支給されていたWG1200HP4は当然map-eには対応しているので、ipv4でインターネットには接続できたが...
- webミーティングを30分くらい続けると確定でWG1200HP4が再起動し、数分ネットにつながらなくなる。
- WG1200HP4がDHCPv6-PDに対応しておらず(RA対応のみ)、UDMを通すと配下にipv6のアドレスを振ることができない。
- 結果、ipv6ではネットワークに接続できず。
1の問題については、結局原因がわからず諦め。WG1200HP4のFW実装に問題がありそうな気がするが、UDMを使っていないときは発生しないので相性問題ということだろう。
2の問題についてもルータの問題なのだが、これはひかり電話契約で解決できそうだった。https://note.com/sho7650/n/n5a00e1a582bf
- ひかり電話を契約していない場合、振られるipv6アドレスは一つ。(::/64 prefix)
- 契約すると、HGWが支給される(::/60 prefix)
ひかり電話を契約し、DHCP-v6 PD 対応のHGWを支給してもらえば解決した可能性はあるが、
- その場合でも1が解決するかは不明
- お金がかかる
- 支給まで時間がかかる(すぐ試せない)
- 二重ルータによる問題は解決しない
といった理由で、勉強がてらUDM-SE自体でmap-eを動かすのを試してみることにした。
UDMでmap-eを動かす
というわけで本題。
こちらにドンピシャの記事があったので、それを参考に作業。追加の施策も必要だったが基本的にはこちらのやり方を踏襲してうまくいった。
なお、ipv6の方は特に何もしなくても繋がるが、ipv4しか対応していないサーバーには軒並み繋がらなくなるのでmap-e対応はやはり必須。
準備と実施
まず以下の作業。
- UDMのSSH機能を有効化。EULA/ToS外の操作をすると保証外になるので自己責任で。
- 本体のバックアップを取る。
次に以下のようなスクリプトで、トンネルデバイスを作成し、iptables
コマンドでNATを行うように設定する。
https://gist.github.com/kuguma/26c080563febcf845b2eebf83a316b8a
mape-install.sh
mape-setup.sh
をUDMのrootに転送し、mape-install.sh
を実行すれば動くはず。
工夫した点
工夫した点は以下。
- サービスを作成し、
mape-auto-restart.sh
で正常性を定期監視するようにした。- UDMのGUIコンソールから設定などを行うと、ネットワークデバイスやNATルールの初期化が変更内容に応じて実施される。これによりmap-e対応のルールが動作しなくなりipv4のみ不通になる。
- 対策としてトンネルデバイスやNATルールの存在を常時監視して、消えていたら設定スクリプト
mape-setup.sh
を再度実行するようにした。 - また上記の初期化ではiptablesは初期化されないケースもあるので、再実行によりルールが重複しないように
mape-setup.sh
で最初に古い設定を削除するようにした。
- ipアドレスの範囲を見てmap-eのポート範囲を振り分けるようにした。
- map-eのポート範囲をうまく使いまわす方法はいくつか提案されているが…
- UBIOSではmangleテーブルを使うコマンドやiptablesのモジュール(nthなど)は軒並み動作しないようで、結局力技になった。
- mssの設定を行うようにした。
- ネットワークデバイスが違うのでUDMのコンソールからの設定はもちろん反映されない。
-
--set-mss
で強制的にmssを変更するようにした。- これをしないとLINEとかgithubにつながらない。
- 参考 : https://yabe.jp/gadgets/optimizing-mtu-mss/
-
--clamp-mss-to-pmtu
という同様のオプションもあるがこちらはmangleテーブルを使うため動作せず。
結果
なかなか大量の落とし穴があったが、とりあえずUDM-SE単体でmap-e対応することはできた。
速度は全く問題なし。(我が家は1Gbpsで構築している。10Gは次の家でチャレンジする予定。)
ニチバンベンチはけっこう厳しめ。
1回目はすぐ接続できるが、2回目は詰まる。- ニチバンベンチについて:https://blog.osakana.net/archives/category/comms/network/ipv6
- ニチバンのサイトが短時間のうちに大量のセッションを発行するせいで、NATの有効期限との兼ね合いでmap-eのポートを使い果たしてしまい画像が欠けたりサイトにつながらなくなる。
- UBIOSの制約が大きいため今回は打つ手なし。
基本的には日常/仕事で使っていて問題は起きていないが、map-eのNATのほうはポート範囲のポテンシャルを全てうまく使えているわけではないのと、mssをかなり短くしているので、稀に繋がり辛いときはある感じ。nthモジュール使えないとは思ってなかった。
まとめ
無理やり感はあるがUDM-SE単体で自力でmap-e対応することは可能。
ただ、保証が(たぶん)切れるし、完璧ではないので万人にお勧めできる方法ではない。
現時点では、お金があるならひかり電話を併用してまともなHGWを使うのがよいかも。
というわけでUbiquitiさん、公式対応お願いします!!!
Discussion