Szenario – Whonix bietet keine vollständige Tor-Lösung
Als sicherheitsorientiertes Betriebssystem integriert Qubes OS Whonix, das die Verbindung über Tor unterstützt. Da lyrebird
jedoch noch nicht im offiziellen Debian-Repository verfügbar ist, unterstützt Whonix keine WebTunnel-Bridges.
In manchen Ländern sind obfs4-Bridges leider unbrauchbar, da das Netzwerk stark zensiert wird. Die Verwendung von WebTunnel-Bridges kann dann die einzige Option sein. Daher können wir die neueste Version von Tor nutzen, um anderen Qubes über ein NetVM den Zugang zum Tor-Netzwerk zu ermöglichen.
Schritt 1: Qube für den Tor-Daemon vorbereiten
In diesem Schritt bereiten wir einen Qube vor, in dem der Tor-Daemon läuft. Erstellen Sie einen Qube – hier als StandaloneVM mit dem Namen tor-daemon
basierend auf dem Template fedora-41-xfce
. Aktivieren Sie den automatischen Start. Öffnen Sie nach dem Erstellen ein Terminal darin.
Tor installieren:
$ sudo dnf install tor
Komplieren oder herunterladen Sie lyrebird
, platzieren Sie es in /usr/local/bin
und führen Sie dann aus:
$ 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
Anschließend konfigurieren Sie Ihre Datei /etc/tor/torrc
. Sie können beispielsweise folgende Zeilen hinzufügen:
UseBridges 1
ClientTransportPlugin webtunnel exec /usr/local/bin/lyrebird managed
Bridge webtunnel ...
Bridge webtunnel ...
...
managed
ist entscheidend, da es sicherstellt, dass der Tor-Daemon und lyrebird
über systemd gestartet werden können.
Dann den Tor-Daemon aktivieren und starten:
$ sudo systemctl enable --now tor
Funktionstest:
$ torsocks curl myip.wtf
Wenn eine IP-Adresse angezeigt wird, funktioniert es. Weiter zum nächsten Schritt.
Schritt 2: Qube für Routing vorbereiten
Klonen Sie das Template fedora-41-xfce
. Ich habe dieses verwendet, aber Sie können auch fedora-41-minimal
wählen, um Speicherplatz zu sparen – ich kann jedoch nicht garantieren, dass es funktioniert. Der Klon erhält hier den Namen fedora-41-pt
.
Verbinden Sie das geklonte Template vorübergehend mit dem Netzwerk (z. B. sys-firewall
), öffnen Sie ein Terminal und führen Sie aus:
$ sudo dnf install qubes-core-agent-networking iproute clash-meta dnscrypt-proxy torsocks
$ sudo systemctl disable dnscrypt-proxy
Dann herunterfahren und vom Netzwerk trennen.
Erstellen Sie eine AppVM basierend auf diesem Template und benennen Sie sie sys-tor
. Aktivieren Sie auch hier den automatischen Start. Öffnen Sie dann ein Terminal in dom0
und führen Sie aus:
$ 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
Öffnen Sie ein Terminal in sys-tor
. Erstellen Sie die Verzeichnisse /rw/proxy/dns
und /rw/proxy/clash
.
Bearbeiten Sie /rw/proxy/dns/dnscrypt-proxy.toml
und fügen Sie Folgendes ein:
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'
Bearbeiten Sie /rw/proxy/clash/config.yaml
und fügen Sie Folgendes ein:
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
Bearbeiten Sie /rw/config/rc.local
und fügen Sie Folgendes ein:
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 &
Laden Sie diese Datei herunter (proprietäre Lizenz, wird aber nicht wirklich verwendet; ich werde es später mit einer beliebigen Datei testen) und speichern Sie sie unter /rw/proxy/clash/Country.mmdb
.
Starten Sie sys-tor
neu.
Schritt 3: Verbindung zum Tor-Netzwerk herstellen
Wählen Sie den Qube aus, über den Sie sich mit dem Tor-Netzwerk verbinden möchten. Setzen Sie sein NetVM auf sys-tor
.
Öffnen Sie einen Browser und gehen Sie auf diese Website. Wenn dort steht You are using Tor!
– voilà!
Wenn nicht, überprüfen Sie Ihre Konfiguration und fragen Sie die Community.
Falls Sie ein OCSP-Problem haben, kann das Deaktivieren von OCSP-Abfragen in den Browsereinstellungen eine vorübergehende Lösung sein – eine saubere Lösung habe ich derzeit nicht.
Übrigens: Ein Neustart Ihres Rechners kann helfen zu prüfen, ob die Konfiguration auch nach dem Booten erhalten bleibt.