IPv6 VPS を立てる際に困ったことの一覧

日本国内で最安値の VPS は、[WebArena Indigo VPS](https://web.arena.ne.jp/indigo/price/) の1時間0.48円(税別)だと思われます。

この VPS、IPv6 しか利用できません。不特定多数の人々に使ってもらうならまだまだ IPv4 が必要かも知れませんが、ある程度限られた人に使ってもらう状況で IPv6 に限定しても良い場合はそこそこ使えます。

以下、WebArena Indigo VPS の最小 VPS (IPv6 のみ) を使う際にハマッた点、及び関連情報を覚書として記していきます。誰かの役に立てば幸いです。

# 環境・条件

* 2023年12月時点
* MS-Windows 11 から　Tera Term で接続 (Tera Term は 5.1 以上を推奨)
* Indigo VPS で CentOS Stream 9, RAM 768MB を選択
* CentOS Stream 9 導入時の kernel は 5.14.0-86.el9
* [MyDNS](https://www.mydns.jp/) で DNS 登録

# 別途 proxy server を立てるという方策

IPv6 server の根本的な課題は、IPv4 しか用意されていない他の servers に到達できないことです。

基本的な解決方法は、IPv6/IPv4 dualstack proxy server を立てることです。

「費用を安く済ませるために IPv6 VPS を借りたのに、別途2つ目の server を立てるとはどういうことか」という疑問が湧くかも知れませんが、この proxy server は最初の1～2時間だけ存在すればよいので費用が大幅に増えることはありません。(後日も時々必要になるかも知れませんが、そんなに頻度は高くないと思われます。)

私は[こちら](https://www.server-world.info/query?os=CentOS_Stream_9&p=squid&f=1)を参考にして IPv6/IPv4 VPS (RAM 1GB) に Squid server を立てました。踏み台にされないよう、`/etc/squid/squid.conf` の `acl my_localnet src` として自分の IPv6 server の IP address からのみ利用可能に制限してあります。

誤りを見つけましたらご指摘下さい。

# 個別の注意点

## Tera Term 上の注意点

* host として IPv6 address を指定する場合、`0000:1111:2222:3333:4444:5555:6666:7777` ではなく `[0000:1111:2222:3333:4444:5555:6666:7777]` と指定する必要がある

## epel 導入上の注意点

* 実は epel 配布元の https://dl.fedoraproject.org/ が IPv6 に対応していない ([こちらの説明](https://docs.fedoraproject.org/en-US/epel/#_quickstart)を鵜呑みにして作業すると行き詰る)
* しかし、通常は `dnf install epel-release` と入力するだけであり、mirrors が IPv6 に対応しているのか日本国内 (region:Tokyo) では無事に epel が使えるようになった (詳細は未確認)

## Let's Encrypt 導入上の注意点

* <del>Let's Encrypt 導入に用いられる Snappy について、snapd は起動できるものの、IPv6 だけだと `snap install certbot --classic` ができない (api.snapcraft.io が IPv6 に対応していないことについて[2017年に指摘されたまま放置されている](https://bugs.launchpad.net/snapstore-server/+bug/1710022))</del> [2025年2月19日には解決済み](https://bugs.launchpad.net/snapstore-server/+bug/1710022/comments/37)のようです。
* Snappy で proxy server を経由させる設定は[こちら](https://redj.hatenablog.com/entry/2020/07/24/224620)

## podman 利用上の注意点

RedHat 系では docker よりも podman が推奨されています。そこで `podman pull` で何かを引っ張ってこようとすると、以下の3つの servers が選択肢として表示されます。

* registry.access.redhat.com
* registry.redhat.io
* docker.io

この3つのうち IPv6 で到達可能なのは最後の docker.io だけです。

## kernel の update の注意点

CentOS Stream 9 導入時の kernel は 5.14.0-86.el9 ですが、`dnf update kernel` を実行すると 5.14.0-391.el9 まで上がりました (2023年12月時点)。

しかし、Linux Kernel は既に 6 系が出ており、Ubuntu などではそちらが使われています。

CentOS Stream で Linux Kernel 6 系を利用するには[こちら](https://elrepo.org/tiki/kernel-ml)に従います。(2023年12月現在、 6.6.8-1.el9。)

で、最初に elrepo-kernel というものを用意しないといけないのですが、それは[ここ](https://elrepo.org/linux/kernel/el9/x86_64/RPMS/)にあり、これが IPv6 では到達できません。

MS-Windows で download してから IPv6 VPS へ送り込んでもいいですし、curl や wget で proxy server を経由させてもよいと思います。

`dnf remove kernel` は実行できません (元の kernel は削除できません)。ですが、最後に install した kernel が有効になるようです。元の kernel に update が発生して kernel 5 系に戻された場合、`dnf reinstall kernel-ml` を実行することで再度 kernel 6 系にすることができるものと思われます。

## GitHub 利用上の注意点

実は github.com は [IPv6 に対応していません](https://github.com/orgs/community/discussions/10539)。

# IPv6 とは直接関係がない話

* Indigo VPS の instance 作成画面は RSA 鍵しか受け付けない (Ed25519 鍵など使いたい場合は SSH で入った後に自分で設定)
* RAM 768MB しかないため、長期間 `dnf update` していない状態で `dnf update` を実行すると RAM 不足で止まってしまい、2度と入れなくなった経験あり ([swap file を作成](https://stackoverflow.com/questions/20667761/composer-killed-while-updating)しておくことを推奨)
* MyDNS に無事登録されたかどうかの確認に `nslookup` を用いると、DNS cache server に negative cache が溜まって少々の間作業が中断することがあるので、[DNS は丁寧に確認する方が良い](https://www.e-ontap.com/dns/propagation/dig.html)
* 上記の確認のための dig.exe は [bind](https://www.isc.org/bind/) に含まれている ([Scoop](https://scoop.sh/) を利用しているなら `scoop install bind` の一発で導入できる)
* IPv6/IPv4 dualstack server は、[初期状態では IPv4 しか使えないことがある (わざわざ設定しないと IPv6 が使えないことがある)](https://help.arena.ne.jp/hc/ja/articles/7129639947927-IPv6%E3%82%92%E6%9C%89%E5%8A%B9%E5%8C%96%E3%81%99%E3%82%8B-CentOS%E7%B3%BB-)
* MyDNS を利用して IPv6/IPv4 どちらの IP addresses も登録している場合、上記の IPv6 有効化を忘れていると MyDNS が使えなくなる (domain name 問い合わせに応答しなくなる) ことがある