Cloudflare Zero Trustで賃貸住みでも使える無料の宅内VPNを作成する AdBlockもする

前回の記事でVPSを借りてVPNを作りましたが、帯域がゴミで使うのをやめました。

その後代案を探していたのですが、Cloudflare Zero Trustで同じようなことができ、しかも無料とのことでCloudflare Zero Trustにて環境構築することにしました。


Cloudflare Zero Trustって何?

インターネット上のすべてを信用せず、代わりにCloudflareに対して全幅の信頼を置くことでネット上の脅威から身を守るっていうものらしいです。

要するに全部のトラフィックをCloudflare経由にすると、通信をフィルタリングして安全にできるし、通信した相手方からすればCloudflareからパケットが飛んでくるのでエンドユーザーがだれかわからずプライバシーも守られるって話です。
逆に言えばCloudflareにはあらゆるサイトのアクセス履歴や内容をさらけ出すということになります。

Cloudflare Zero TrustとVPSの違いは?

Cloudflare Zero TrustはあくまでCloudflare内に自前のネットワーク環境を作れるだけでサーバー機能はありません。
なのでWEBサービスを公開したいならCloudflare Zero Trust経由で自宅にトンネルを張ったうえで自宅のサーバーを公開する必要があります。

そのため代わりにトンネルを張るための自宅サーバーが必要です。
私はSynology NASのDockerでやりましたが、ラズパイとかでも運用できると思います(古いラズパイだと帯域が微妙かも)。

また大きな違いはCloudflare Zero Trustは個人利用レベルなら無料で運用できるという点です。
VPSではサーバーリソース(CPU/MEM/SSD等)がかかるので当然といえばそうなんですが、VPSで制限がかかりがちな帯域関連がCloudflare Zero Trustだと一切制限なく無料というところがでかすぎます。
VPSでは1Gbps共用ネットワークが欲しいとなると何千円するプランにしないといけませんからね。

さすが世界最大のCDNというだけあって、帯域ならタダでいくらでも提供できるってことなんでしょうか。
私がもともと求めていた自宅へのVPNアクセスという目的だけであれば、Cloudflare Zero Trustはぴったりという感じです。

今回の目的

  1. Cloudflare Zero Trustを設定する

  2. NAS上のcloudflared(Docker)でCloudflare Zero Trustとtunnelを張る

  3. Cloudflare WARPを設定してPCやiOSからCloudflare Zero Trustに接続する

  4. Cloudflare Zero TrustのFirewall policiesでAdBlockなDNSフィルタを作成

上記の環境構築でどんな場所からでも自宅のネットワークにアクセスできるようになります。
ただ今回は指定したアドレスのみ(Includeルール)で設定するので、Cloudflare Zero Trustの本来の目的?であるすべてのトラフィックを経由させるというものではありません。

そのためには除外ルール(Exclude)で設定するんですが、正直個人用途でZero Trustしたいとか全く思ってないのでトラブルが少ないIncludeルールで構築しました。

Cloudflare Zero Trustを設定する

チーム名を設定したり、支払方法を設定するように言われるのでなんか適当に作ります。

ダッシュボードが開けたら各種設定をします。

Settings > Authentication

Login methodsにOne-time PINが無かったら、Add newから追加しておきます。

Settings > WARP Client > Device enrollment permissions

Manageボタンを押し、Add a ruleからAllow Emailsなルールを作成して自分のメールアドレスを入力してSaveします。

Settings > WARP Client > Device settings > Default

Split TunnelsをExclude IPs and domainsからInclude IPs and domainsに変更します。警告が出ると思いますが無視します。

Manageボタンを押し、以下の2つをエントリーに追加します。

  • IP Address > 192.168.0.0/24 (自宅で使っているアドレス)

  • Domain > [最初に作ったチーム名].cloudflareaccess.com

  • IP Address > 100.96.0.0/12 (WARP端末同士で通信したい場合)

設定は以上です。

cloudflaredでCloudflare Zero Trustに接続する

Cloudflare Zero TrustのダッシュボードからNetworks > Tunnelsを開きCreate a tunnelを押します。
cloudflaredを選択し、Tunnel nameに適当な名前を入れておきます。

Run the following commandの下のコポーボタンを押して、メモ帳に張り付け、cloudflared.exe service installの後にある文字列(トークン)を控えておきます。

Composeを使わない場合はChoose your environmentでDockerを選んでコピーしたコマンドをそのまま実行してもいいです。

composeを使う場合は下記のように書けばOKです。

services:
  cloudflared:
    restart: always
    image: cloudflare/cloudflared
    command: tunnel run
    environment:
      - TUNNEL_TOKEN=コピーしたトークン

私のようなSynology NASのDockerで実行する場合は作成時に実行コマンドにtunnel runと入れるのと、環境変TUNNEL_TOKENの設定を入れるだけでOKです。

これで実行するだけでCloudflare Zero TrustでHEALTHYに変化します。めちゃ簡単です。

あとは作成したTunnel NameをクリックしてEditボタンを押し、Private Networkのタブから192.168.0.0/24(自宅で使っているアドレス)を追加しておきます。
この設定をするとトンネル経由で指定したネットワークにIPアドレスでアクセスできます。

これでCloudflare Zero Trustに自宅ネットワークが繋がったので、あとはクライアント端末をCloudflare Zero Trustに繋げば家の中のサーバーが見れるようになります。

あと私の環境(Synology NASのDocker)ではログにこんな警告が出ていました。

failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 7168 kiB, got: 416 kiB). See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details.

UDPバッファサイズをデカくしろってことらしいのですが、リンク先に書いてあるコマンドを実行しても再起動すると元に戻ってしまうそうです。
なのでタスクスケジューラーで起動後に毎回実行するようにしました。

これをやったら警告が消えました。
あとダッシュボードからSettings > Network > Firewall > ProxyでICMPをONにしてるのにpingが通らなかったんですが、この設定後は通るようになりました。

Cloudflare WARPを設定する

ダッシュボードからSetting > Resourcesと進むとDownload the WARP clientというのがあります。

この中から繋ぎたい端末の種類を選んでアプリをダウンロードしてください。

Windowsだと右下のアイコンから環境設定 > アカウントと選んでCloudflare Zero Trustのログインができますし、iOSだと開いたとたん入力画面になると思います。

そこで最初に設定したチーム名を入れると、One-time PINの認証画面が出るので、途中で設定したEmailアドレスで認証してください。

認証が終わるとクソでかいスライドスイッチが表示されるので、ONにすると自宅LANにアクセスできるようになります。

AdBlockなDNSフィルタを作成して快適なモバイルライフを

私は普段iPhoneで280blockerのDNSサーバーを使っていて、これでアプリ上の広告ブロックしています。
しかし今回のCloudflare WARPを使うとWARPのDNSサーバーが優先されるので広告ブロックが効かなくなってしまいました。

さすがに広告地獄になってしまっては常用ができないので、何とかする方法を書こうと思います。

ここから先は

858字 / 1画像

¥ 100

この記事が気に入ったらサポートをしてみませんか?