OpenWRT(GL.iNet GL-MV1000)でBIGLOBEのIPoE(MAP-E)に接続した


2021/05/20追記

1年運用しましたが、結局のところGL.iNet純正firmwareはモバイルルーターとして使う分にはいいが、常設ルーターとして使うには不適切な作りでした。

また、openWRTの機能だけを使おうとしても、firmware 3.102でかなり不適切な状況にされてしまいました。

このため、素のopenWRTで使うしかなくなったのですがopenWRTの「GL.iNet GL-MV1000 (Brume)」ではopenWRT 19.07.7でサポートしたように書いてありますが https://downloads.openwrt.org/releases/19.07.7/targets/mvebu/cortexa53/ にはなく snapshotディレクトリだしと不安感しか感じないので選択肢から外れました

結局のところNanoPi R2SにopenWRTをいれて使っています。

詳細は「NanoPi R2S+openWRT 21.02.0RCでBIGLOBEのMAP-E接続」を参照のこと。


いままでずっと自宅の回線がNTT東 Bフレッツマンションタイプだと思っていて、実際BIGLOBE側の契約管理画面でもそう表示されていたんだけど、NTT東でBフレッツマンションタイプは自動的にフレッツ光ネクストマンションタイプに移行させられていたということが判明。

そんなわけで「Biglobe IPv6接続(IPoE方式)」が使える様になったみたいなのでチャレンジ。

既にIPv6オプションは設定済みだったのでIPv6網への接続は完了している。BIGLOBE側の契約追加は必要なさそうなので、OpenWRT側の設定を実施。

まず、先行事例として参考になった記述は下記2つ。

OpenWrtでv6プラス (MAP-E) での IPv6 / IPv4 接続と、IPv4 PPPoEでのサーバー公開を両立する
OpenWrtでv6プラス(MAP-E)接続する手順

また、BIGLOBEで使われる DMR サーバのIPv6アドレスについては「biglobeのIPv4 over IPv6でハマった話 (RTX830)」に書かれている「https://api.enabler.ne.jp/6a4a89a8639b7546793041643f5da608/get_rules?callback=v6plus」で取得出来るJSONデータ内の「dmr」の値を参照した。(2404:9200:225:100::64だった)

まぁ、So-net事例と同じ値でしたけどね。

/lib/netifd/proto/map.shを編集して「# export LEGACY=1 」のコメントを外す必要あるし、ルーター再起動しないと駄目だったし、接続すると「MAP rule is invalid」で接続するとエラーになったのでwan6(IPv6)のAdvance Settingsの「Custom delegated IPv6-prefix」に値を設定しました。

「option encaplimit ‘ignore’」をつけないとRXがカウントされていない、という話については、現象は起こっていないので未設定です。

ニチバンのサイトにアクセスするとちゃんと表示されない問題はこちらでも発生中です。


2020/01/26追記

showroom-live.com で配信を見てると頻繁に接続できなくなる事態が発生。現状のshowroom-liveは映像配信についてはIPv6対応だが、ユーザアバターなどはIPv4のみという状況。これはもしや同時セッション数の問題?

OpenWrtでv6プラス(MAP-E)接続する手順」の「SNATを240ポート使えるように調整」(および元ネタの「 OpenWrt map-e (JPNE v6plus) において、割当ポート240個をちゃんと使わせるための設定 」)を実施。

すると期待通りに動作するようになった。

ニチバンのWebについてもスムーズに開けるようになった。

しかし、同時にアクセスするタブを増やしていったところアクセス障害が発生。どうやら240ポートを使い切ると発生している模様。ここらへんのポート利用のタイミング調整がどこになるのかがよく分からない・・・


2020/02/01追記

Nintendo SwitchとWiiUで対戦ゲームがプレイできないというクレームが・・・

調べたらMAP-E非対応だそうで。(NATタイプC判定)

かといってIPv4 PPPoEに戻すのはなーと考えた結果、VDSLモデムの次にスイッチングハブを入れて2つのルータを繋ぐことにして対応しました。


2020/06/01追記

GL-MV1000のfirmwareがバージョンアップしたので適用したところ

その1:map-eパッケージが削除されたのでMAP-Eで接続されなくなった(パッケージを再インストールする、という選択肢を選んだのに!)

その2:map-eパッケージを再インストールするとmap.shが再作成されるので、map.shへの修正を再度実施する必要がある

その3:SNATを240ポート設定も吹っ飛んだ

という事象が発生した。要注意。map-eパッケージをダウンロードするためにはIPv4 PPPoE接続をする必要があるので面倒だった。

上記で参照しているサイトが消えてもいいように重要な点を下記に記載。

map.shへの修正内容

まず、「# export LEGACY=1」のコメントを削除して「export LEGACY=1」とした後に下記の修正を追加

#$ diff -c /lib/netifd/proto/map.sh.orig /lib/netifd/proto/map.sh

*** /lib/netifd/proto/map.sh.orig	2017-05-30 02:45:19.000000000 +0900
--- /lib/netifd/proto/map.sh	2017-05-30 02:45:18.000000000 +0900
***************
*** 135,140 ****
--- 135,141 ----
  	      json_add_string snat_ip $(eval "echo \$RULE_${k}_IPV4ADDR")
  	    json_close_object
  	  else
+     	local mark=10
  	    for portset in $(eval "echo \$RULE_${k}_PORTSETS"); do
                for proto in icmp tcp udp; do
  	        json_add_object ""
***************
*** 142,152 ****
--- 143,155 ----
  	          json_add_string target SNAT
  	          json_add_string family inet
  	          json_add_string proto "$proto"
+ 	          json_add_string mark "$mark"
                    json_add_boolean connlimit_ports 1
                    json_add_string snat_ip $(eval "echo \$RULE_${k}_IPV4ADDR")
                    json_add_string snat_port "$portset"
  	                json_close_object
              done
+             mark=`expr $mark + 1`
  	    done
  	  fi
  	  if [ "$type" = "map-t" ]; then

firewall設定

Firewall – Custom Rulesとして以下を追加

iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  0 -j MARK --set-mark 10
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  1 -j MARK --set-mark 11
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  2 -j MARK --set-mark 12
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  3 -j MARK --set-mark 13
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  4 -j MARK --set-mark 14
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  5 -j MARK --set-mark 15
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  6 -j MARK --set-mark 16
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  7 -j MARK --set-mark 17
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  8 -j MARK --set-mark 18
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet  9 -j MARK --set-mark 19
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 10 -j MARK --set-mark 20
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 11 -j MARK --set-mark 21
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 12 -j MARK --set-mark 22
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 13 -j MARK --set-mark 23
iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet 14 -j MARK --set-mark 24

iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  0 -j MARK --set-mark 10
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  1 -j MARK --set-mark 11
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  2 -j MARK --set-mark 12
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  3 -j MARK --set-mark 13
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  4 -j MARK --set-mark 14
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  5 -j MARK --set-mark 15
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  6 -j MARK --set-mark 16
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  7 -j MARK --set-mark 17
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  8 -j MARK --set-mark 18
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet  9 -j MARK --set-mark 19
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 10 -j MARK --set-mark 20
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 11 -j MARK --set-mark 21
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 12 -j MARK --set-mark 22
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 13 -j MARK --set-mark 23
iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet 14 -j MARK --set-mark 24

2020/09/25追記

2020年8月リリースのfirmware 3.104では「Disabled ipv6」というとんでもないアップデートが…そう、IPv6通信が使えなくなりました。

GL製の管理GUI上の問題かと思ったら、全体的に使用不可にされていました。

GL-MV1000以外のページのリリースノートを見てみると「Disabled ipv6 function by default due to leak problem.」とメモリリークしてるのでデフォルト無効にしてる、と書いてあるんですが、GL-MV1000の場合どうやったら有効化できるのかわかりませんでしたし、リリースノートにも「Disabled ipv6」としか書いてないので本当に使えないのでしょう…

GLには1月に日本語訳を送ったりしているのですが、部分的に採用されたりするものの無視して中国人的日本語訳を続けているところもあったりで、ほんと、どうにもならんです・・・

GL-MV1000も退役検討中です。


2020/11/13 追記

OpenWrt map-e (JPNE v6plus) において、割当ポート240個をちゃんと使わせるための設定。」のコメントに、この設定 firewall3の設定ファイル解釈バグで修正されたやつを使えば 標準のmap.shで問題ないけど、修正されていないfirewall3の場合はmap.shの「json_add_boolean connlimit_ports 1」を「json_add_boolean connlimit_ports “1”」と書き換えればOK、という書き込みが。

そこでやってみたところ、確かにshowroom-liveでの問題がなくなった

ただ、「iptables -t nat -L -v」でポートの使用状況を確認すると、最初の3つしか使ってないという・・・なので、両方使っている。


2020/12/17 追記

v3.105がリリースされたのでアップデートしてみましたが、相変わらずIPv6が使えません。

なので、v3.102に戻して使用中です。


2021/05/16追記

v3.102ではIPv6が有効化されたものの、詳細設定可能なluciがインストールされていない状態となり、またGL.iNET UI側でIPv6設定を有効にしたあとにluci側で操作する必要があるなど、とてつもなく面倒な事態になりました。

このため、NanoPi R2S+openWRT 21.02.0RCでBIGLOBEのMAP-E接続 に切り替えました。

“OpenWRT(GL.iNet GL-MV1000)でBIGLOBEのIPoE(MAP-E)に接続した” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください