メインコンテンツへスキップ
  1. Posts/

ローカル内サービスの公開

·3 分·
Network Linux Network
なね
著者
なね
目次
Re:Ubuntu Router - This article is part of a series.
Part 4: This Article

ローカル内で動かしているサービスを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.com192.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

参考文献
#

Re:Ubuntu Router - This article is part of a series.
Part 4: This Article

Related

VPNの導入
·2 分
Network Linux Network
ルーター部分のセットアップ
·3 分
Network Linux Network
ルーターの概要
·3 分
Network Linux Network
ubuntu serverをルーター化する2
·4 分
Network Linux Network
ubuntu serverをルーター化する
·3 分
Network Linux Network
HyperVにGPUを割り当てて優勝したかった
·3 分
Linux Linux