シナリオ – Whonix は完全な Tor ソリューションを提供していない
セキュリティに特化したオペレーティングシステムである Qubes OS には Whonix が統合されており、Tor 接続をサポートしています。しかし、lyrebird
がまだ Debian の公式リポジトリに存在しないため、Whonix は WebTunnel ブリッジをサポートしていません。
残念ながら、一部の国ではネットワークが厳しく検閲されており、obfs4 ブリッジが使用不能です。WebTunnel ブリッジの使用が唯一の選択肢となる場合もあります。したがって、他の qube に Tor 接続を提供する NetVM を作成するために、最新バージョンの Tor を利用します。
ステップ 1:Tor デーモン用の qube を準備する
このステップでは、Tor デーモンを動作させる qube を準備します。fedora-41-xfce
テンプレートから StandaloneVM として tor-daemon
という名前で qube を作成します。自動起動を有効にしてください。作成後、ターミナルを開きます。
Tor をインストール:
$ sudo dnf install tor
lyrebird
を コンパイル するか、ダウンロード して /usr/local/bin
に配置し、以下を実行:
$ sudo chown root\:root /usr/local/bin/lyrebird
$ sudo chmod +x /usr/local/bin/lyrebird
$ sudo ln -s /usr/local/bin/lyrebird /usr/bin/lyrebird
$ sudo semanage fcontext -a -t tor\_exec\_t '/usr/local/bin/lyrebird'
$ sudo restorecon -v /usr/local/bin/lyrebird
次に、/etc/tor/torrc
を設定します。以下のように追記してください:
UseBridges 1
ClientTransportPlugin webtunnel exec /usr/local/bin/lyrebird managed
Bridge webtunnel ...
Bridge webtunnel ...
...
managed
は systemd によって Tor デーモンと lyrebird
を起動可能にするために重要です。
Tor デーモンを有効化して起動:
$ sudo systemctl enable --now tor
動作確認:
$ torsocks curl myip.wtf
IP アドレスが表示されれば成功です。次のステップへ進みます。
ステップ 2:ルーティング用の qube を準備する
fedora-41-xfce
テンプレートを複製します。ここではこのテンプレートを使用しましたが、ディスク容量を節約したい場合は fedora-41-minimal
でも良いでしょう(動作は未確認)。クローン名は fedora-41-pt
とします。
テンプレートを複製したら一時的にネットワークに接続(例:sys-firewall
)し、ターミナルを開いて以下を実行:
$ sudo dnf install qubes-core-agent-networking iproute clash-meta dnscrypt-proxy torsocks
$ sudo systemctl disable dnscrypt-proxy
完了後、シャットダウンしネットワーク接続を解除してください。
作成したテンプレートから AppVM を作成し、名前を sys-tor
にします。この qube も自動起動を有効にしてください。次に、dom0
のターミナルで以下を実行:
$ sudo -s
# echo sys-tor @default allow,target=tor-daemon >> /etc/qubes-rpc/policy/qubes.ConnectTCP
# exit
$ qvm-firewall sys-tor del --rule-no 0
$ qvm-firewall sys-tor add drop
$ qvm-firewall sys-tor add --before 0 drop proto=icmp
$ qvm-firewall sys-tor add --before 0 drop specialtarget=dns
次に、sys-tor
のターミナルを開きます。/rw/proxy/dns
および /rw/proxy/clash
フォルダーを作成します。
/rw/proxy/dns/dnscrypt-proxy.toml
を開き、以下を追加:
listen_addresses = ['127.0.0.1:5353']
max_clients = 250
proxy = 'socks5://127.0.0.1:7891'
timeout = 5000
keepalive = 30
ignore_system_dns = true
netprobe_timeout = 0
cache = true
[static]
[static.quad9_doh]
stamp = 'sdns://AgMAAAAAAAAABzkuOS45LjkgKhX11qy258CQGt5Ou8dDsszUiQMrRuFkLwaTaDABJYoSZG5zOS5xdWFkOS5uZXQ6NDQzCi9kbnMtcXVlcnk'
[static.mullvad_doh]
stamp = 'sdns://AgcAAAAAAAAAAAAPZG9oLm11bGx2YWQubmV0Ci9kbnMtcXVlcnk'
/rw/proxy/clash/config.yaml
を開き、以下を追加:
socks-port: 7891
redir-port: 7892
mode: rule
allow-lan: true
bind-address: '*'
dns:
enable: false
proxies:
- name: "socks_proxy"
type: socks5
server: 127.0.0.1
port: 9050
rules:
- MATCH,socks_proxy
/rw/config/rc.local
を開いて以下を追加:
qvm-connect-tcp 9050:@default:9050
sysctl -w net.ipv4.conf.all.route_localnet=1
nft 'add rule ip qubes custom-forward oifname "eth0" drop'
nft 'add rule ip6 qubes custom-forward oifname "eth0" drop'
nft 'add rule ip qubes custom-forward iifname "eth0" drop'
nft 'add rule ip6 qubes custom-forward iifname "eth0" drop'
nft flush chain ip qubes dnat-dns
nft 'add rule ip qubes dnat-dns ip daddr 10.139.1.1 udp dport 53 dnat to 127.0.0.1:5353'
nft 'add rule ip qubes dnat-dns ip daddr 10.139.1.1 tcp dport 53 dnat to 127.0.0.1:5353'
nft 'add rule ip qubes dnat-dns ip daddr 10.139.1.2 udp dport 53 dnat to 127.0.0.1:5353'
nft 'add rule ip qubes dnat-dns ip daddr 10.139.1.2 tcp dport 53 dnat to 127.0.0.1:5353'
nft 'add rule ip qubes custom-input iifname "vif*" tcp dport 7892 accept'
nft 'add rule ip qubes custom-input iifname "vif*" udp dport 7892 accept'
nft 'add rule ip qubes custom-input iifname "vif*" tcp dport 5353 accept'
nft 'add rule ip qubes custom-input iifname "vif*" udp dport 5353 accept'
nft 'add chain ip qubes redir { type nat hook prerouting priority -99 ; policy accept; }'
nft 'add rule ip qubes redir iifname "vif*" ip protocol udp redirect to :7892'
nft 'add rule ip qubes redir iifname "vif*" ip protocol tcp redirect to :7892'
nft 'add chain ip qubes output { type filter hook output priority filter ; policy drop; }'
nft 'add rule ip qubes output ct state related,established accept'
nft 'add rule ip qubes output oifname "lo" accept'
nft 'add rule ip qubes output ip daddr 127.0.0.1 accept'
clash-meta -d /rw/proxy/clash >/dev/null 2>&1 &
sleep 0.5
dnscrypt-proxy -config /rw/proxy/dns/dnscrypt-proxy.toml >/dev/null 2>&1 &
このファイル を /rw/proxy/clash/Country.mmdb
にダウンロードしてください(ライセンスは proprietary ですが、実際には使用されていません。後でランダムファイルで試す予定です)。
sys-tor
を再起動します。
ステップ 3:Tor ネットワークへ接続する
Tor ネットワークへ接続したい qube を選びます。その qube の NetVM を sys-tor
に設定します。
ブラウザを開いて このウェブサイト にアクセスしてください。You are using Tor!
と表示されれば成功です。
表示されない場合は設定を確認し、コミュニティに相談してください。
OCSP エラーが発生した場合、ブラウザ設定で OCSP クエリを無効にすることで回避できますが、根本的な解決策はまだありません。
ちなみに、再起動して設定が永続するかを確認するのもお勧めです。