diff --git a/ass/kanrinya.jpg b/ass/kanrinya.jpg
new file mode 100644
index 0000000..1bc71b7
Binary files /dev/null and b/ass/kanrinya.jpg differ
diff --git a/gemini/blog.atom b/gemini/blog.atom
index 84906a8..105fb83 100644
--- a/gemini/blog.atom
+++ b/gemini/blog.atom
@@ -3,13 +3,461 @@
gemini://technicalsuwako.moe
テクニカル諏訪子
- 2023-06-23T19:20:00Z
+ 2023-07-03T00:00:00Z
テクニカル諏訪子
+
+ blog/digital-autonomy-with-wireguard-home-host.gmi
+ 凛
+ 【デジタル自主】自宅サーバーからWireGuardを使ったホスティング方法
+ 2023-07-03T00:00:00Z
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<p>WireGuardは非常に便利ですね。<br />
+自宅からウェブサイトをホスティングしたり、どこからでも自宅のサーバーやパソコンにアクセスしたりといった事が可能です。<br />
+今回はウェブホスティングの方法についてお伝えします。</p>
+<h2 id="heading">材料</h2>
+<p>食べ物じゃないけど(ジョーダンダヨー)、必要な物は下記で御座います。</p>
+<ul>
+<li>好みのVPSホスティング会社から最も安いVPS(日本のOpenBSDサーバーはオススメ、ConoHaまたはVultrは良い)</li>
+<li>自宅にあるサーバー(1台でも複数台でも可)</li>
+<li>高速光回線インターネット接続</li>
+</ul>
+<p>静的IPは不要です。<br />
+動的IPでも問題がありません。</p>
+<p>OS等は何でも良いですが、この記事ではVPSはConoHaのOpenBSDで、自宅サーバーは2台のThinkCentreとOpenBSD、及びNECとFreeBSDを使用しています。<br />
+また、どこへでも持ち運べるThinkPad(Artix)というノートパソコンも用いています。<br />
+FreeBSDでPeerTubeをインストールし、URLロリはOpenBSDで行い、さまざまな静的なホームページはOpenBSDで実行しています。<br />
+インターネット接続サービスは何でも良いですが、高速光回線インターネット接続が推奨されます。</p>
+<h2 id="wireguard">WireGuardのインストール</h2>
+<table>
+<thead>
+<tr>
+<th>OpenBSD</th>
+<th>FreeBSD</th>
+<th>Artix (runitの場合)</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>doas pkg_add wireguard-tools</td>
+<td>sudo pkg install wireguard-tools</td>
+<td>sudo pacman -S wireguard-tools wireguard-runit</td>
+</tr>
+</tbody>
+</table>
+<p>Artixの場合、インストール後に再起動が必要な場合があります。<br />
+インストールしたlinux-kernelのバージョンが現在実行中のバージョンと異なると、WireGuardが起動出来なくなります。</p>
+<h2 id="wireguard-1">WireGuardの設定</h2>
+<h3 id="vps">VPS側</h3>
+<pre><code lang="">doas su
+mkdir /etc/wireguard
+chmod <span style="color:#666">600</span> /etc/wireguard
+<span style="color:#a2f">cd</span> /etc/wireguard
+wg genkey | tee private.key | wg pubkey > public.key
+
+nvim wg0.conf
+</code></pre><pre><code lang="">[Interface]
+Address = 192.168.10.1/24
+PrivateKey = (VPSのprivate.keyの内容)
+ListenPort = 51820
+
+[Peer]
+PublicKey = (ThinkPadのpublic.keyの内容)
+PreSharedKey = (ThinkPadのpreshared.keyの内容)
+AllowedIPs = 192.168.10.100/32
+PersistentKeepalive = 25
+
+[Peer]
+PublicKey = (ThinkCentreのpublic.keyの内容)
+PreSharedKey = (ThinkCentreのpreshared.keyの内容)
+AllowedIPs = 192.168.10.101/32
+PersistentKeepalive = 25
+
+[Peer]
+PublicKey = (NECのpublic.keyの内容)
+PreSharedKey = (NECのpreshared.keyの内容)
+AllowedIPs = 192.168.10.102/32
+PersistentKeepalive = 25
+</code></pre><pre><code lang="">nvim /etc/pf.conf
+</code></pre><pre><code lang="">set skip on lo
+exsrv1 = (VPSのIPアドレス)
+insrv1 = 192.168.10.101
+insrv2 = 192.168.10.102
+insrv3 = 192.168.10.103
+
+block return
+pass
+
+pass in on wg0
+pass in inet proto udp from any to any port 51820
+
+# PeerTube
+pass in inet proto udp from any to $insrv2 port 9000
+pass in on egress proto tcp from any to $insrv2 port {1935, 1936} rdr-to $insrv2
+
+# URLロリ
+pass in inet proto udp from any to $insrv1 port 9910
+
+# Gemini
+pass in on egress proto tcp from any to $insrv3 port { 1965 } rdr-to $insrv3
+
+# HTML
+pass out on egress inet from (wg0:network) nat-to (vio0:0)
+
+# SSHはWireGuardネットワーク内のみ許可する
+pass in on wg0 proto tcp from 192.168.10.0/24 to any port 22
+block in on egress proto tcp from any to any port 22
+...
+</code></pre><pre><code lang="">pfctl -f /etc/pf.conf
+</code></pre><p>最高レベルのセキュリティを保つ為に:</p>
+<pre><code lang="">nvim /etc/ssh/sshd_config
+</code></pre><pre><code lang="">...
+AllowUsers (貴方のユーザー名)@192.168.10.0/24
+PermitRootLogin no
+AuthorizedKeysFile .ssh/authorized_keys
+PasswordAuthentication no
+...
+</code></pre><pre><code lang=""><span style="color:#a2f">exit</span>
+ssh-keygen -t ed25519
+<span style="color:#666">(</span>最後までそのままEnterキーを押して<span style="color:#666">)</span>
+cat ~/.ssh/id_ed25519.pub
+</code></pre><p>出力内容をコピーし、各サーバーとノートパソコンの「~/.ssh/authorized_keys」ファイルに貼り付けて下さい。<br />
+次に、上記のステップを各サーバー及びノートパソコンで実行し、その結果をVPSの「/.ssh/authorized_keys」ファイルに貼り付けて下さい。</p>
+<pre><code lang="">doas rcctl restart sshd
+wg-quick up wg0
+</code></pre><h3 id="heading-1">自宅サーバーとノートパソコンの設定</h3>
+<p>各デバイスの設定は基本的に同じです。</p>
+<pre><code lang="">doas su
+mkdir /etc/wireguard
+chmod <span style="color:#666">600</span> /etc/wireguard
+<span style="color:#a2f">cd</span> /etc/wireguard
+wg genkey | tee private.key | wg pubkey > public.key
+wg genpsk > preshared.key
+
+nvim wg0.conf
+</code></pre><pre><code lang="">[Interface]
+PrivateKey = (現在のデバイスのprivate.keyの内容)
+Address = 192.168.10.10x/24
+
+[Peer]
+PublicKey = (VPSのpublic.keyの内容)
+PreSharedKey = (現在のデバイスのpreshared.keyの内容)
+Endpoint = (VPSの公開IPアドレス):51820
+AllowedIPs = 192.168.10.0/24
+PersistentKeepalive = 25
+</code></pre><p>Address部分の「x」は、各サーバーで設定した通りです。<br />
+この記事では、Artix=0、OpenBSD=1、FreeBSD=2となります。</p>
+<h4 id="openbsd">OpenBSDサーバー</h4>
+<pre><code lang=""><span style="color:#a2f">cd</span>
+wget https://lab.abiscuola.org/gmnxd/tarball/v1.2.0/gmnxd-v1.2.0.tar.gz
+tar zxfv gmnxd-v1.2.0.tar.gz
+<span style="color:#a2f">cd</span> gmnxd-v1.2.0/src
+make
+make install
+<span style="color:#a2f">cd</span>
+useradd -g <span style="color:#b44">'=uid'</span> -L daemon -s /sbin/nologin -c <span style="color:#b44">'Gmnxd user'</span> -d /var/gemini _gmnxd
+chown -R _gmnxd:_gmnxd /var/gemini
+nvim /etc/inetd.conf
+</code></pre><pre><code lang="">0.0.0.0:11965 stream tcp nowait _gmnxd /usr/local/libexec/gmnxd gmnxd
+</code></pre><pre><code lang="">rcctl <span style="color:#a2f">enable</span> inetd
+rcctl start inetd
+nvim /etc/pf.conf
+</code></pre><pre><code lang="">set skip on lo
+
+block return
+pass
+
+# HTTP
+pass in inet proto tcp from any to (self) port {80, 443}
+
+# URLロリ
+pass in inet proto tcp from any to (self) port 9910
+
+# Gemini
+pass in inet proto tcp from any to (self) port 11965
+...
+anchor "relayd/*"
+</code></pre><pre><code lang="">pfctl -f /etc/pf.conf
+wg-quick up wg0
+mkdir -p /var/www/htdocs/<span style="color:#666">{</span>076,minmi<span style="color:#666">}</span>.moe/www
+mkdir -p /var/gemini/076.moe
+<span style="color:#a2f">echo</span> <span style="color:#b44">"わーい"</span> >> /var/www/htdocs/<span style="color:#666">{</span>076,minmi<span style="color:#666">}</span>.moe/www/index.html
+<span style="color:#a2f">echo</span> <span style="color:#b44">"わーい"</span> >> /var/gemini/076.moe/index.gmi
+nvim /etc/httpd.conf
+</code></pre><pre><code lang="">eth_addr=192.168.0.103 # 自宅のルーターで設定した固定IPアドレス
+wg0_addr=192.168.10.103 # WireGuardで設定したIPアドレス
+
+## 076.moe
+server "076.moe" {
+ listen on $wg0_addr port 8080
+ root "/htdocs/076.moe/www"
+ directory index "index.html"
+ location "/repo/*" {
+ directory auto index
+ }
+ location "/.well-known/acme-challenge/*" {
+ root "/acme"
+ request strip 2
+ }
+}
+
+server "l3nbzyxgrkmd46nacmzf2sy6tpjrwh4iv3pgacbrbk72wcgxq5a.b32.i2p" {
+ listen on $eth_addr port 8450
+ root "/htdocs/076.moe/www"
+ directory index "index.html"
+ location "/repo/*" {
+ directory auto index
+ }
+}
+
+server "7dt6irsmfvbrtgn4nuah56kky6mvr472fbwwaltuxpf26qdqkdhfvnqd.onion" {
+ listen on $eth_addr port 8500
+ root "/htdocs/076.moe/www"
+ directory index "index.html"
+ location "/repo/*" {
+ directory auto index
+ }
+}
+
+## minmi.moe
+server "minmi.moe" {
+ listen on $wg0_addr port 8087
+ root "/htdocs/minmi.moe/www"
+ directory index "index.html"
+ location "/.well-known/acme-challenge/*" {
+ root "/acme"
+ request strip 2
+ }
+}
+</code></pre><pre><code lang="">mkdir -p /var/www/htdocs/urlo.li
+<span style="color:#a2f">cd</span> /var/www/htdocs/urlo.li
+git clone https://gitler.moe/suwako/urloli.git .
+nvim Makefile
+</code></pre><p>一部編集は必要となります。</p>
+<pre><code lang=""># Linux、Cruxの場合は必須。他のディストリビューションはどうでも良い
+#PREFIX=/usr
+# FreeBSDとOpenBSD
+PREFIX=/usr/local
+</code></pre><pre><code lang="">rcctl <span style="color:#a2f">enable</span> httpd
+rcctl start httpd
+make
+make install
+nvim /etc/urloli/config.json
+</code></pre><pre><code lang="">{
+ "domain": "https://(ドメイン名)",
+ "webpath": "/var/www/htdocs/urlo.li"
+}
+</code></pre><h4 id="freebsd">FreeBSDサーバー</h4>
+<p>公式ガイドに従って、nginxとcertbotをインストールが必要とされていますが、今回の場合は不要です。</p>
+<pre><code lang="">wg-quick up wg0
+pkg install -y sudo bash wget git python pkgconf postgresql13-server postgresql13-contrib redis openssl node npm yarn ffmpeg unzip
+visudo
+</code></pre><pre><code lang="">%wheel ALL=(ALL) ALL
+</code></pre><pre><code lang="">sysrc <span style="color:#b8860b">postgresql_enable</span><span style="color:#666">=</span><span style="color:#b44">"YES"</span>
+sysrc <span style="color:#b8860b">redis_enable</span><span style="color:#666">=</span><span style="color:#b44">"YES"</span>
+sysrc <span style="color:#b8860b">nginx_enable</span><span style="color:#666">=</span><span style="color:#b44">"YES"</span>
+
+sudo pw useradd -n peertube -d /var/www/peertube -s /usr/local/bin/bash -m
+sudo passwd peertube
+<span style="color:#a2f">cd</span> /var/www/peertube
+sudo -u postgres createuser -P peertube
+sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod
+sudo -u postgres psql -c <span style="color:#b44">"CREATE EXTENSION pg_trgm;"</span> peertube_prod
+sudo -u postgres psql -c <span style="color:#b44">"CREATE EXTENSION unaccent;"</span> peertube_prod
+<span style="color:#b8860b">VERSION</span><span style="color:#666">=</span><span style="color:#a2f;font-weight:bold">$(</span>curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d <span style="color:#b44">'"'</span> -f 4<span style="color:#a2f;font-weight:bold">)</span> <span style="color:#666">&&</span> <span style="color:#a2f">echo</span> <span style="color:#b44">"Latest Peertube version is </span><span style="color:#b8860b">$VERSION</span><span style="color:#b44">"</span>
+<span style="color:#a2f">cd</span> /var/www/peertube
+sudo -u peertube mkdir config storage versions
+sudo -u peertube chmod <span style="color:#666">750</span> config/
+<span style="color:#a2f">cd</span> /var/www/peertube/versions
+sudo -u peertube wget -q <span style="color:#b44">"https://github.com/Chocobozzz/PeerTube/releases/download/</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">/peertube-</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">.zip"</span>
+sudo -u peertube unzip -q peertube-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span>.zip <span style="color:#666">&&</span> sudo -u peertube rm peertube-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span>.zip
+<span style="color:#a2f">cd</span> /var/www/peertube
+sudo -u peertube ln -s versions/peertube-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span> ./peertube-latest
+<span style="color:#a2f">cd</span> ./peertube-latest <span style="color:#666">&&</span> sudo -H -u peertube yarn install --production --pure-lockfile
+<span style="color:#a2f">cd</span> /var/www/peertube
+sudo -u peertube cp peertube-latest/config/default.yaml config/default.yaml
+<span style="color:#a2f">cd</span> /var/www/peertube
+sudo -u peertube cp peertube-latest/config/production.yaml.example config/production.yaml
+nvim config/production.yaml
+</code></pre><pre><code lang="">listen:
+ hostname: '0.0.0.0'
+ port: 9000
+
+webserver:
+ https: true
+ hostname: '(ドメイン名)'
+ port: 443
+...
+</code></pre><pre><code lang="">sudo install -m <span style="color:#666">0555</span> /var/www/peertube/peertube-latest/support/freebsd/peertube /usr/local/etc/rc.d/
+sudo sysrc <span style="color:#b8860b">peertube_enable</span><span style="color:#666">=</span><span style="color:#b44">"YES"</span>
+sudo service peertube start
+</code></pre><h4 id="artix">Artixノートパソコン</h4>
+<pre><code lang="">wg-quick up wg0
+</code></pre><h3 id="vps-1">再度、VPSの設定</h3>
+<pre><code lang="">nvim /etc/acme-client.conf
+</code></pre><pre><code lang="">authority letsencrypt {
+ api url "https://acme-v02.api.letsencrypt.org/directory"
+ account key "/etc/acme/letsencrypt-privkey.pem"
+}
+
+domain 076.moe {
+ alternative names { www.076.moe }
+ domain key "/etc/ssl/private/076.moe.key"
+ domain full chain certificate "/etc/ssl/076.moe.crt"
+ sign with letsencrypt
+}
+
+domain video.076.moe {
+ domain key "/etc/ssl/private/video.076.moe.key"
+ domain full chain certificate "/etc/ssl/video.076.moe.crt"
+ sign with letsencrypt
+}
+
+domain urlo.li {
+ domain key "/etc/ssl/private/urlo.li.key"
+ domain full chain certificate "/etc/ssl/urlo.li.crt"
+ sign with letsencrypt
+}
+
+domain minmi.moe {
+ domain key "/etc/ssl/private/minmi.moe.key"
+ domain full chain certificate "/etc/ssl/minmi.moe.crt"
+ sign with letsencrypt
+}
+</code></pre><pre><code lang="">nvim /etc/relayd.conf
+</code></pre><pre><code lang="">relayd_addr="0.0.0.0"
+insrv1_addr="192.168.10.101"
+insrv2_addr="192.168.10.102"
+
+table <home> { $insrv1_addr }
+table <urloli> { $insrv1_addr }
+table <minmi> { $insrv1_addr }
+
+table <video> { $insrv2_addr }
+
+http protocol reverse {
+ tcp { nodelay, sack }
+ tls ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
+ tls keypair "076.moe"
+ tls keypair "video.076.moe"
+ tls keypair "urlo.li"
+ tls keypair "minmi.moe"
+
+ match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
+ match request header append "X-Forwarded-Port" value "$REMOTE_PORT"
+
+ match response header set "Referrer-Policy" value "same-origin"
+ match response header set "X-Frame-Options" value "deny"
+ match response header set "X-XSS-Protection" value "1; mode=block"
+ match response header set "X-Content-Type-Options" value "nosniff"
+ match response header set "Strict-Transport-Security" value "max-age=31536000; includeSubDomains; preload"
+ match response header set "Cache-Control" value "max-age=86400"
+
+ pass request quick header "Host" value "076.moe" forward to <home>
+ pass request quick header "Host" value "www.076.moe" forward to <home>
+ pass request quick header "Host" value "video.076.moe" forward to <video>
+ pass request quick header "Host" value "urlo.li" forward to <urloli>
+ pass request quick header "Host" value "minmi.moe" forward to <minmi>
+ return error
+ pass
+}
+
+http protocol reverse80 {
+ match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
+ match request header append "X-Forwarded-Port" value "$REMOTE_PORT"
+
+ match response header set "Referrer-Policy" value "same-origin"
+ match response header set "X-Frame-Options" value "deny"
+ match response header set "X-XSS-Protection" value "1; mode=block"
+ match response header set "X-Content-Type-Options" value "nosniff"
+ match response header set "Strict-Transport-Security" value "max-age=31536000; includeSubDomains; preload"
+ match response header set "Cache-Control" value "max-age=86400"
+
+ pass request quick header "Host" value "076.moe" forward to <home>
+ pass request quick header "Host" value "www.076.moe" forward to <home>
+ pass request quick header "Host" value "video.076.moe" forward to <video>
+ pass request quick header "Host" value "urlo.li" forward to <urloli>
+ pass request quick header "Host" value "minmi.moe" forward to <minmi>
+ return error
+ pass
+}
+
+protocol gemini {
+ tcp { nodelay, sack }
+ tls ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
+ tls keypair "076.moe"
+}
+
+relay www_tls {
+ listen on $relayd_addr port 443 tls
+ protocol reverse
+
+ forward to <video> port 9000 check tcp
+
+ forward to <home> port 8080 check tcp
+ forward to <urloli> port 9910 check tcp
+ forward to <minmi> port 8087 check tcp
+}
+
+relay www_http {
+ listen on $relayd_addr port 80
+ protocol reverse80
+
+ forward to <video> port 9000 check tcp
+
+ forward to <home> port 8080 check tcp
+ forward to <urloli> port 9910 check tcp
+ forward to <minmi> port 8087 check tcp
+}
+
+relay gemini {
+ listen on $relayd_addr port 1965 tls
+ protocol gemini
+
+ forward to <home> check tcp port 11965
+}
+</code></pre><pre><code lang="">rcctl <span style="color:#a2f">enable</span> relayd
+rcctl start relayd
+
+acme-client -v 076.moe
+acme-client -v video.076.moe
+acme-client -v urlo.li
+acme-client -v minmi.moe
+</code></pre><p><img src="https://ass.technicalsuwako.moe/kanrinya.jpg" alt="" /></p>
+<p>ねぇー!簡単でしょー!</p>
+<p>以上</p>
+
+
+
+
+
blog/hozonsite-100.gmi
凛
@@ -189,89 +637,5 @@ Yahooでスパイウェアが多すぎるため、CLI用のフロントエンド
-
- blog/neko-sampo.gmi
- 凛
- 【ペット】猫との散歩をトレーニング方法
- 2023-06-18T00:00:00Z
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<p>本ブログはテクノロジー専門ですが、青猫ちゃんと一緒に散歩する様子に興味を示す方が多くいらっしゃいます。<br />
-今回は愛猫ちゃんと散歩する方法についてご紹介します。<br />
-青猫ちゃんはあたしの愛猫ちゃんです。</p>
-<h2 id="heading">猫との散歩のメリット</h2>
-<p>猫との散歩には多くのメリットがあります。</p>
-<ul>
-<li>家で猫がおとなしくなる</li>
-<li>猫が知らない人に慣れやすくなる</li>
-<li>散歩しながら新たな友達を作りやすくなる</li>
-<li>猫とより深く絆を深める</li>
-</ul>
-<h2 id="heading-1">トイレとトラブルの心配なし</h2>
-<p>猫は犬とは異なり、数時間外に出ていても、家に帰るまでトイレやトラブルはしません。</p>
-<h2 id="heading-2">必要なもの</h2>
-<ul>
-<li>2種類のトリーツ(おやつ):ペットが好むものをオススメします。</li>
-<li>脱げないハーネス</li>
-<li>リード</li>
-<li>ペットキャリアーバッグ</li>
-</ul>
-<h2 id="heading-3">トリーツ</h2>
-<p>目的は、ハーネスの装着と散歩に慣れる事です。<br />
-その為、評価の高いトリーツをあげる事をおすすめします。<br />
-同じ種類でも大丈夫ですが、2種類あった方がより効果的です。<br />
-青猫ちゃんの場合はこちら:</p>
-<p><img src="https://ass.technicalsuwako.moe/aoneko0.jpg" alt="" /></p>
-<p>左はハーネスを装着後にあげます。<br />
-右は散歩から帰ったらあげます。</p>
-<h2 id="heading-4">脱けないハーネス</h2>
-<p>サイズ選びは非常に重要です。<br />
-小さすぎると動きにくくなりますし、大きすぎると脱げやすくなります。<br />
-ハーネスを装着したら、2本指が入る程度がちょうどよいです。</p>
-<h2 id="heading-5">リード</h2>
-<p>長めのリードをおすすめします。<br />
-10メートル以上が良いと思います。<br />
-その理由は後ほど説明します。</p>
-<h2 id="heading-6">ペットキャリアーバッグ</h2>
-<p>必須ではありませんが、キャリアーバッグがあればドアダッシュを覚える事はありません。<br />
-あたしのやり方は以下の通りです:</p>
-<ol>
-<li>ハーネスを装着する</li>
-<li>第1のトリーツをあげる</li>
-<li>キャリアーバッグに入れる</li>
-<li>公園に連れて行く</li>
-<li>キャリアーバッグから出す</li>
-<li>リードを装着する</li>
-<li>散歩を開始する</li>
-<li>散歩が終わったら、リードを外し、バッグに戻す</li>
-<li>自宅に帰ったら、バッグから出し、ハーネスを外し、第2のトリーツをあげる</li>
-</ol>
-<h2 id="heading-7">猫≠犬</h2>
-<p>猫は犬とは異なる為、散歩の方法も異なります。<br />
-犬は気にせずずっと歩きますが、猫は常に周囲を注意深く観察します。<br />
-猫の場合、歩く→止まる→観察→歩く→止まる→観察というパターンが一般的です。</p>
-<h2 id="heading-8">青猫ちゃんとの散歩の写真</h2>
-<p><img src="https://ass.technicalsuwako.moe/aoneko1.jpg" alt="" />
-<img src="https://ass.technicalsuwako.moe/aoneko2.jpg" alt="" />
-<img src="https://ass.technicalsuwako.moe/aoneko3.jpg" alt="" />
-<img src="https://ass.technicalsuwako.moe/aoneko4.jpg" alt="" /></p>
-<p>以上</p>
-
-
-
-
-
diff --git a/gemini/blog.gmi b/gemini/blog.gmi
index a04078f..c108b95 100644
--- a/gemini/blog.gmi
+++ b/gemini/blog.gmi
@@ -2,6 +2,7 @@
# 記事一覧
+=> /blog/digital-autonomy-with-wireguard-home-host.gmi 2023年07月03日 【デジタル自主】自宅サーバーからWireGuardを使ったホスティング方法
=> /blog/hozonsite-100.gmi 2023年06月23日 【076】保存サイト 1.0.0登場
=> /blog/norikae-101.gmi 2023年06月23日 【076】乗換 1.0.1登場
=> /blog/rofi-youtube-101.gmi 2023年06月23日 【076】rofi-youtube 1.0.1登場
diff --git a/gemini/blog/digital-autonomy-with-wireguard-home-host.gmi b/gemini/blog/digital-autonomy-with-wireguard-home-host.gmi
new file mode 100644
index 0000000..ce54b0a
--- /dev/null
+++ b/gemini/blog/digital-autonomy-with-wireguard-home-host.gmi
@@ -0,0 +1,519 @@
+=> /blog.gmi ブログ一覧へ
+
+#【デジタル自主】自宅サーバーからWireGuardを使ったホスティング方法
+投稿日:2023-07-03
+
+WireGuardは非常に便利ですね。
+自宅からウェブサイトをホスティングしたり、どこからでも自宅のサーバーやパソコンにアクセスしたりといった事が可能です。
+今回はウェブホスティングの方法についてお伝えします。
+
+## 材料
+食べ物じゃないけど(ジョーダンダヨー)、必要な物は下記で御座います。
+
+* 好みのVPSホスティング会社から最も安いVPS(日本のOpenBSDサーバーはオススメ、ConoHaまたはVultrは良い)
+* 自宅にあるサーバー(1台でも複数台でも可)
+* 高速光回線インターネット接続
+
+静的IPは不要です。
+動的IPでも問題がありません。
+
+OS等は何でも良いですが、この記事ではVPSはConoHaのOpenBSDで、自宅サーバーは2台のThinkCentreとOpenBSD、及びNECとFreeBSDを使用しています。
+また、どこへでも持ち運べるThinkPad(Artix)というノートパソコンも用いています。
+FreeBSDでPeerTubeをインストールし、URLロリはOpenBSDで行い、さまざまな静的なホームページはOpenBSDで実行しています。
+インターネット接続サービスは何でも良いですが、高速光回線インターネット接続が推奨されます。
+
+## WireGuardのインストール
+
+| OpenBSD | FreeBSD | Artix (runitの場合) |
+| ---------------------------- | -------------------------------- | ---------------------------------------------- |
+| doas pkg_add wireguard-tools | sudo pkg install wireguard-tools | sudo pacman -S wireguard-tools wireguard-runit |
+
+Artixの場合、インストール後に再起動が必要な場合があります。
+インストールしたlinux-kernelのバージョンが現在実行中のバージョンと異なると、WireGuardが起動出来なくなります。
+
+## WireGuardの設定
+### VPS側
+
+```sh
+doas su
+mkdir /etc/wireguard
+chmod 600 /etc/wireguard
+cd /etc/wireguard
+wg genkey | tee private.key | wg pubkey > public.key
+
+nvim wg0.conf
+```
+
+```
+[Interface]
+Address = 192.168.10.1/24
+PrivateKey = (VPSのprivate.keyの内容)
+ListenPort = 51820
+
+[Peer]
+PublicKey = (ThinkPadのpublic.keyの内容)
+PreSharedKey = (ThinkPadのpreshared.keyの内容)
+AllowedIPs = 192.168.10.100/32
+PersistentKeepalive = 25
+
+[Peer]
+PublicKey = (ThinkCentreのpublic.keyの内容)
+PreSharedKey = (ThinkCentreのpreshared.keyの内容)
+AllowedIPs = 192.168.10.101/32
+PersistentKeepalive = 25
+
+[Peer]
+PublicKey = (NECのpublic.keyの内容)
+PreSharedKey = (NECのpreshared.keyの内容)
+AllowedIPs = 192.168.10.102/32
+PersistentKeepalive = 25
+```
+
+```sh
+nvim /etc/pf.conf
+```
+
+```
+set skip on lo
+exsrv1 = (VPSのIPアドレス)
+insrv1 = 192.168.10.101
+insrv2 = 192.168.10.102
+insrv3 = 192.168.10.103
+
+block return
+pass
+
+pass in on wg0
+pass in inet proto udp from any to any port 51820
+
+# PeerTube
+pass in inet proto udp from any to $insrv2 port 9000
+pass in on egress proto tcp from any to $insrv2 port {1935, 1936} rdr-to $insrv2
+
+# URLロリ
+pass in inet proto udp from any to $insrv1 port 9910
+
+# Gemini
+pass in on egress proto tcp from any to $insrv3 port { 1965 } rdr-to $insrv3
+
+# HTML
+pass out on egress inet from (wg0:network) nat-to (vio0:0)
+
+# SSHはWireGuardネットワーク内のみ許可する
+pass in on wg0 proto tcp from 192.168.10.0/24 to any port 22
+block in on egress proto tcp from any to any port 22
+...
+```
+
+```sh
+pfctl -f /etc/pf.conf
+```
+
+最高レベルのセキュリティを保つ為に:
+
+```sh
+nvim /etc/ssh/sshd_config
+```
+
+```
+...
+AllowUsers (貴方のユーザー名)@192.168.10.0/24
+PermitRootLogin no
+AuthorizedKeysFile .ssh/authorized_keys
+PasswordAuthentication no
+...
+```
+
+```sh
+exit
+ssh-keygen -t ed25519
+(最後までそのままEnterキーを押して)
+cat ~/.ssh/id_ed25519.pub
+```
+
+出力内容をコピーし、各サーバーとノートパソコンの「~/.ssh/authorized_keys」ファイルに貼り付けて下さい。
+次に、上記のステップを各サーバー及びノートパソコンで実行し、その結果をVPSの「/.ssh/authorized_keys」ファイルに貼り付けて下さい。
+
+```sh
+doas rcctl restart sshd
+wg-quick up wg0
+```
+
+### 自宅サーバーとノートパソコンの設定
+
+各デバイスの設定は基本的に同じです。
+
+```sh
+doas su
+mkdir /etc/wireguard
+chmod 600 /etc/wireguard
+cd /etc/wireguard
+wg genkey | tee private.key | wg pubkey > public.key
+wg genpsk > preshared.key
+
+nvim wg0.conf
+```
+
+```
+[Interface]
+PrivateKey = (現在のデバイスのprivate.keyの内容)
+Address = 192.168.10.10x/24
+
+[Peer]
+PublicKey = (VPSのpublic.keyの内容)
+PreSharedKey = (現在のデバイスのpreshared.keyの内容)
+Endpoint = (VPSの公開IPアドレス):51820
+AllowedIPs = 192.168.10.0/24
+PersistentKeepalive = 25
+```
+
+Address部分の「x」は、各サーバーで設定した通りです。
+この記事では、Artix=0、OpenBSD=1、FreeBSD=2となります。
+
+OpenBSDサーバー:
+
+```sh
+cd
+wget https://lab.abiscuola.org/gmnxd/tarball/v1.2.0/gmnxd-v1.2.0.tar.gz
+tar zxfv gmnxd-v1.2.0.tar.gz
+cd gmnxd-v1.2.0/src
+make
+make install
+cd
+useradd -g '=uid' -L daemon -s /sbin/nologin -c 'Gmnxd user' -d /var/gemini _gmnxd
+chown -R _gmnxd:_gmnxd /var/gemini
+nvim /etc/inetd.conf
+
+```
+0.0.0.0:11965 stream tcp nowait _gmnxd /usr/local/libexec/gmnxd gmnxd
+```
+
+```sh
+rcctl enable inetd
+rcctl start inetd
+nvim /etc/pf.conf
+```
+
+```
+set skip on lo
+
+block return
+pass
+
+# HTTP
+pass in inet proto tcp from any to (self) port {80, 443}
+
+# URLロリ
+pass in inet proto tcp from any to (self) port 9910
+
+# Gemini
+pass in inet proto tcp from any to (self) port 11965
+...
+anchor "relayd/*"
+```
+
+```sh
+pfctl -f /etc/pf.conf
+wg-quick up wg0
+mkdir -p /var/www/htdocs/{076,minmi}.moe/www
+mkdir -p /var/gemini/076.moe
+echo "わーい" >> /var/www/htdocs/{076,minmi}.moe/www/index.html
+echo "わーい" >> /var/gemini/076.moe/index.gmi
+nvim /etc/httpd.conf
+```
+
+```
+eth_addr=192.168.0.103 # 自宅のルーターで設定した固定IPアドレス
+wg0_addr=192.168.10.103 # WireGuardで設定したIPアドレス
+
+## 076.moe
+server "076.moe" {
+ listen on $wg0_addr port 8080
+ root "/htdocs/076.moe/www"
+ directory index "index.html"
+ location "/repo/*" {
+ directory auto index
+ }
+ location "/.well-known/acme-challenge/*" {
+ root "/acme"
+ request strip 2
+ }
+}
+
+server "l3nbzyxgrkmd46nacmzf2sy6tpjrwh4iv3pgacbrbk72wcgxq5a.b32.i2p" {
+ listen on $eth_addr port 8450
+ root "/htdocs/076.moe/www"
+ directory index "index.html"
+ location "/repo/*" {
+ directory auto index
+ }
+}
+
+server "7dt6irsmfvbrtgn4nuah56kky6mvr472fbwwaltuxpf26qdqkdhfvnqd.onion" {
+ listen on $eth_addr port 8500
+ root "/htdocs/076.moe/www"
+ directory index "index.html"
+ location "/repo/*" {
+ directory auto index
+ }
+}
+
+## minmi.moe
+server "minmi.moe" {
+ listen on $wg0_addr port 8087
+ root "/htdocs/minmi.moe/www"
+ directory index "index.html"
+ location "/.well-known/acme-challenge/*" {
+ root "/acme"
+ request strip 2
+ }
+}
+```
+
+```sh
+mkdir -p /var/www/htdocs/urlo.li
+cd /var/www/htdocs/urlo.li
+git clone https://gitler.moe/suwako/urloli.git .
+nvim Makefile
+```
+
+一部編集は必要となります。
+
+```
+# Linux、Cruxの場合は必須。他のディストリビューションはどうでも良い
+#PREFIX=/usr
+# FreeBSDとOpenBSD
+PREFIX=/usr/local
+```
+
+```sh
+rcctl enable httpd
+rcctl start httpd
+make
+make install
+nvim /etc/urloli/config.json
+```
+
+```
+{
+ "domain": "https://(ドメイン名)",
+ "webpath": "/var/www/htdocs/urlo.li"
+}
+```
+
+FreeBSDサーバー:
+公式ガイドに従って、nginxとcertbotをインストールが必要とされていますが、今回の場合は不要です。
+
+```sh
+wg-quick up wg0
+pkg install -y sudo bash wget git python pkgconf postgresql13-server postgresql13-contrib redis openssl node npm yarn ffmpeg unzip
+visudo
+```
+
+```
+%wheel ALL=(ALL) ALL
+```
+
+```sh
+sysrc postgresql_enable="YES"
+sysrc redis_enable="YES"
+sysrc nginx_enable="YES"
+
+sudo pw useradd -n peertube -d /var/www/peertube -s /usr/local/bin/bash -m
+sudo passwd peertube
+cd /var/www/peertube
+sudo -u postgres createuser -P peertube
+sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod
+sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube_prod
+sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube_prod
+VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest Peertube version is $VERSION"
+cd /var/www/peertube
+sudo -u peertube mkdir config storage versions
+sudo -u peertube chmod 750 config/
+cd /var/www/peertube/versions
+sudo -u peertube wget -q "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip"
+sudo -u peertube unzip -q peertube-${VERSION}.zip && sudo -u peertube rm peertube-${VERSION}.zip
+cd /var/www/peertube
+sudo -u peertube ln -s versions/peertube-${VERSION} ./peertube-latest
+cd ./peertube-latest && sudo -H -u peertube yarn install --production --pure-lockfile
+cd /var/www/peertube
+sudo -u peertube cp peertube-latest/config/default.yaml config/default.yaml
+cd /var/www/peertube
+sudo -u peertube cp peertube-latest/config/production.yaml.example config/production.yaml
+nvim config/production.yaml
+```
+
+```
+listen:
+ hostname: '0.0.0.0'
+ port: 9000
+
+webserver:
+ https: true
+ hostname: '(ドメイン名)'
+ port: 443
+...
+```
+
+```sh
+sudo install -m 0555 /var/www/peertube/peertube-latest/support/freebsd/peertube /usr/local/etc/rc.d/
+sudo sysrc peertube_enable="YES"
+sudo service peertube start
+```
+
+Artixノートパソコン:
+
+```sh
+wg-quick up wg0
+```
+
+### 再度、VPSの設定
+```sh
+nvim /etc/acme-client.conf
+```
+
+```
+authority letsencrypt {
+ api url "https://acme-v02.api.letsencrypt.org/directory"
+ account key "/etc/acme/letsencrypt-privkey.pem"
+}
+
+domain 076.moe {
+ alternative names { www.076.moe }
+ domain key "/etc/ssl/private/076.moe.key"
+ domain full chain certificate "/etc/ssl/076.moe.crt"
+ sign with letsencrypt
+}
+
+domain video.076.moe {
+ domain key "/etc/ssl/private/video.076.moe.key"
+ domain full chain certificate "/etc/ssl/video.076.moe.crt"
+ sign with letsencrypt
+}
+
+domain urlo.li {
+ domain key "/etc/ssl/private/urlo.li.key"
+ domain full chain certificate "/etc/ssl/urlo.li.crt"
+ sign with letsencrypt
+}
+
+domain minmi.moe {
+ domain key "/etc/ssl/private/minmi.moe.key"
+ domain full chain certificate "/etc/ssl/minmi.moe.crt"
+ sign with letsencrypt
+}
+```
+
+```sh
+nvim /etc/relayd.conf
+```
+
+```
+relayd_addr="0.0.0.0"
+insrv1_addr="192.168.10.101"
+insrv2_addr="192.168.10.102"
+
+table { $insrv1_addr }
+table { $insrv1_addr }
+table { $insrv1_addr }
+
+table