Для чего может понадобиться пускать весь сетевой трафик виртуальной машины через Tor?
Для того, чтоб не бояться утечки ip адреса из-за ошибок в софте и левых dns запросов.
Для того, чтобы пользоваться софтом, который не поддерживает socks, да и вообще открывать любую программу и не париться с настройками.
Итак, у нас есть машина-гипервизор и виртуалка, запущенная в ней. Для краткости назовем первую localhost, а вторую vm. Обе с системами Debian или Ubuntu.
На localhost создадим сетевой мост с незамысловатым названием tor0.
Подсеть для наших дел возьмем 10.254.0.0/24, заранее убедитесь, что вы нигде такую не используете, если таки используете, то поменяйте на другую по вкусу. Для этого в /etc/network/interfaces пропишем
auto tor0 iface tor0 inet static address 10.254.0.1 netmask 255.255.255.0 # do not bind to any ports bridge_ports none bridge_maxwait 0 # bridge forwarding delay bridge_fd 1 # Post interface start script post-up /etc/network/if-up.d/tor0-rules.sh
Предполагаю, что сам tor уже установлен, потому как нужно внести изменения в torrc. У меня tor установлен в /opt/tor, поэтому я изменил /opt/tor/Data/Tor/torrc и добавил туда
AutomapHostsOnResolve 1 TransPort 9040 TransListenAddress 10.254.0.1 DNSPort 5353 DNSListenAddress 10.254.0.1
Следует обратить внимание на подсеть, про которую я писал пунктом выше и на порты 9040, через который будет идти обычный tcp/udp трафик и 5353, который будет служить для определения доменных имен.
Как вы уже успели заметить, в настройках моста промелькнул скрипт, который мы сейчас и создадим. В /etc/network/if-up.d/tor0-rules.sh положите следующее содержимое
#!/bin/bash iptables -t nat -I POSTROUTING -s 10.254.0.0/24 -j MASQUERADE iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353 iptables -t nat -A PREROUTING -p tcp --syn -j REDIRECT --to-ports 9040
Если вы меняли порты и подсеть, тут нужно поменять их тоже, ваш кэп. Ах да, не забудьте сделать скрипт исполняемым и дать ему правильные права, по примеру другиз скриптов в той же директории.
Поднимем наш интерфейс
sudo ifup tor0
Перейдем к настройке vm. Там нужно всего лишь пересоздать сетевой интерфейс как статический. Вот как выглядит /etc/network/interfaces на vm
# The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 10.254.0.2 netmask 255.255.255.0 gateway 10.254.0.1
Ну и про /etc/resolv.conf не забудьте. Приведите его к следующему виду
nameserver 10.254.0.1
Можно протестировать, что все настроено правильно. С виртуалки vm приконектимся к какому-нибудь внешнему серверу, к которому имеем доступ на какой-то левый порт.
telnet prolinux.org 666
А там запустим tcpdump и посмотрим, откуда идут пакетики.
tcpdump -i venet0 tcp and port 666
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on venet0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
13:05:18.445456 IP politkovskaja.torservers.net.11061 > prolinux.org.666: Flags [S], seq 3054718108, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 10], length 0
13:05:18.445498 IP prolinux.org.666 > politkovskaja.torservers.net.11061: Flags [R.], seq 0, ack 3054718109, win 0, length 0
В любом случае будьте осторожны, т.к. протоколы, отличные от tcp/udp будут ходить в обход tor, поэтому или сразу запретите их в iptables виртуалки, или не используйте.