настраиваем сеть виртуальной машины через Tor


Для чего может понадобиться пускать весь сетевой трафик виртуальной машины через Tor?

Для того, чтоб не бояться утечки ip адреса из-за ошибок в софте и левых dns запросов.

Для того, чтобы пользоваться софтом, который не поддерживает socks, да и вообще открывать любую программу и не париться с настройками.

Итак, у нас есть машина-гипервизор и виртуалка, запущенная в ней. Для краткости назовем первую localhost, а вторую vm. Обе с системами Debian или Ubuntu.

  1. На 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
    
  2. Предполагаю, что сам 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, который будет служить для определения доменных имен.

  3. Как вы уже успели заметить, в настройках моста промелькнул скрипт, который мы сейчас и создадим. В /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
    

    Если вы меняли порты и подсеть, тут нужно поменять их тоже, ваш кэп. Ах да, не забудьте сделать скрипт исполняемым и дать ему правильные права, по примеру другиз скриптов в той же директории.

  4. Поднимем наш интерфейс

    sudo ifup tor0
    
  5. Перейдем к настройке 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
    
  6. Ну и про /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 виртуалки, или не используйте.