はじめに
匿名化インターネットをしたいわけじゃないけど
TorとCloudflare WARPの両方にそれぞれソフトウェアを入れず
クライアントのプロキシ設定だけで接続できると便利だなと思った
Torの出口ノードってブロックされやすいんだよな、Cloudflareさんに
じゃあCloudflareのサービスでつないでやるよということです。
Cloudflare WARPはIP秘匿できないので必要なら他のVPNを使うといいと思う。他にProxyモードがあるVPNサービスを知らないけど。
Torネットワーク宛のトラフィックはtorサービスに送って、それ以外はCloudflare WARPサービスに送るようにします。
ついでにPrivoxyの簡易的な広告ブロックが効いてくると思います。
環境
OS: Fedora 36
Cloudflare Warp 2022.8.936
Tor 0.4.7.10
Squid 5.6
Privoxy 3.0.33
Torインストール
sudo dnf install tor
sudo systemctl enable --now tor
Cloudflare WARPインストール
sudo rpm -ivh https://pkg.cloudflareclient.com/cloudflare-release-el8.rpm
sudo dnf install cloudflare-warp
sudo systemctl enable --now warp-svc
Cloudflare WARP設定
以下のコマンド打っていけば設定できちゃいます。簡単ですね。
今回全てのトラフィックをVPNしちゃうとTorに繋がらないので、プロキシモードにしてます。
warp-cli register
warp-cli set-mode dot
warp-cli set-mode proxy
warp-cli enable-always-on
warp-cli connect
Privoxyインストール
sudo dnf install privoxy
Privoxy設定
sudo nano /etc/privoxy/config
以下の設定を行う
Privoxyは下のルールが優先されるみたいですね。
/
は全てにマッチするルールなので、上に書かないと.onion
までWARPに送られる。
WARPは40000ポート、Torは9050ポートで待ち受けています。
# Everything goes to Cloudflare WARP, except for requests to .onion
forward-socks5 / 127.0.0.1:40000 .
forward-socks5t .onion 127.0.0.1:9050 .
自動起動設定してサービスをスタート
sudo systemctl enable --now privoxy
確認
Privoxyの通常アクセスはTorを経由していないか
Sorry. You are not using Tor.
ならOK
curl -Ss --proxy http://127.0.0.1:8118 https://check.torproject.org/ |sed -n '/<h1/,/<\/h1>/p'
PrivoxyでTorネットワークにはTorで接続できるか
BBCニュースのWebサイトを取得できるか確認、ステータスコードが200
ならOK
curl -IL -x http://127.0.0.1:8118 https://www.bbcnewsd73hkzno2ini43t4gblxvycyac5aw4gnv7t2rccijh7745uqd.onion
Privoxyの通常アクセスにはCloudflare WARPを使用しているか
ASNがCLOUDFLARENET
になっていればOK
curl -L -x http://127.0.0.1:8118 https://ip.gs/json
ここまでできれば利用するアプリケーションでプロキシを127.0.0.1:8118
に設定すれば使えるようになる。
もし他のデバイスからアクセスしたいなら、Squidを同じサーバーに建てると設定しやすい。
(オプション)Squidインストール・設定
今回の目的では必ずしもSquidは要らないのだが、
もしPrivoxyの高機能な設定に慣れていないので前段にSquidをかますと設定しやすいかもしれない
私はSquidの設定にも慣れていないが…
sudo dnf install squid
Squidのコンフィグを編集するので
sudo nano /etc/squid/squid.conf
以下の設定を注入します
既存の設定値の先頭に入れておくのがおすすめです
最後に入れてしまうとうまく反映されないことがあります
# Define Privoxy as parent proxy (without ICP)
cache_peer 127.0.0.1 parent 8118 7 no-query
# Define ACL for protocol FTP
acl ftp proto FTP
# Do not forward FTP requests to Privoxy
always_direct allow ftp
# Forward all the rest to Privoxy
never_direct allow all
以下でサービス開始
sudo systemctl enable --now squid
必要ならファイヤーウォールで許可する。
デフォルトゾーンに入れますが、必要に応じて変更されたい。
というかポートを変えるものなのだろうか、LANならデフォルトポートでいいと思うので、そのままサービス名を使ってルール追加。
もしインターネットに公開したいのならファイヤーウォールだけでなくsquid.conf
も編集しないといけない。
sudo firewall-cmd --add-service=squid --permanent
sudo firewall-cmd --reload