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

Cloudflareのダッシュボードから、Zero Trust -> Networks -> Tunnels でCreate a tunnel を選択

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

この設定後、勝手にCloudflareのどこかのアドレスとCNAMEしてるDNSレコードが追加されてました
ここからはWebサーバーの設定
Cloudflare Tunnel はHTTPを設定するだけで勝手にHTTPSも有効になるので、今まで使ってたLet’s Encryptの設定は消す
1 2 | certbot delete a2dissite wordpress-le-ssl |
変なリダイレクトルールが残ってるとリダイレクトループ(503のやつ)になったので消す
1 2 3 4 5 | 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/
1 2 3 4 | define('FORCE_SSL_ADMIN', true); if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) { $_SERVER['HTTPS']='on'; } |
これで大丈夫なはず
VPNっぽいことはCloudflare Tunnelを使ってできるらしいですが、Tailscaleのほうが簡単そうhttps://zenn.dev/jumpman0038/articles/c2717fa990d489
UDPホールパンチングという技術でNAT越えしているらしい
あらかじめ登録しておく
https://tailscale.com/
とりあえずコンテナを立てた(Ubuntu 22.04)

LXCコンテナ内でTailscaleを使うには、ホスト側で設定をいじる必要があるようです
https://tailscale.com/kb/1130/lxc-unprivileged
1 2 3 4 | /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
1 2 3 4 5 | 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は初めて使いましたが、どれがホストでクライアントでみたいな区別はなくて複数台の端末が相互に繋がる感じらしい。
exit-nodeを設定すると、他のノードがそのノードを踏み台にしてインターネットに出られるように設定でき、advertise-routesでサブネットを指定すると、そのノードのサブネットに他のノードからアクセスできるようです。
advertise-routesを使うために以下のコマンドを実行する
https://tailscale.com/kb/1019/subnets?tab=linux#enable-ip-forwarding
1 2 3 | 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を有効にして接続
1 | 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でアクセスされてたので動作確認OK
ただしTailscaleに接続するとAndroidのプライベートDNSが使えなくなりました。多分MagicDNSとの兼ね合いのせいです
我这边也是map-e的nuro光,使用环境是通过楽天モバイル开テザリング,用外出时mt3000路由器的中继模式接上网络后,通过自宅的安装在openwrt的tailscale,rdp安装在nas中的windows虚拟机时发现download速度只有200kb/s,上传回去却有3mb/s的速度。
使用netbird的话能到下行600kb/s和上行3mb/s的速度。
想问下您这边用tailscale也有类似速度过慢的问题嘛?