ローカル内で動かしているサービスをcloudflare tunneling経由で公開したい。
また、ローカルネットワーク上の機器からurlを踏んだときはcloudflare tunnelingを経由しないでアクセスしたかったりnextcloudのためにsslをなんとかしたり等々。
誰も興味がないホストしているもの一覧
- archivebox
- Gitea
- h5ai
- navidrome
- nextcloud
- sdnext(stable diffusion fork)
- upsnap
ローカル内の整備#
Certbotを使ってワイルドカード証明書を発行#
これはローカル内でnextcloudを触るときにhttpsでアクセスしたいがオレオレ証明では警告が鬱陶しかったりAPIを叩くときにエラーが出るのでLet’s Encryptを頼ることにした。
(要は所有しているクライアントに自己署名をいれるのがだるかった)
とりあえずsudo apt install -y certbot
でcertbotを入れよう。
今回はDNSチャレンジで証明書を発行する(たまたま見つけた記事がそのやり方だったので)
certbot certonly --manual --preferred-challenges dns
メアドや利用規約の同意などを済ませたら発行したいドメインを聞かれるので入力する。
自分の場合は*.j7b3y.com
TXTレコードの名前と値が表示されるので、レコードを追加する。
レコードの追加が終わったら反映を確認してからEnter.
Google Admin Toolbox Digを活用しよう。
ファイルは/etc/letsencrypt/live/j7b3y.com/
に保存される。
ローカル環境内では自分のドメインを踏んだときにローカル内で完結させるようにする#
ここではadguardhome+nginxを使う。
nginxのインストール#
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update
sudo apt install nginx
リバースプロキシの設定#
各urlを踏んだときにサーバーの指定したポートに飛ばすようにする。
/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
client_max_body_size 3000m;
server {
listen 80;
server_name a.j7b3y.com;
return 301 https://a.j7b3y.com;
}
server {
listen 443 ssl;
server_name a.j7b3y.com;
ssl_certificate /etc/letsencrypt/live/j7b3y.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/j7b3y.com/privkey.pem;
location / {
proxy_pass http://192.168.1.10:8081/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
}
}
}
Port80に来た通信を443にリダイレクトして証明書を反映させるような感じだと自分は解釈している。
サービスの数だけserver{}のlisten 80;とlisten 443;の内容を増やせば良い。
最後にnginxを再起動したら次のステップに進む。sudo systemctl restart nginx
Adguard HomeでDNS書き換えして特定のurlの宛先を変更する#
Adguard Homeのwebインターフェースにアクセスしたらフィルタ>DNS書き換え
にアクセスしてDNS書き換えを追加する。
ドメイン名 | アドレス |
---|---|
a.j7b3y.com | 192.168.1.1 |
ドメイン名に実際に踏むドメインを入れて、アドレスはnginxが動作しているデバイスのアドレスにする(この場合はルーター)
Cloudflaredでグローバルに公開する#
Cloudflaredのセットアップ#
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
sudo cloudflared login
cloudflared tunnel create private
sudo mv /root/.cloudflared/ /etc/cloudflared
Cloudflaredで公開するサービスを設定する#
sudo vim /etc/cloudflared/config.yml
tunnel: <Tunnel-UUID>
credentials-file: /etc/cloudflared/ <Tunnel-UUID>.json
ingress:
- hostname: a.j7b3y.com
service: http://192.168.1.10:8081
- service: http_status:404
公開するサービスを増やすには- service: http_status:404
より上にhostnameとserviceを追加すれば良い。
DNSの設定をする#
sudo cloudflared tunnel route dns private a.j7b3y.com
Cloudflaredを動かす#
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared