Сервер TOR + NAT + динамический IP


Система: Debian GNU\Linux (lenny).
TOR: 0.1.2.17
Нахожусь за несколькими NAT серверами, т.е. при создании нового соединения с интернет у меня меняется ip.
В этих условиях пробую запустить tor как сервер, для этого делаю слудущее.
Добавляю в конфиг (серверные опции):

и выполняю команду:

получаю следующий лог-файл:

Есть идеи почему не работает?

Комментарии
— unknown (08/10/2007 21:33)   
В доках написано:


Tor can handle servers with dynamic IP addressess just fine. Just leave the "Address" line in your torrc blank, and Tor will guess.


Только непонятно, имеется ввиду закомментарить строку "Address" или оставить раскоментаренной, но вместо адреса оставить пустое поле.
Гость (09/10/2007 00:30)   
Нахожусь за несколькими NAT серверами, т.е. при создании нового соединения с интернет у меня меняется ip

Имхо динамический ip и NAT-сервер это несколько разные вещи.

ORPort is reachable

Чтобы, находясь за NAT, сделать порт доступным извне, нужно произвести "перенаправление портов" (англ. Port Forwarding).

Надо определить, где именно находится NAT-устройство.

Если у провайдера.

Такую ситуацию описывают разными словами:
провайдер предоставляет вам интернет через NAT
у вас внутренний («серый») IP адрес
провайдер не даёт вам внешний IP адрес
вы подключены через локальную сеть провайдера

Проще всего позвонить провайдеру и узнать. Или спросить у соседей с таким же подключением. Обычно такой провайдер предоставляет дополнительную услугу «внешний» («белый») IP адрес за отдельную плату.

Без «внешнего IP» сделать себе доступный порт нельзя.


Ваш NAT

В этом случае ваш внешний IP адрес «принадлежит» вам лично, и вы практически всегда можете ваше NAT-устройство настроить[link1] и получить доступный порт.


Насколько я понял, в вашей ситуации возможно придётся проделать и то и другое.
— serzh (09/10/2007 01:22)   
Tor can handle servers with dynamic IP addressess just fine. Just leave the "Address" line in your torrc blank, and Tor will guess.

Только непонятно, имеется ввиду закомментарить строку "Address" или оставить раскоментаренной, но вместо адреса оставить пустое поле.

Пробовал и так, и так. Не помогло.

Имхо динамический ip и NAT-сервер это несколько разные вещи.

Я вроде уточнил, что имеется ввиду.

Обычно такой провайдер предоставляет дополнительную услугу «внешний» («белый») IP адрес за отдельную плату.

Этого сделать нельзя, даже за дополнительную плату.

Без «внешнего IP» сделать себе доступный порт нельзя.

Это понятно =)

P. S. В TOR, как я понимаю, реализована схема аналогичная P2P. Сервер A, который находится за NAT, периодический опрашивает "центральную директорию" с вопросом, хочет ли другой узел (сервер B, с "внешним" ip) установить соединение. Если да, то сервер A инициирует соединие с сервером B, после чего все последующие данные передаются как обычно.
Гость (09/10/2007 02:14)   
Без «внешнего IP» сделать себе доступный порт нельзя.

Ересь!
Этого сделать нельзя, даже за дополнительную плату.

Есть 2 выхода из ситуации:
  • Попросить провайдера сделать вам port forwarding, на ваш компьютер. В этом случае вы будете доступны как-то типа goldentele.com:34567
  • Послать всех лесом и прокинуть ssh_туннель/VPN от вас до любого компьютера, где у вас есть соответствующие полномочия. Мне самому интересен этот вопрос, но я не искал: полагаю, что существуют сервисы, которые за умеренную плату делают port forwarding – вы коннектитесь к указанному серверу по какому-либо шифрованному протоколу, а тот перенаправляет ваш траффик в инет, а из инета – слушает траффик и переправляет его к вам. Кстати, dyndns... не оно ли это? В принципе, многие ssh-сервисы на публичных серверах организаций позволяют делать port-forwarding. Если ваша организация, где вы работаете, не дала вам никакого ssh-аккаунта, то вы можете завести себе бесплатный на каком-либо из публичных ssh-серверов (это бесплатно даже, порой). Другой вопрос уже в том, насколько там будут кастрированы ваши полномочия для проброса порта (делается прогами socat + ssh). Про свой случай могу сказать так: мне часто нужно дать шелл на своей машине, что за натом, другому человеку, который тоже за натом. У меня есть публичный сервис, где у меня есть ssh, я даю права получать шелл на публичном сервисе нужному человеку, после чего я прокидываю туннель от себя на публичный сервер, тот человек также от себя прокидывает туннель на этот публичный сервис, после чего заходит на него на него по ssh, потом с него на ещё один ssh на localhost выбранного порта, и попадает на мою машину. Пароли нигде не передаются, никакие приватные ssh-ключи на публичный сервис не копируются. Если кому-то нужно – могу раписать по командам что и кому нужно выполнить для организации такого тунеля для связи двух машин, обе из которых за натом.
— unknown (09/10/2007 09:23)   
не самому интересен этот вопрос, но я не искал: полагаю, что существуют сервисы, которые за умеренную плату делают port forwarding

И за проходящий трафик придётся платить и провайдеру и этому сервису?
Гость (09/10/2007 11:23)   
Без «внешнего IP» сделать себе доступный порт нельзя.

Ересь!

прокинуть ssh_туннель/VPN от вас до любого компьютера, где у вас есть соответствующие полномочия

То есть всё равно нужен компьютер с «внешним IP», и без него сделать себе доступный порт таки нельзя! ;)
— SATtva (09/10/2007 19:33)   
Если кому-то нужно – могу раписать по командам что и кому нужно выполнить для организации такого тунеля для связи двух машин, обе из которых за натом.

А прямо здесь и напишите, всё это on-topic.
Гость (09/10/2007 20:10)   
LogMeIn Hamachi[link2]: VPN с мгновенной, нулевой конфигурацией How to...[link3]
— SATtva (09/10/2007 20:42)   
Не знаю, у меня почему-то zero-conf-системы вызывают неоднозначные чувства. Возможно, просто предвзятость...
Гость (09/10/2007 23:16)   
неоднозначные чувства

Для уточнения "знака чувств" можно почитать LogMeIn Hamachi – Security Architecture[link4]
Гость (10/10/2007 02:44)   
То есть всё равно нужен компьютер с «внешним IP», и без него сделать себе доступный порт таки нельзя! ;)

Опять же, в каком смысле "всё равно нужен компьютер с «внешним IP»"?
Вам не нужно покупать реальный IP-адрес, или иметь где-то свой сервер с реальным IP. Вам достаточно иметь шелл на каком-либо компьютере, который обладает реальным IP. Например, на всех таких компьютерах, где я имею шелл, кроме меня его имеют ещё сотни людей, и это не мои серверы – я там обычный пользователь. + Сказанное выше про публичные ssh-сервисы.

А прямо здесь и напишите, всё это on-topic.

  • Предполагается, что аутентификация идёт по ssh-ключам, которые лежат в каталоге /.ssh, рекомендуется использовать keychain из проекта Gentoo Linux для автоматической загрузки ssh-ключей в память при открытии нового шелла.
  • Я кидаю от себя туннель на server.com:

  • Напарник от себя кидает встречный туннель на server.com:

  • Напарник заходит по ssh на мой компьютер:

Остальные ssh-тулзы будут также работать – им нужно только порт указать правильной опцией:


  • Если мой компьютер непосредственно виден с сервера (так бывает если server.com есть сервер в моей сети), то я вообще ничего не выполняю, то есть первой команды нет, а напрник выполняет вместо второй команды:

после чего выполняет третью.

P. S.:
  • Чтобы получить аутентификацию по ключам:
    1. Генерируем ключевую пару:

В каталоге /.ssh появится файл server.com.ssh.pub, который нужно скопировать на сервер server.com, положить его в каталог /.ssh с именем authorized_keys (не перепутайте что копируется на сервер...).
    1. Устанавливаем keychain. Добавляем строчку

в файл /.xinitrc (не в конце :) ) SATtva, а какой у вас оконный менеджер?!
    1. В конфиг /.zshrc, если он login-shell, добавляем строку

Вместо точки можно писать в этом примере source. С остальными шеллами кажется работает пример с точкой, как написано. source выполняет в текущем шелле по своему смыслу, если ничё не путаю.

P. S.: и пусть подавятся от злости те, кто запрещает расшаривать свои машины за NATом :)
Гость (10/10/2007 02:57)   
P. S. S.: Да, забыл сказать,
  • если загрузка ключей идёт автоматом при старте шелла вследствие keychain, то во всех вышеназванных примерах опцию -i с её значением можно не писать.
  • Пусть есть три объекта: моя машина, сервер и вторая заначенная машина. Тогда по своей логике
    • опция -L значит (local) вот что: порт1:хост2:порт2, где порт1 – открытие порта на моей машине, который будет давать доступ на хост2:порт2, котрые видны с сервера.
    • опция -R значит (remote) вот что: порт1:хост2:порт2, где порт1 – открытие порта на сервере, который будет давать доступ на хост2:порт2, который выидны с моей машины.
Гость (10/10/2007 02:58)   
P. P. S: тильды съело :( в путях к домашним директориям, надеюсь, народ поймёть.
Гость (10/10/2007 03:05)   
...эээ, а куда тут лошадь Tor-сервер привязывать?
Гость (10/10/2007 03:55)   
...эээ, а куда тут лошадь Tor-сервер привязывать?

Это уже второй шаг, надо думать. Конструктивную осуществимость я показал. Может быть, ещё прийдётся поднастроить файерволлы должны образом, может – нет. Например, где-то валялись ссылки на настройки связок PF+tor для чего-то...
— SATtva (10/10/2007 10:01, исправлен 10/10/2007 10:05)   
SATtva, а какой у вас оконный менеджер?!

Fluxbox. Спасибо за keychain, кстати — полезная утилита, не знал о ней.
Гость (10/10/2007 10:17)   
Спасибо за keychain, кстати — полезная утилита, не знал о ней.

Каждый юнксоид должен знать об этом, ну а тот кто гентух – тем более! Оно ж родное для них :)
— SATtva (10/10/2007 10:53)   
"Не стыдно чего-то не знать, стыдно — не хотеть учиться", Сократ. ;-Р
— serzh (11/10/2007 21:30)   
Когда появится возможность попробую реализовать через ssh.
P. S. Отдельное спасибо за keychain. Я знал что что-то такое должно быть =)
Гость (11/10/2007 23:14)   
Не думал, что среди всего вышеизложенного по организации ssh-туннеля самым нетривиальным окажется факт существования keychain :)
Пользуйтесь наздоровье.
Гость (12/10/2007 12:11)   
http://wiki.noreply.org/norepl...../SshPortForwardedTor[link5]
— Сергей33 (25/12/2011 08:43)   
Я так понимаю, окончательное решение не было найдено. А задача интересная. Очевидно, нам нужен второй компьютер. Который будет принимать входящие от сети Тор. Всё на этом, в идеале его функция завершается. Выполнять функцию исходящего нода и отвечать компьютерам их цепочки мы сможем и без него. Также понятно, что мы должны трогать программу Тор и вносить изменения в её настройки. И задача вполне разрешима. Как, давайте думать.
Гость (25/12/2011 17:03)   
Если не опускаться до решений типа /comment46949[link6], то это невозможно. Т.е. так или иначе будет нужен постоянный IP и туннель до него. Разве протокол Tor'а предусматривает динамические IP?

Ссылки
[link1] http://ru.wikibooks.org/wiki/Порт/Forwarding

[link2] https://secure.logmein.com/products/hamachi/vpn.asp?lang=ru

[link3] https://forums.hamachi.cc/viewforum.php?f=7

[link4] https://secure.logmein.com/products/hamachi/securityarchitecture.asp?engOK

[link5] http://wiki.noreply.org/noreply/TheOnionRouter/SshPortForwardedTor

[link6] http://www.pgpru.com/comment46949