1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ふんわり】OpenWrtを使ってBIGLOBE光環境でPPPoEとIPoEを併用する

1
Posted at

※この記事は原文を私が書き、Google Gemini 3.1 Proに「なんかいい感じにmdに加工して」と頼んだものです。口調はAIっぽいかもしれませんが、内容は人間が書いています。

【OpenWrt】Steamの爆速DLとマイクラ鯖(25565)公開を両立したくてIPoE+PPPoEを共存させた話

はじめに(ダサいポート番号からの脱却)

身内向けにマイクラサーバーを公開するため、独自ドメインをとってCloudflareにDNSレコードを登録した。
でも、うちの環境だとポート25565の開放ができず、泣く泣く minecraft.mydomain:34567 みたいな宛先を身内に入力してもらっていた。
……なんかダサくて嫌だ。
「ルーターにOpenWrtを焼いたら25565ポート開けられるんじゃね?」
ということで、自宅のルーター(WSR-2533DHP3)をOpenWrt化し、サーバーマシンへ転送させることにした。
(※ちなみにWi-Fi APは別で用意しているので、このOpenWrtルーターは電波を吹いていない)
(本当はk3s環境で導入しているMetalLBがL2モードでちゃんと動かないから、ルーターにBGPを喋らせたかった。というのがOpenWrt化の8割位を占めていたりする。)

IPoEとの出会い、そして絶望

それからしばらくして、ふと気になった。
「21時以降、Steamのゲームダウンロード速度が10MB/sしか出ないの遅すぎないか?」
マイクラサーバーを動かしているk3sクラスタを組んだとき、LAN全体でIPv6を無効化したのがマズかったか?と思い有効化してみたが、効果なし。
契約しているBIGLOBE光についてちょっと調べてみると、どうやらこういうことらしい。

  • 世の中には「PPPoE」と「IPoE」って接続方式がある
  • 今うちで動いてるのはPPPoEで、IPoEの方が圧倒的に速い
  • IPv6オプションが有効ならIPoEが使える。というか普通はそっちを使うらしい
    「じゃあIPoE使おうぜ!!」とテンションが上がったのも束の間、IPoE(MAP-E)について調べると、サーバー公開には絶望的に向かないことが発覚した。
  • ポート制限環境に逆戻りする(自由にポートが開けられない)
  • IPv4アドレスを赤の他人と共有することになる
    身内向けとはいえ、マイクラサーバーをホストしている身としては死活問題である。今使ってるPPPoEならその辺何も気にせずやれてるのになぁ……。
    「せや! PPPoEとIPoE両方使えるようにして、マイクラサーバーだけPPPoE使わせたろ!」
    ということで、変態ルーティング構築の幕が開けた。

やりたいこと・構成

  • 目的: BIGLOBE光環境で、IPoE(MAP-E)とPPPoEを両方使えるようにOpenWrtを上手いこといじり倒す。身内からのマイクラアクセスだけPPPoEに流す。
  • ルーター: OpenWrt (WSR-2533DHP3)
  • マイクラサーバー: k3s上のコンテナ。Nginx IngressのMetalLB経由でLAN内に足を出している状態(BGP運用)。

手順

1. MAP-Eを生やす

実はMAP-E部分の設定はほとんど既出。先人たちに圧倒的感謝。
とりあえずパッケージを入れて再起動する。

opkg update
opkg install map
reboot

再起動後、以下の神記事の手順4から参考にさせてもらった。

NanoPi R2S+OpenWRT 21.02.0でBIGLOBEのMAP-E接続
https://blog.osakana.net/archives/11679

設定に使うパラメータは、自分のIPv6アドレス(/64までぜんぶ)を下のサイトに突っ込んで計算させれば一発で出てくる。

https://ipv4.web.fc2.com/map-e.html

これでインターフェース(map-wan_map)にグローバルIPv4アドレスが生えたらMAP-Eの設定はOK!

2. mwan3でよしなにやる(実は必須だった)

この記事を書きながら「今回のホストするだけのユースケースなら、mwan3要らなくてnetworkのmetric設定だけでいけたんじゃね?」と思った。
……が、試しにmwan3を止めてみたら外部からアクセス不可になった。
どうやらmwan3は、conntrackやらfwmarkやらを管理してくれていて、非対称ルーティングの防止に一役買っているらしい。ただのマルチWAN管理だと思っててゴメンな。
ということで大人しく設定する。

opkg install mwan3

インストールすると /etc/config/mwan3 が生えるので、こんな感じで設定した。
(ちなみにmetricは付けないとダメらしいので、IPoE側を優先させるために wan: 20, map-wan_map: 10 にしてある)

config globals 'globals'
        option mmx_mask '0x3F00'
        option local_source 'lan'

config interface 'wan'
        option enabled '1'
        list track_ip '1.0.0.1'
        list track_ip '1.1.1.1'
        list track_ip '8.8.8.8'
        list track_ip '8.8.4.4'
        option family 'ipv4'
        option reliability '2'

config interface 'wan_map'
        option enabled '1'
        list track_ip '1.0.0.1'
        list track_ip '1.1.1.1'
        list track_ip '208.67.222.222'
        list track_ip '208.67.220.220'
        option family 'ipv4'
        option reliability '1'

config member 'wan_m2_w10'
        option interface 'wan'
        option metric '2'
        option weight '10'

config member 'map_m1_w10'
        option interface 'wan_map'
        option metric '1'
        option weight '10'

config policy 'default_policy'
        list use_member 'map_m1_w10'
        list use_member 'wan_m2_w10'

config rule 'default_rule_v4'
        option dest_ip '0.0.0.0/0'
        option use_policy 'default_policy'
        option family 'ipv4'

3. MAP-E経由でICMPが返ってこない問題の修正

mwan3 statusを叩いたら、なぜかインターフェースがdownしていて気づいた。
どうやら map.sh が悪さをしてICMPが返ってこない問題があるらしい。マジかよ。
以下の記事を参考に、よく分からん人向けワンライナーを実行して粉砕した。

OpenWrtでフレッツ光&光コラボ IPoE(DS-Lite/MAP-E/IPIP)に繋ぐには【HGWも可】
https://qiita.com/kouhei-ioroi/items/cf0c6228c5c1faef415a

# cd /lib/netifd/proto && wget https://github.com/fakemanhk/openwrt-jp-ipoe/raw/main/map.sh.new && chmod 755 map.sh.new && mv map.sh.new map.sh && service network restart

4. MetalLB向けの通信がルーター内で迷子になる問題(最大の罠)

ここが一番ハマった。
PPPoEのIP宛てに飛んできたマイクラサーバーの通信が、どういうわけかルーター内で消滅している。
パケットの気持ちになって調べてみると、ルーター内でこんなアホみたいなコントが起きていた。

  1. WAN (PPPoE) からパケットが来る
  2. DNATで宛先がMetalLBのIPに書き換えられるに、mwan3によって「お前WANから来たな」というマーク(fwmark)を付けられる
  3. その後DNATされて、宛先がLAN内のMetalLB IPになる
  4. 経路検索のとき、マークが付いちゃってるせいでBGPで学習したmainテーブルではなく、mwan3管理のwan用テーブルを見に行ってしまう
  5. ルーター「あー、そんな宛先(MetalLBのIP)の経路、このテーブルにねえわ〜w」
  6. パケット、Uターンして消滅。ウケる。
    これを直すために、「LAN内(192.168.0.0/16)宛ての通信は問答無用で main テーブルを見ろ」というルールを追加してやった。
ip rule add to 192.168.0.0/16 lookup main pref 10

おわりに

これでようやくすべてが繋がり、Steamの爆速ダウンロード環境と、ダサくないポート番号でのマイクラサーバー公開を両立できた。
ここには書いてない試行錯誤が山のようにあったが、コアになる設定は多分これだけでいけるはず。
頑張れ、いつかルーターリプレースした時にもう一度これをやる未来の俺。

この記事、かなりふんわりというか、雰囲気で設定触ってるので、なにか間違いがあったら指摘いただけると助かります。ちゃんと理解するにはWAN側に抜けれなくなったりで時間が足りなかった。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?