LINUX.ORG.RU
решено ФорумAdmin

Траффик из определенного сетевого интерфейса в тор

 ,


0

2

Смеркалось.

Захотелось Понадобилось мне одну внешнюю железяку заставить ходить в интернет через тор. Воткнул вторую сетевушку, запилил ей статический айпи. Поднял dnsmasq, кастанул

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

обычный NAT заработал, в интернет ходит

Дальше, поставил тор:

cat /etc/tor/torrc

VirtualAddrNetwork 10.0.0.0/10
AutomapHostsOnResolve 1
TransPort 9040
DNSPort 53

(кто знает что имеется в виду в первом параметре – научите дурака. Какой виртуальный адрес? Какой сети?)

а вот iptables для заворачивания трафика в тор на локальной машине:

# Generated by iptables-save v1.8.7 on Mon Jul 25 14:29:18 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
-A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
#-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
# Completed on Mon Jul 25 14:29:18 202

и оно тоже работает, но только для моего ПК, а не для входящего, что и логично, ибо АУТПУТ – оно только для пакетов, сгенерированных на моем ПК.

Внимание вопрос – как завернуть внешний траффик туда же? Вроде надо из прероутинга – но у меня не выходит.

Явно ж у кого-то уже сделано – поделитесь

Спасибо

★★★★★

https://habr.com/ru/sandbox/75216/

Вроде надо из прероутинга – но у меня не выходит.

На клиентах нужно чтобы железка с установленным tor-ом была шлюзом для адресов из диапазона VirtualAddrNetwork. Ну и чтоб DNS-ы вели на девайс с Tor-ом.

Смотри в чём здесь логика: клиент резолвит имя например ya.ru через DNS, предоставляемый tor-ом. Tor резолвит это имя через системный резолвер(тот что в /etc/resolv.conf) а потом сопоставляет получившийся адрес(с помощью хэш-таблиц наверное, подробности лучше в исходниках смотреть) с адресом из подсети VirtualAddrNetwork и уже этот адрес отдаёт клиенту.

То есть вся подсеть Интернета укладывается в указанную тобой VirtualAddrNetwork.

Это позволяет гибко настраивать клиентов и не требует чтобы ВЕСЬ трафик от клиентов шел на железку с Tor-ом(то есть шлюзом по умолчанию, для выхода в обычный Интернет может быть другой девайс).

В общем случае последовательность действий такова:

1) убедись что на клиентах девайс с тором указан как DNS-сервер;
2) убедись что на клиентах маршрут в подсеть для VirtualAddrNetwork ведет на машину с Tor-ом;
3) убедись что входящий трафик для портов DNS-сервера и прозрачного прокси разрешен на сервере;
4) добавь в конфиг тора 'AutomapHostsSuffixes .'
5) если ты весь трафик на машину с Tor-ом направил, убедись что он не утекает в обход Tor-а, запретив в цепочке FORWARD на машине с Tor-ом всё кроме трафика с/на VirtualAddrNetwork;
6) трафик на адреса из подсети VirtualAddrNetwork заворачиваешь через -j REDIRECT в цепочке PREROUTING на машине с Tor-ом;

Пункт 4 нужен т.к. по умолчанию tor делает маппинг только для доменов .onion и .exit - то есть умолчальная конфигурация предполагает использование Tor-а только для доступа к этим доменам.

Ну и минутка капитана очевидности - VirtualAddrNetwork не должна пересекаться с твоей локальной подсетью. То есть если у тебя в локалке например 192.168.0.0/24 или 172.16.0.0/24 - то всё гуд. А если у тебя там что-то из 10. подсети, то надо по маске считать чтобы оно там не входило в эту подсеть. Иначе может быть боль.

Если нужны все локальные подсети(ну вдруг), то есть редкоиспользуемый в локалках диапазон 100.64.0.0/10

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 7)
Ответ на: комментарий от Pinkbyte

Спасибо что откликнулся, пока не работает:

схема безобразия:

Device: 192.168.206.135 ------------------ eth0 (static 192.168.206.1) 
  (client)                                 My Desktop Linux Machine (server)
  1. убедись что на клиентах девайс с тором указан как DNS-сервер;
~ (client)# cat /etc/resolv.conf 
nameserver 192.168.206.1 
~ (client)# nslookup ya.ru
Server:    192.168.206.1
Address 1: 192.168.206.1

Name:      ya.ru
Address 1: 10.2.74.245
  1. убедись что на клиентах маршрут в подсеть для VirtualAddrNetwork ведет на машину с Tor-ом;
~ (client)# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.206.1   0.0.0.0         UG    0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
192.168.206.0   *               255.255.255.0   U     0      0        0 eth0
224.0.0.0       *               240.0.0.0       U     0      0        0 eth0
  1. убедись что входящий трафик для портов DNS-сервера и прозрачного прокси разрешен на сервере;

резолвит, значит входящий на сервере работает

  1. добавь в конфиг тора ‘AutomapHostsSuffixes .’
(server)$ cat /etc/tor/torrc 
VirtualAddrNetwork 116.202.0.0/16
AutomapHostsOnResolve 1
AutomapHostsSuffixes .
TransPort 9040
DNSPort 53
  1. если ты весь трафик на машину с Tor-ом направил, убедись что он не утекает в обход Tor-а, запретив в цепочке FORWARD на машине с Tor-ом всё кроме трафика с/на VirtualAddrNetwork; С этим мне нужна будет помощь :) Но, в любом случае, сейчас вообще перестает работать, то есть трафик не в обход идет, а вообще не идет
  1. трафик на адреса из подсети VirtualAddrNetwork заворачиваешь через -j REDIRECT в цепочке PREROUTING на машине с Tor-ом;
(server)$ cat torify_client.sh
NON_TOR="192.168.216.0/24 192.168.0.0/24 192.168.206.0/24"
TOR_UID=$(id -ur debian-tor)
TRANS_PORT="9040"

# masqaerade for eth1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

iptables -t nat -A OUTPUT -m owner --uid-owner $TOR_UID -j RETURN
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 53

for NET in $NON_TOR 127.0.0.0/9 127.128.0.0/10; do
    iptables -t nat -A OUTPUT -d $NET -j RETURN
done

# во тут я пытаюсь завернуть трафик от устройства, наверняка, неправильно
iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination 192.168.206.1:9040
iptables -t nat -A PREROUTING -p tcp --syn -j REDIRECT --to-ports $TRANS_PORT

ну и результат с клиента:

~ (client)# nslookup check.torproject.org
Server:    192.168.206.1
Address 1: 192.168.206.1

Name:      check.torproject.org
Address 1: 116.202.120.181 check-01.torproject.org

~ (client)# curl -k "https://check.torproject.org"
curl: (7) Failed to connect to check.torproject.org port 443: Connection refused

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

У тебя резолв то в подсеть 10.(для ya.ru), то в какую-то нестандартную 116.202.0.0/16. Она то конечно помечена в RIR-ах как stub-зона, но ты точно уверен, что она ни с чем реально работающем в Интернете не пересекается? Я тут глянул в BGP full view - она вполне себе вещается между провайдерами и бог знает что на ней расположено. Я бы использовать ее не стал... Если у тебя на схеме в локалке только 192.168.206.0/24 - оставь лучше 10. сеть

резолвит, значит входящий на сервере работает

Это ты только DNS проверил, что насчет TransPort ? Это TCP, его открытость можно проверить telnet-ом с клиента.

Also в скрипте у тебя в NON_TOR подсеть указана как 192.168.216.0/24, а в остальных местах - 192.168.206.0/24. Буду считать верным последний вариант.

Далее - DNAT делать НЕ НАДО. Только REDIRECT.

iptables -t nat -F PREROUTING
iptables -t nat -A PREROUTING -s 192.168.206.0/24 -d 192.168.206.0/24 -j RETURN
iptables -t nat -A PREROUTING -p tcp -s 192.168.206.0/24 -j REDIRECT --to-ports 9040

На всякий случай покажи с сервера:

iptables-save

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 8)

TransPort 9040
DNSPort 53

Видимо как с socks, по умолчанию биндится на локалхост.
Надо указывть 0.0.0.0:9040 и 0.0.0.0:53, ну или ip конкретного интерфейса.

VirtualAddrNetwork и AutomapHosts это вообще для резолвинга onion адресов, если тор нужен как прокси во внешний интернет, то это всё ненужно

TheAnonymous ★★★★★
()
Ответ на: комментарий от Pinkbyte

У тебя резолв то в подсеть 10.(для ya.ru), то в какую-то нестандартную 116.202.0.0/16

Я там дальше и check.torproject.org ресовлю. Сеть – та, в которой этот хост. Я решил сначала его заставить работать, а дальше уже сеть переписать.

Это ты только DNS проверил, что насчет TransPort ?

telnet 192.168.206.1 9040
telnet: can't connect to remote host (192.168.206.1): Connection refused

тадам! А почему?

@TheAnonymous в torrc поррты исправил на 192.168.206.1:9040 и 192.168.206.1:53 – не помогло

Also в скрипте у тебя в NON_TOR подсеть указана как 192.168.216.0/24, а в остальных местах - 192.168.206.0/24

они обе нужны: 206 – это сеть между клиентом и сервером (один прямой изернет), а 216 – это локалка организации, она мне нужна чтоб девайс авторизовался и пустил по ssh. В нее я маскарадю из 206-й, а уже когда будет ssh-сессия, можно выключать маскарадинг.

На всякий случай покажи с сервера:

$ sudo iptables-save
# Generated by iptables-save v1.8.7 on Fri Jul 29 08:56:52 2022
*mangle
:PREROUTING ACCEPT [3892347:4770017335]
:INPUT ACCEPT [3573445:4452078236]
:FORWARD ACCEPT [1634:420808]
:OUTPUT ACCEPT [2350877:1730155402]
:POSTROUTING ACCEPT [2353364:1730603614]
COMMIT
# Completed on Fri Jul 29 08:56:52 2022
# Generated by iptables-save v1.8.7 on Fri Jul 29 08:56:52 2022
*filter
:INPUT ACCEPT [3573445:4452078236]
:FORWARD ACCEPT [1634:420808]
:OUTPUT ACCEPT [2350877:1730155402]
COMMIT
# Completed on Fri Jul 29 08:56:52 2022
# Generated by iptables-save v1.8.7 on Fri Jul 29 08:56:52 2022
*nat
:PREROUTING ACCEPT [199:19971]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [217:15453]
:POSTROUTING ACCEPT [176:12482]
-A PREROUTING -s 192.168.206.0/24 -d 192.168.206.0/24 -j RETURN
-A PREROUTING -s 192.168.206.0/24 -p tcp -j REDIRECT --to-ports 9040
-A OUTPUT -m owner --uid-owner 118 -j RETURN
-A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A OUTPUT -d 192.168.216.0/24 -j RETURN
-A OUTPUT -d 192.168.0.0/24 -j RETURN
-A OUTPUT -d 192.168.206.0/24 -j RETURN
-A OUTPUT -d 127.0.0.0/9 -j RETURN
-A OUTPUT -d 127.128.0.0/10 -j RETURN
-A POSTROUTING -o eth1 -j MASQUERADE
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
# Completed on Fri Jul 29 08:56:52 202
pihter ★★★★★
() автор топика
Ответ на: комментарий от TheAnonymous

VirtualAddrNetwork и AutomapHosts это вообще для резолвинга onion адресов, если тор нужен как прокси во внешний интернет, то это всё ненужно

что-то мне тов. @Pinkbyte другое рассказывает. Или я что-то недопонял?

pihter ★★★★★
() автор топика
Ответ на: комментарий от TheAnonymous

Он кстати 53 порт не занимает?

кстати, занимает. Тор что-ли свой ДНС создает? Я думал он к локальному цепляется.

Вобщем, попробовал стопать dnsmasq перед стартом тора – все равно не работает. Торовские 53 и 9040 почему-то не доступны с железки. А вот dnsmasq-овый 53 – доступен. Что это значит? Тор не слушает порты? Слушает. Почему от dnsmasq-ка 53 видно, а от тора – нет?

ЯННП :)

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

тадам! А почему?

TheAnonymous верно подсказывает - возможно по-умолчанию оно на 127.0.0.1 привязано.

Смотрим в man:

If you’re planning to use Tor as a transparent proxy for a network, you’ll want to examine and change VirtualAddrNetwork from the default setting. You’ll also want to set the TransListenAddress option for the network you’d like to proxy. 
TransListenAddress IP[:PORT]
Bind to this address to listen for transparent proxy connections. (Default: 127.0.0.1).

Указывай TransListenAddress и проверь через netstat потом на машине с tor-ом что оно применилось.

они обе нужны: 206 – это сеть между клиентом и сервером (один прямой изернет), а 216 – это локалка организации

Тогда в PREROUTING не забудь еще исключений накидать(правил с RETURN).

Насчет ненужности AutoMapHosts в твоём случае TheAnonymous может и прав при условии что ВСЕ машины, которые ты хочешь заворачивать в tor будут указывать в качестве маршрута по умолчанию эту самую машину с tor-ом.

Тогда трансляция адресов для обычного интернета средствами Tor-а несколько избыточна.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от pihter

Что это значит? Тор не слушает порты? Слушает.

netstat -pnltu с машины с tor-ом. Там сразу будет видно какой PID/процесс на каком адресе и порту висит.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

верно подсказывает - возможно по-умолчанию оно на 127.0.0.1 привязано.

Да, но я переделывал

Указывай TransListenAddress

в таком виде:

VirtualAddrNetwork 10.0.0.0/8
AutomapHostsOnResolve 1
AutomapHostsSuffixes .
#TransPort 192.168.206.1:9040
#DNSPort 192.168.206.1:53
TransListenAddress 192.168.206.1:9040

игнорируется

$ sudo /etc/init.d/tor restart
Stopping tor daemon...done.
Starting tor daemon...Jul 29 14:09:48.837 [warn] Skipping obsolete configuration option "TransListenAddress".
done.

и это у меня тор из стайбла девуана(!):

$ tor --version
Tor version 0.4.5.10.
pihter ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte

netstat -pnltu с машины с tor-ом. Там сразу будет видно какой PID/процесс на каком адресе и порту висит.

$ netstat -pnltu | grep 9040
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.206.1:9040      0.0.0.0:*               LISTEN      -  

и вправду, сразу видно :)

$ sudo /etc/init.d/tor stop
Stopping tor daemon...done.
max@mpy-pc:~$ netstat -pnltu | grep 9040
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)

Но это он.

При этом c клиента:

telnet 192.168.206.1 9040
Connection closed by foreign host

Вроде, лучше

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

У тора свой ДНС, надо чтобы использовался он, он кстати и резолвит адреса в виртуальный диапазон

TheAnonymous ★★★★★
()
Ответ на: комментарий от Pinkbyte

машины, которые ты хочешь заворачивать в tor будут указывать в качестве маршрута по умолчанию эту самую машину с tor-ом

А как ещё можно?

TheAnonymous ★★★★★
()
Ответ на: комментарий от pihter

Но все равно не работает: днс убрал (оставил на откуп dnsmasq). Если я все правильно понимаю – он мне не нужен. У меня цель – не анонимность.

pihter ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte

Смотри в чём здесь логика: клиент резолвит имя например ya.ru через DNS, предоставляемый tor-ом. Tor резолвит это имя через системный резолвер(тот что в /etc/resolv.conf) а потом сопоставляет получившийся адрес(с помощью хэш-таблиц наверное, подробности лучше в исходниках смотреть) с адресом из подсети VirtualAddrNetwork и уже этот адрес отдаёт клиенту.

Все-таки объясните мне про ДНС торовский и VirtualAddrNetwork.

Может это все работать через обычный ДНС или торовский обязателен?

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

Если убрать VirtualAddrNetwork, то по идее можно через обычный ДНС, но может быть ололо-дианаон (см. dns leak).
Кстати торовский днс системный резолвер не использует по идее, а резолвит через тор (по той же причине).

TheAnonymous ★★★★★
()
Ответ на: комментарий от TheAnonymous

Да я деанона не боюсь: мне надо чтоб грузилось то, что в торбраузере грузится, а в обычном – нет. По причине хз, какого-нибудь роскомнадзора нечаянного

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

Если указывать VirtualAddrNetwork, то торовский ДНС будет резолвить адреса туда. По умолчанию это нужно для onion адресов, но если указать AutomapHostsSuffixes ., то резолвиться туда будут вообще все адреса. Соответственно в этом случае торовский днс обязателен

TheAnonymous ★★★★★
()
Ответ на: комментарий от pihter

Но я, как и прежде, имею весьма туманное представление о том как это работает. Похоже, придется раскуривать как следует, копипаста из интернета работает из рук вон плохо )

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

Если не используешь торовский днс, оставь в конфиге тора только TransPort (с IP интерфейса или 0.0.0.0).

Убедись, что есть правило NAT на редирект tcp, и что на клиенте установлен маршрут по умолчанию (шлюз) через машину с тором

TheAnonymous ★★★★★
()
Последнее исправление: TheAnonymous (всего исправлений: 1)
Ответ на: комментарий от TheAnonymous

Спасибо тебе огромное, и тов. @Pinkbyte тоже огромное спасибо.

Оно работает уже, в принципе, как мне нужно. Только демон тора чет падает иногда молча, ну да и пес с ним: я попробовать-то успеваю.

Торжественно обещаю когда-нибудь все-таки раскурить iptables: всю жись мечтаю, да повода не было, а тут повод появился, а некогда )

pihter ★★★★★
() автор топика
Ответ на: комментарий от TheAnonymous

А как ещё можно?

Отдельным маршрутом на VirtualAddrNetwork при условии 'AutomapHostsSuffixes .'. Но в случае с дефолт-роутом это избыточно, как я уже говорил.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от pihter

Только демон тора чет падает иногда молча

запускай с отладочными опциями и смотри. По умолчанию его обычно с --hush или подобными опциями пускают, потому что он логов иначе до жопы генерирует.

Pinkbyte ★★★★★
()
Ответ на: комментарий от TheAnonymous

раскуривай тогда nft

Присоединяюсь к этому очень полезному совету!

anc ★★★★★
()

Для тех, несчастных, кто будет пытаться по этому треду повторить мой опыт, а именно, проброс всего трафика с внешнего интерфейса в тор:

$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto  eth0
iface eth0 inet static
address 192.168.206.1/24

auto  eth1
iface eth1 inet dhcp
$ cat /etc/dnsmasq.conf | grep -v "#" | grep "="
interface=eth0
dhcp-range=192.168.206.50,192.168.206.150,12h
$ cat /etc/tor/torrc | grep -v "#"
VirtualAddrNetwork 10.0.0.0/8
AutomapHostsOnResolve 1
TransPort 192.168.206.1:9040
ExitNodes {us}
$ cat torify_ep.sh | grep -v "#"
NON_TOR="192.168.216.0/24 192.168.206.0/24"
TOR_UID=$(id -ur debian-tor)
TRANS_PORT="9040"

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

iptables -t nat -A OUTPUT -m owner --uid-owner $TOR_UID -j RETURN

for NET in $NON_TOR 127.0.0.0/9 127.128.0.0/10; do
    iptables -t nat -A OUTPUT -d $NET -j RETURN
done

iptables -t nat -F PREROUTING
iptables -t nat -A PREROUTING -s 192.168.206.0/24 -d 192.168.206.0/24 -j RETURN
iptables -t nat -A PREROUTING -s 192.168.216.0/24 -d 192.168.216.0/24 -j RETURN
iptables -t nat -A PREROUTING -p tcp -s 192.168.206.0/24 -j REDIRECT --to-ports 9040

У меня работало – удачи!

pihter ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.