NUROがダメになったので回線品質をモニタリングした

NUROにもかかわらず今まで問題なく耐えていた自宅サーバー仲間の友人宅がついにダメになったということで、みんなでモニタリングしてクソ回線を可視化してバトって遊ぶことになった

こういう場合監視ツール何にするかが問題となるのだが、全員Mackerelを使っていたのでそれを利用することに。雑にGitHubで "mackerel speedtest" で検索したところそれっぽいGolangスクリプトが発見されたのでちょっといじって使えるようにした。

github.com

結果

見事にピークタイムになるとDownload速度が低下し、pingとjitterが暴れる様子が観測できた。今回の回線ではパケロスは検出せずでしたがこのjitterだとゲームにも向かなそう

こういう時に難しいのは観測先サーバーがボトルネックになっていないかという点なのですが、自分もNTTのIPoEでXpassなプロバイダから同じサーバーで試したところ無風だったのでやっぱNUROではないかという

その他

  • MackerelはSlackにアラートを送れるのでクソ回線アラートでみんなでワイワイ盛り上がれる
  • Mackerel無料だと1日分しかメトリクスを保存できなかったような気もするが遊びなのでOK
  • ↑のレポジトリにあるやつをcronで叩けば投稿してくれるのでモニタリングして遊ぶと楽しいと思います

追記 一日分のグラフ出た。これはひどい

どうやったらSREになれるのか

@rosylilly とSREやISUCONについて話しました。 SRE(インフラエンジニア)になるキャリアパスというものが昔とかなり異なってきていて、いまはどうなっているのか、どういった教育が必要なのかなどについて議論ができました。そういったことについて語る機会はなかなかなかったのでおもしろい話になったんじゃないかと

anchor.fm

メルカリを退職しました

5月末でメルカリを退職しました

前回の報告はあっさりしていたんですが、今回は結構ちゃんと語ってます。 というのもPodcastをやってみたい欲が出てきたところで、同じチームのメンバーだった友達も同時期に退職することになり、これ話したらおもろいんちゃうのということで録ってみたからです。

anchor.fm

よかったらきいてみてください

新しい会社の方はまだなにもわからないので落ち着いたらぼちぼち

意識低める個人用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というかGatewayIDEのバックエンドをどこかローカルじゃないリモート環境で動かせるというもの。これによりsshごしとかdockerごしといった開発でのわずらわしさを解消できるがIDEの豊富な機能とUIはそのまま使えるという夢のようなものです。利用にはIntelliJとかRubyMineとかのライセンスが必要。

www.jetbrains.com

で、実際使ってみての感想ですが、まあ使えると言った感じです。当たり前ですが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の場合はどちらか見極めて別途ドライバインストールが必要らしい)

えらばなかったルーター

最近のはv6やらv4 over v6やらもうまいことハードウェアオフローディングしたりしていてまあまあ高速らしい。完全にオーバーヘッドでなくなっているかは不明ですが手持ちのより速いことは間違いない。機能と安定性はバラバラだったり、JPNE 固定IPは対応していなかったり対応していてもなぜかポート開放できなかったりととにかく機能不足がすごい

  • EdgeRouter X

手持ちで持っているがMAP-E非対応なのと単なるv4 over v6のカプセル化でもハードウェアオフローディングに対応できないのでCPUの能力不足で200-300Mbpsくらいしかでないということで除外

40000円也。富豪~。とはいえ自分がこうやって苦労したようなことが公式ドキュメントみながらササっとできるので金で時間と性能を買えるのはすごい

構成

IPv4, IPv6のデュアルスタックにしたい。したいんだがこれはつまり両方別に設定しつつたまに共通になったりあれこれする魔境である。めんどうったらありゃしない

IPv4

ルーターにDHCPv4サーバーを立ててやります

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が限度だったのでルーターの性能によるオーバーヘッドはほぼ消えたといっていいんじゃないだろうか f:id:yayugu:20210217012511p:plain

課題

  • ↑で手動で設定した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は自動で停止となる使用となっており併用ができなくなってしまいました。

vector.hateblo.jp

これは困りました。当然IPv6であれば大量のIPを持って自由に公開できるのですが、v4はありません。対策として次の様な選択肢を検討しました。

  1. IPoE固定IPサービスを使う
  2. VPSクラウドなどでReverse proxyを建ててIPv6経由で転送する
  3. VPSクラウドなどでReverse proxyを建てて自宅サーバー側からトンネルを作成してそれ経由で転送する(リモートのサーバーがv4非対応の場合)
  4. Cloudflareを使う

1は検討したのですが、コストが高めであること、対応ルーターが限られることなどから見送りました。王道っぽいので月の+2~3000円追加で払える方は使ってもいいかもしれません。

自分は4のCloudflareを利用しています。CloudflareではReverse proxyが無料で利用でき、かつ試した結果向け先がアドレスがv4でもv6でも動作することがわかりました。

f:id:yayugu:20201225230137p:plain

じっさいの画面はこんなかんじです。Nameserverを作成しドメインを登録します。その際にオレンジのアイコンをオンオフすることでProxyの有効無効が切り替えられます。更に驚くべきことにProxy有効の場合は勝手にAレコードとAAAAレコードを自動で作成してクライアントがv4しか使えない回線の場合にも対応してくれます。神!

レスポンスタイムなどはめちゃめちゃ速いという印象ではないのですが(流石にproxyなしの方が高速)自分の用途だと気にならないレベルです。

メンテコストがほぼゼロで快適です。v6だとIPがほぼ変化しないので(注: ルーターの設定による。自分の場合2個振られていて、あまりダイナミックに変化しない方を選びました。セキュリティー上の理由でルーター再起動などで変化するものもあります)DDNSなどの設定も省略できます。

無料ですしよかったら試してみるといいのではないでしょうか。