ポート開放なしでWebサイトとVPNサーバーを立てる(Cloudflare Tunnel と Tailscale)
概要
ゴミNUROが勝手にデュアルスタックからMAP-E方式に変更したので、ポート開放無しでサーバーを立てざるを得なくなりました。(NUROはせっかくDS-LiteじゃなくてMAP-E導入したのにポート開放機能は”純正ONU”の機能で潰されています)
仕方がないのでこのWebサイト(tatuiyo.xyz)とVPNサーバーをポート開放無しで立てます。WebサイトはCloudflare Tunnel、VPNはTailscaleを使いました。
母艦はProxmoxを使ってます。
Webサーバー
Cloudflare Tunnel
Cloudflare Tunnelは、クライアントからのリクエストを全てCloudflareのサーバーを経由させて、自分のサーバーで動かすデーモン”Cloudflared”を通してホストに転送することでポート開放無しでもサーバーを公開することができます。なのでトンネル。
今普通にポート開放して運用している Apache2+Wordpress を、Cloudflare Tunnel を使って外部公開するように構成を変えます。(ProxmoxのLXCコンテナで運用中)
公開するドメインはCloudflareレジストラで管理しているとします。(ちな原価なので最安)
Cloudflaredのインストール
Proxmoxにトンネル用のコンテナを立ててそこにCloudflaredをインストールしました。
もちろんCloudflaredはWebサーバーにアクセスできるセグメントにいる必要があります

ここでダウンロードできます
https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/#linux
QUICプロトコルは不安定になりがちなので、HTTP/2を起動オプションで指定するのがおすすめ
Cloudflare Tunnelを作る
DNSレコードは全部消しておく
Cloudflareのダッシュボードから、Zero Trust -> Networks -> Tunnels で Create a tunnel を選択

Debianを選んで下のコマンドを実行
横のPublic Hostnameを選択して、Webサーバーのローカルのアドレスとドメインを関連付ける

この設定後、勝手にCloudflareのどこかのアドレスとCNAMEしてるDNSレコードが追加されてました
Webサーバーの設定
Cloudflare Tunnel は勝手にHTTPSが有効になる(?理解が甘い)ので、今まで使ってたLet’s Encryptの設定は消す
certbot delete
a2dissite wordpress-le-ssl
変なリダイレクトルールが残ってるとリダイレクトループ(503のやつ)になったので消す
sites-enabledのwordpress.conf(とか)のこいつらを消す
RewriteEngine on
RewriteCond %{SERVER_NAME} =tatuiyo.xyz
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
これでリダイレクトループは解消されたのに、なぜかWordpressの管理画面に入ろうとするとまた発生
管理画面でSSLを強制するコードをwp-config.phpに追加します。ただし require_once(ABSPATH . ‘wp-settings.php’); より前に追加してください。後に追加するとリダイレクトループは解消するのに「このページにアクセスする権限がありません」と表示される謎バグが発生します。
https://ja.wordpress.org/support/article/administration-over-ssl/
https://wp-technique.com/wp-access-authority/
define('FORCE_SSL_ADMIN', true);
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS']='on';
}
これで大丈夫なはず
VPN
Tailscale
VPNっぽいことはCloudflare Tunnelを使ってもできるらしいですが、Tailscaleのほうが簡単そう。
https://zenn.dev/jumpman0038/articles/c2717fa990d489
Cloudflare Tunnelは全ての通信がCloudflareのサーバーを経由するのでVPNにはあまり向いていません。
Tailscaleは最初にTailscale社が用意したサーバーで認証した後はデバイス同士で直接通信します。
UDPホールパンチングという技術でNAT越えしているらしい。
あらかじめ登録しておく
https://tailscale.com/
Proxmox上で使うための設定
とりあえずコンテナを立てた(Ubuntu 22.04)

LXCコンテナ内でTailscaleを使うには、ホスト側で設定をいじる必要があるようです
https://tailscale.com/kb/1130/lxc-unprivileged
/etc/pve/lxc/コンテナの番号.confに追記
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
インストール
インストールはこれ通りに行う
https://tailscale.com/kb/1187/install-ubuntu-2204
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt-get update
sudo apt-get install tailscale
sudo tailscale up
URLが出てくるのでログインしてください
Tailscaleの設定
Tailscaleは初めて使いましたが、どれがホストでクライアントでみたいな区別はなくて複数台の端末が相互に繋がる感じらしい。
exit-nodeを設定すると、他のノードがそのノードを踏み台にしてインターネットに出られるように設定でき、advertise-routesでサブネットを指定すると、そのノードのサブネットに他のノードからアクセスできるようです。
advertise-routesを使うために以下のコマンドを実行する
https://tailscale.com/kb/1019/subnets?tab=linux#enable-ip-forwarding
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
advertise-routesで自分のサブネットを指定して、exit-nodeを有効にして接続
tailscale up --advertise-routes=192.168.100.0/24 --advertise-exit-node
tailscaleのMachinesのところから、advertise-routesとexit-nodeを有効にしたノードのEdit route settingsをクリックしてチェックボックスを入れる

できた

Exit nodeを経由するかどうかは各ノードで選べるみたいです。Androidの携帯回線から入ってみると、自宅鯖のノードのサブネットにいる機器にアクセスできました。自宅鯖をExit nodeに指定し適当なサイトにアクセスすると、アクセス元が自宅のIPになるのも確認できました。
ただしTailscaleに接続するとAndroidのプライベートDNSが使えなくなりました。多分MagicDNSとの兼ね合いのせいです
我这边也是map-e的nuro光,使用环境是通过楽天モバイル开テザリング,用外出时mt3000路由器的中继模式接上网络后,通过自宅的安装在openwrt的tailscale,rdp安装在nas中的windows虚拟机时发现download速度只有200kb/s,上传回去却有3mb/s的速度。
使用netbird的话能到下行600kb/s和上行3mb/s的速度。
想问下您这边用tailscale也有类似速度过慢的问题嘛?