NUROがダメになったので回線品質をモニタリングした
NUROにもかかわらず今まで問題なく耐えていた自宅サーバー仲間の友人宅がついにダメになったということで、みんなでモニタリングしてクソ回線を可視化してバトって遊ぶことになった
こういう場合監視ツール何にするかが問題となるのだが、全員Mackerelを使っていたのでそれを利用することに。雑にGitHubで "mackerel speedtest" で検索したところそれっぽいGolangのスクリプトが発見されたのでちょっといじって使えるようにした。
結果
見事にピークタイムになるとDownload速度が低下し、pingとjitterが暴れる様子が観測できた。今回の回線ではパケロスは検出せずでしたがこのjitterだとゲームにも向かなそう
こういう時に難しいのは観測先サーバーがボトルネックになっていないかという点なのですが、自分もNTTのIPoEでXpassなプロバイダから同じサーバーで試したところ無風だったのでやっぱNUROではないかという
その他
- MackerelはSlackにアラートを送れるのでクソ回線アラートでみんなでワイワイ盛り上がれる
- Mackerel無料だと1日分しかメトリクスを保存できなかったような気もするが遊びなのでOK
- ↑のレポジトリにあるやつをcronで叩けば投稿してくれるのでモニタリングして遊ぶと楽しいと思います
追記 一日分のグラフ出た。これはひどい
意識低める個人用Webアプリ開発 2022
今でもちょこちょこ色々自分用のなにかをつくるということは多く、時間もあるので色々と試してみたところナイスな手法が多く見つかったのでまとめておきます。
前提
自分が開発するやつはだいたい何かをスクレイピングして、そのデータをうまいこと集計したりしてHTMLとして見れるようにしたいというのがあります。 スクレイピングするのでサーバーが必須だし、cron的な定期バッチを実行できる必要があります。
またデータをためこんでそこにクエリを投げたい、できれば即時で結果を返してほしい。そのためふつうのRDBMSが都合がよい。DynamoやらFirestoreやらは集計とインデックスが貧弱であり、BigQueryなどはクエリ投げてから結果が出るまでがちょい遅い。
前提その2
自宅サーバーがある。今回のやつで上げるのはVPSとかでもいいんだが、フルマーネージドではないLinuxサーバーがある。
フルマネージドなサービスは増えていてFaaSやらGAEやらCloudRunやらあるわけですが、だいたいがHTTPサーバーをつくることしか考えておらず、Cronバッチ的な処理をしようとした瞬間に体験が最悪になります。いきなりピタゴラスイッチ的に複数サービスやらPub/Subやらを組み合わせろみたいな話になり、ベンダロックインなあれこれが必要になる。
開発マシン=本番環境にしてしまう
最初ローカルで開発して、サーバーでgit pullして環境を構築して…とやっていたんですが。よく考えれば本番を直接いじればいいことに気づきました。 どうせユーザーは自分だけであるし、debugモードもONで良い。
デプロイのコストがゼロになるというのは革命であり雑に開発していくモチベーションとなります。
問題は開発環境である。現代人はみんなIDEを使っていると思うのですがリモート環境でIDEを使うのは面倒で。X11リモートデスクトップとかしてもいいんだけどそれも体験が悪いしセットアップがたいへん。最初vimでがんばっていたが良い製品を思い出しました↓
JetBrains Gatewayを使う
JetBrains GatewayとはIntelliJとかを作ってるJetBrainsの新しいIDEというかGatewayでIDEのバックエンドをどこかローカルじゃないリモート環境で動かせるというもの。これによりsshごしとかdockerごしといった開発でのわずらわしさを解消できるがIDEの豊富な機能とUIはそのまま使えるという夢のようなものです。利用にはIntelliJとかRubyMineとかのライセンスが必要。
で、実際使ってみての感想ですが、まあ使えると言った感じです。当たり前ですがIDEでのタグジャンプやら補完やらは完璧に動作します。
ただ挙動が不安定なところが多くありました。つなぐところやPCをスタンバイから復帰させたときプラグインのインストールなど随所があやしい。ベータなのでしょうがないといえばそれまでですが。
それから動作が遅いです。起動がまず遅い。起動後も全体的にもっさりしています。LAN内サーバーにsshしていて別マシンへの接続としては考えうる限り最速なんですが…
その辺耐えられる人にはいいと思いますし、今後どんどん改善されていくと思います。自分も耐えることにしました。
GitHubのprivate repositoryを使う
昔はprivateにするためだけにBitbucketとか使ってたんですが今はGitHubでOKです。いいね
SQLiteを使う
Web開発でSQLiteとかおもちゃやろと思ってたんですが、よくかんがえたら自分しか使わないおもちゃ作ってるんだった。1台でしか動かさないならセットアップの手間がほぼゼロでバックアップとかもかんたん(ファイルコピーするだけ)。最高ですね。これでよかったんや
Jenkinsを高級Cronとして使う
ふつうのcronを使うというのは現代ではやめましょう。環境変数が変、正常終了したのか、エラー起きていたとしたらそのときのログどうするかなどなどあまりにも面倒すぎる。Jenkinsはめっちゃ古臭いツールですがその辺のログ管理や成功失敗判定や実行時間など全部を標準で記録してくれていて、なんと定期実行と同じ環境変数や手動で実行することもできます!!! Cronで3分後とかに指定して3分待って結果みるとかしなくていいわけです。
Jenkinsは有名なツールのためインストールも簡単でUbuntuだとaptのsourceを追加してapt installではいります。
Rundeckでもいいのかもしれないが試してないので知らん。
LinuxでDS-Lite (楽天ひかり)なルーターをつくる。IPv6, RAも疎通する版
楽天がちょっと前まで1年無料キャンペーンをしていたのでつられて楽天ひかりに乗り換えてしまいました。楽天はIPoEではアルテリア・ネットワークを利用しているため、前やったLinuxルーターの設定もやり直しです。やっていきましょう
v6で降ってくるIP変わった
プロバイダが変わったので当然ふってくるIPv6の/64レンジも変わります。ゴリゴリ書いてあったのでやりなおしです。残念。
Tunnelデバイスの管理をsystemd-networkdでやるのやめた
IPコマンドで追加する方が楽な気がしてきたのでやめました。
$ apt purge network-manager netplan.io ifupdown $ apt install radvd npdpp isc-dhcp-server $ cat /etc/systemd/network/10-enp2s0.network [Match] Name=enp2s0 [Network] LinkLocalAddressing=ipv6 Address=192.168.0.4/24 DHCP=no DNS=1.1.1.1 DNS=8.8.8.8 $ cat /etc/systemd/network/10-enx18ece795bb0b.network [Match] Name=enx18ece795bb0b [Link] RequiredForOnline=yes [Network] DNS=2606:4700:4700::1111 IPv6AcceptRA=yes DHCP=no Address=2001:f70:xxxx:xxxx:xxx:xxxx:xxxx:xxxx/64 $ cat /etc/radvd.conf interface enp2s0 { AdvSendAdvert on; prefix 2001:f70:xxxx:xxxx::/64 { AdvOnLink on; AdvAutonomous on; }; RDNSS 2606:4700:4700::1111 2001:4860:4860::8888 { }; }; $ cat /etc/ndppd.conf proxy enx18ece795bb0b { router no rule 2001:f70:xxxx:xxxx::/64 { iface enp2s0 } } $ cat /etc/sysctl.conf net.ipv6.conf.all.accept_ra = 1 net.ipv6.conf.enx18ece795bb0b.accept_ra = 2 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1 net.netfilter.nf_conntrack_tcp_timeout_established = 3600
$ cat router-xpass.sh #!/bin/sh set -ux RA_RANGE='2001:f70:xxxx:xxxx::/64' REMOTE='2001:f60:0:200::1:1' # dgw.xpass.jp LANDEV='enp2s0' WANDEV='enx18ece795bb0b' # udevadm info --export-db # USBで指したLANドングルが寝ないようにするやつ echo 'on' > /sys/bus/usb/devices/1-7/power/control # no way to config this from systemd-networkd https://github.com/systemd/systemd/issues/928 ip -6 r replace $RA_RANGE dev enp2s0 tab 1 ip -6 rule add from all tab 1 priority 1000 iptables -t filter -F iptables -t nat -F iptables -t mangle -F iptables -t mangle -A OUTPUT ! -s 127.0.0.0/8 -j MARK --set-mark 2 iptables -t nat -A POSTROUTING -m mark --mark 0x2 -j MASQUERADE ip -6 tunnel add ds-lite mode ipip6 remote $REMOTE local 2001:f70:xxxx:xxxx:xxx:xxxx:xxxx:xxxx encaplimit none dev $WANDEV ip link set dev ds-lite up ip route add default dev ds-lite
これでだいたい動くようになった。より難易度の高いMAP-EをやっていたのにDS-LiteとシンプルなNATについてはいまだによくわかっていなくて若干でこずったりもした。一番注意しないといけないのはここで
iptables -t mangle -A OUTPUT ! -s 127.0.0.0/8 -j MARK --set-mark 2 iptables -t nat -A POSTROUTING -m mark --mark 0x2 -j MASQUERADE
ローカルループバックアドレスは127.0.0.1以外も最近のsystemd-resolvedとかだと利用しているため、ここでフィルタリングしておかないとルーター内でのみDNSが解決できなかったりする。いまのところ127.0.0.0/8だが、もしかしたら他に除外しないといけないレンジが存在するかもしれない。問題出てきたら調べて直す所存
速度
問題ない。NTT回線自体が最近遅くなって下り200-300Mbpsくらいで頭打ちするようになってしまったためそのままです。 ちなみに楽天ひかりだとPPPoEもついてくるんですがそっちは夜8時くらいだと3Mbpsくらいになって激遅でした。
Linuxでv6プラス MAP-Eなルーターをつくる。IPv6, RAも疎通する版
ルーターで遊びたい欲が出てきており、適当なマシンを調達して遊ぶことになりました。 自分の家のルーター(IO DATA WN-AX2033GR)が微妙にIPoE環境だとフルスピードが出ないこと(だいたい200-300Mbpsが限界)や細かい設定ができない不満などがあり、いろいろ代替手段を物色していたんですがちょうどいいマシンを借りれたのでそれでやりました
よくある文献だとv6の設定まで詳しくは書いてなかったりするんですがv6のほうがカプセル化のオーバーヘッドがない分スループット高いはずだし、MAP-Eでセッション(ポート)枯渇することもないので使わない手はないはずなんですよね。
環境
- 光コラボ回線。NTTフレッツ光ネクスト相当
- DTI 光。 安いがIPoEが開通するとPPPoEが消滅する
- IPv4 over IPv6はJPNEのMAP-E
- おうちに光コンセントが生えているタイプ
- ひかり電話なし=HGWなし=RAの/64のほう。DHCPv6の/56ではない
ルーター選定
長い道のりがあった。要件としては
- 回線のスペックを生かしたいので1Gbpsフルで出ること
- いろいろ細かいところをいじって遊べること
- 常時運用して邪魔にならないサイズ
コストだけだと市販ルーターにOpenWrtを焼くのが最安なのだが、それだと1Gbps出ないらしい。ハードウェアオフローディングが前提だがOpenWrtだとその辺うまく扱えないとかいろいろな理由により最適化が進んでいないらしい。基本市販ルーターに乗っているチップはスループット要件的には全滅である。そんなこんなでこの辺が候補になった。
- Raspberry Pi 4 Model B 10000円くらい
- NanoPi R4S 8000円くらい
- Celeron J1900を積んだSBC 15000円くらい
価格はすべてケースやらアダプタやらいろいろ込みの概算。NanoPiが最安だがサポート体制もドキュメントもあんまりなさそうなのが難。RasPi 4は結構良いんじゃないかとおもう。Celeron JはいわゆるAtomベースのクアッドコアでx64が動作し互換性やらドライバやらなんやらで悩むことがほとんどないであろうことが約束されているのがうれしい。
とここまで調べたところで、友人がLattePandaを買っていたことを思い出した。Atom Cherry Trailのクアッドコアで性能十分だろうと借りたらLattePanda AlphaでCore m3でオーバースペックすぎるといううれしい誤算がありスタート。
UbuntuにするかOpenWrtにするか悩んだがとりあえずUbuntu Server 20.04でスタート。どっちがいいかは両方は試していないので謎。ルーター用じゃないディストロ使うとよくもわるくもルーターっぽい設定方法はできない
LANポートが1つしかなかったのでUSB 3.0-GbE変換をかった。これはなんでもいい。激安は主にRealtekかASIXらしいがx64 Ubuntuではどっちも無設定で動くし当然1Gbpsでる(OpenWRTの場合はどちらか見極めて別途ドライバインストールが必要らしい)
えらばなかったルーター
- 最近の市販WiFiブロードバンドルーター
最近のはv6やらv4 over v6やらもうまいことハードウェアオフローディングしたりしていてまあまあ高速らしい。完全にオーバーヘッドでなくなっているかは不明ですが手持ちのより速いことは間違いない。機能と安定性はバラバラだったり、JPNE 固定IPは対応していなかったり対応していてもなぜかポート開放できなかったりととにかく機能不足がすごい
- EdgeRouter X
手持ちで持っているがMAP-E非対応なのと単なるv4 over v6のカプセル化でもハードウェアオフローディングに対応できないのでCPUの能力不足で200-300Mbpsくらいしかでないということで除外
- YAMAHA NVR510
40000円也。富豪~。とはいえ自分がこうやって苦労したようなことが公式ドキュメントみながらササっとできるので金で時間と性能を買えるのはすごい
構成
IPv4, IPv6のデュアルスタックにしたい。したいんだがこれはつまり両方別に設定しつつたまに共通になったりあれこれする魔境である。めんどうったらありゃしない
IPv4
ルーターにDHCPv4サーバーを立ててやります
- LANのrangeは192.168.0.0/24
- ルーター=ゲートウェイのIPは他の固定IPがある都合で192.168.0.4
- nameserverは1.1.1.1とかを使います。自前管理しない
- ルーターでNATとv6カプセル化とMAPをやる
IPv6
ルーターはRAを中継するだけ。いわゆるL3スイッチに近い(けどちょっと追加で仕事する)
- radvdでRAを中継
- radvdで追加で設定できるのでnameserverも書いておく(1.1.1.1サービスのv6アドレスである2606:4700:4700::1111とか)
- RAのためのICMPv6をいい感じにするのにndppdとかいうやつもいれる
- DHCPv6は一切使わない
DEV (デバイス名)
ネットワーク周りではdevはdeviceの略称です。最初何?ってなった
- enp2s0: LAN側NIC
- enx18ece795bb0b: WAN側NIC
- ip6tnl0: 使うとうまく動作しない呪われたdev。勝手にできるしなんなのかわからない。ネット情報だとこの名前使ってるやつあるが使うとはまるのでやめましょう
- ipip6t0: ip4ip6トンネル。↑ではまったので名前変えたやつ
設定
設定はsystemd-networkdでやり、カバーできないところをipとiptablesでやりました。これがベストなのかは謎
apt purge network-manager netplan.io ifupdown
どっかで見かけてビビったんですがこれは初手としてやったほうがいいです。Ubuntuネットワーク管理するやつが多すぎてこいつらが勝手に動作するとわけわからなくなるのでpurgeは基本。systemd-networkd一本でいきましょう
apt install radvd npdpp isc-dhcp-server
$ cat /etc/systemd/network/10-enp2s0.network [Match] Name=enp2s0 [Network] LinkLocalAddressing=ipv6 Address=192.168.0.4/24 DHCP=no DNS=1.1.1.1 DNS=8.8.8.8 $ cat /etc/systemd/network/10-enx18ece795bb0b.network [Match] Name=enx18ece795bb0b [Link] RequiredForOnline=yes [Network] DNS=2606:4700:4700::1111 IPv6AcceptRA=yes DHCP=no Address=240b:10:xxxxxxxxxxxxxxx/64 Tunnel=ipip6t0 $ cat /etc/systemd/network/12-ipip6t0.network [Match] Name=ipip6t0 [Network] IPForward=ipv4 [Route] Destination=0.0.0.0/0 $ cat /etc/systemd/network/ipip6t0.netdev [NetDev] Name=ipip6t0 Kind=ip6tnl [Tunnel] Mode=ipip6 Local=240b:10:xxxxxxxxxxxxxxxxx Remote=2404:9200:225:100::64 DiscoverPathMTU=yes EncapsulationLimit=none $ cat /etc/radvd.conf interface enp2s0 { AdvSendAdvert on; prefix 240b:10:xxxxxxxxxxx::/64 { AdvOnLink on; AdvAutonomous on; }; RDNSS 2606:4700:4700::1111 2001:4860:4860::8888 { }; }; $ cat /etc/ndppd.conf proxy enx18ece795bb0b { router no rule 240b:10:xxxxxxxxxxx::/64 { iface enp2s0 } } $ cat /etc/dhcp/dhcpd.conf # default default-lease-time 600; max-lease-time 7200; ddns-update-style none; authoritative; subnet 192.168.0.0 netmask 255.255.255.0 { option routers 192.168.0.4; option domain-name-servers 1.1.1.1, 8.8.8.8; range 192.168.0.100 192.168.0.199; } $ cat /etc/sysctl.conf net.ipv6.conf.all.accept_ra = 1 net.ipv6.conf.enx18ece795bb0b.accept_ra = 2 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1 net.netfilter.nf_conntrack_tcp_timeout_established = 3600
設定は試行錯誤しながらやったのでなんか結構不要な設定が混じってそうな感がある。参考程度にお考えください。あとMAP-Eのアドレス計算はググってください。
以下はシェルスクリプト。systemdとかで起動時に自動設定されるようにしたほうがいいやつですね。まだやってない
#!/bin/sh set -ux # https://qiita.com/s_ponta/items/5652a7be49198288ae61 RA_RANGE='240b:10:xxxx:xxxx::/64' BR='2404:9200:225:100::64' CE='240b:10:xxxxxxxxxxxxxxxxxxx' IP4='xx.xx.xx.xx' PSID='xxx' LANDEV='enp2s0' WANDEV='enx18ece795bb0b' TUNDEV='ipip6t0' # udevadm info --export-db echo 'on' > /sys/bus/usb/devices/1-7/power/control # no way to config this from systemd-networkd https://github.com/systemd/systemd/issues/928 ip -6 r replace $RA_RANGE dev enp2s0 tab 1 ip -6 rule add from all tab 1 priority 1000 iptables -t filter -F iptables -t nat -F iptables -t mangle -F rule=1 while [ $rule -le 15 ] ; do mark=`expr $rule + 16` pn=`expr $rule - 1` portl=`expr $rule \* 4096 + $PSID \* 16` portr=`expr $portl + 15` iptables -t nat -A PREROUTING -m statistic --mode nth --every 15 --packet $pn -j MARK --set-mark $mark iptables -t nat -A OUTPUT -m statistic --mode nth --every 15 --packet $pn -j MARK --set-mark $mark iptables -t nat -A POSTROUTING -p icmp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr iptables -t nat -A POSTROUTING -p tcp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr iptables -t nat -A POSTROUTING -p udp -o $TUNDEV -m mark --mark $mark -j SNAT --to $IP4:$portl-$portr rule=`expr $rule + 1` done iptables -t mangle -o $TUNDEV --insert FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
いろんなサイトのコピペになってる
ip -6 r replace $RA_RANGE dev enp2s0 tab 1 ip -6 rule add from all tab 1 priority 1000
ここはちょっと大事でして、systemd-networkdだと現状こういうサブネット全体のmetric (ルーティング優先度、低いほうが優先される)を指定する方法がないのでRAなどでつけられたデフォルト優先度に負けないよう上書きしたい場合は手動でやる必要があります。この例だとこのsubnetは標準だとWAN側NICにアサインされてしまうのをLAN側NICに戻しています。このサブネットWAN側LAN側両方で使われているのがややこしいというかv6っぽいというか。しかし自分とこでレンジ切り出して再配布できるDHCPv6のほうがらくってのはよくわかりますね。NTT~。ということで最初はmetric変更したrouteを追加していたんですが上位概念としてtable/ruleというのがあるのでそっちで設定したほうが確実そうということでそれをやってます。priorityはtableのpriorityですね。標準のmainは32000くらい。
設定後はこうなる
$ ip -6 rule 0: from all lookup local 1000: from all lookup 1 32766: from all lookup main $ ip -6 route list tab 1 240b:10:8ac1:e800::/64 dev enp2s0 metric 1024 pref medium $ ip -6 route list tab main ::1 dev lo proto kernel metric 256 pref medium 240b:10:xxxxxxxxx::/64 dev enx18ece795bb0b proto kernel metric 256 pref medium 240b:10:xxxxxxxxx::/64 dev enx18ece795bb0b proto ra metric 1024 expires 2591640sec pref medium 240b:10:xxxxxxxxx::/64 dev enp2s0 proto ra metric 1024 expires 86177sec pref medium fe80::/64 dev ipip6t0 proto kernel metric 256 pref medium fe80::/64 dev enx18ece795bb0b proto kernel metric 256 pref medium fe80::/64 dev enp2s0 proto kernel metric 256 pref medium default via fe80::xxxx:xxxx:xxxx:xxxx dev enx18ece795bb0b proto ra metric 1024 expires 1440sec pref medium
余談ですがipもiptablesもv6とv4で別々に表示されるしv6はオプションつけないと表示されないから注意だ!
速度
適当にはかったとき、v4で600Mbpsくらいは出ている。いままでは200-300Mbpsが限度だったのでルーターの性能によるオーバーヘッドはほぼ消えたといっていいんじゃないだろうか
課題
- ↑で手動で設定したmetricがなにかのはずみに消えてしまうことがあり、謎。なくなるとv6は疎通しなくなるがv4は通じるので気づきにくかったり
- セキュリティー。ザルというか無設定なんですがどうなんだろう。v6アドレスの設定方法がどうなっているか調査したりとか、パケット解析してなんか弾くとかやったほうがいいのかね。でもv6では全部グローバルアドレスもっててincoming受け付けられるというのはまっとうなことでは
- UPnPとか。MAP-Eでどこまで対応する価値あるかはおいといてやりたいときに。可能なportであればできたほうがいい
次
- enひかりっていう光コラボのサービスがあるんですが、MAP-Eと固定IPオプションをつけると月3300+180+700=4180円でフルのv4アドレスを持つことができます。これで80やら443やらでサーバー公開できるね!!ということでそれをやりたいと思います。MAP-E + 固定IPオプションは実際にはJPNEの固定IPサービスになるのでごちゃごちゃやる必要があるMAP-EともおさらばできDS-Liteくらいの設定でいけますしセッションが増えた時のポート枯渇にも悩まされなくなります。よさそう!
- めちゃくちゃ高性能なやつでやってしまったのでどこまで低性能、低価格なルーターで同じスループット出せるかはチャレンジしてみたい。あと一分のチップは最近OpenWrtでハードウェアオフローディング対応したらしいので、市販ルーターのソフトウェアでやっているv4用のハードウェアオフローディングをv6で無理やり使えるようにするハックとかを自分でやるのはおもしろそう(大変そう)
参考文献
https://qiita.com/kakinaguru_zo/items/2764dd8e83e54a6605f2 https://qiita.com/s_ponta/items/5652a7be49198288ae61 https://quintrokk.subness.net/?p=2003 https://gato.intaa.net/archives/25972
IPoE回線で自宅サーバーを公開する
フレッツ光・光コラボをお使いの皆さん元気でしょうか!自宅に固定回線を引いている人の9割はNTTの回線を使っていてそのほとんどがIPoEを使うかもしくはPPPoEからIPoEへの移行を検討されているとおもいます。PPPoEは基本的に死んでいるので当然ですね。
さて回線導入やIPoE移行にあたって色々問題はあるのですが、自宅サーバーを運用している者としての最大の課題はIPv4で外部向けにPortを開放できないことではないでしょうか。DS-Liteでは全ポート、MAP-Eでは一部の割り当てられた番号しか利用できずそれもルーターによっては利用不可であったりします。自宅サーバーの場合は80, 443, その他の任意のポートを開放したいことが多いのでこれは困りますね。
以前私が書いた記事ではサーバーのみPPPoEを利用することでこの制限を回避していたのですが、諸事情で光コラボの事業者をSo-net光からDTI光に変更したところDTIはIPoEを疎通させるとPPPoEは自動で停止となる使用となっており併用ができなくなってしまいました。
これは困りました。当然IPv6であれば大量のIPを持って自由に公開できるのですが、v4はありません。対策として次の様な選択肢を検討しました。
- IPoE固定IPサービスを使う
- VPS、クラウドなどでReverse proxyを建ててIPv6経由で転送する
- VPS、クラウドなどでReverse proxyを建てて自宅サーバー側からトンネルを作成してそれ経由で転送する(リモートのサーバーがv4非対応の場合)
- Cloudflareを使う
1は検討したのですが、コストが高めであること、対応ルーターが限られることなどから見送りました。王道っぽいので月の+2~3000円追加で払える方は使ってもいいかもしれません。
- https://www.gaming-plus.net/price/
- https://www.interlink.or.jp/service/zootnative/price.html
- https://ipq.jp/plan/ipoe2/
自分は4のCloudflareを利用しています。CloudflareではReverse proxyが無料で利用でき、かつ試した結果向け先がアドレスがv4でもv6でも動作することがわかりました。
じっさいの画面はこんなかんじです。Nameserverを作成しドメインを登録します。その際にオレンジのアイコンをオンオフすることでProxyの有効無効が切り替えられます。更に驚くべきことにProxy有効の場合は勝手にAレコードとAAAAレコードを自動で作成してクライアントがv4しか使えない回線の場合にも対応してくれます。神!
レスポンスタイムなどはめちゃめちゃ速いという印象ではないのですが(流石にproxyなしの方が高速)自分の用途だと気にならないレベルです。
メンテコストがほぼゼロで快適です。v6だとIPがほぼ変化しないので(注: ルーターの設定による。自分の場合2個振られていて、あまりダイナミックに変化しない方を選びました。セキュリティー上の理由でルーター再起動などで変化するものもあります)DDNSなどの設定も省略できます。
無料ですしよかったら試してみるといいのではないでしょうか。