Як я можу допомогти комусь (наприклад, бабусі) над SSH, який стоїть за маршрутизатором NAT?


14

Швидка допомога іншим, SSH дуже корисна, особливо в поєднанні з GNU Screen. Як правило, користувачі стоять за NAT-роутером. Навіть якщо користувач може налаштувати маршрутизатор, потрібен певний час, щоб запам'ятати пароль, знайти потрібні варіанти тощо.

Отже, який найпростіший спосіб допомогти іншим через SSH, якщо вони стоять за NAT-роутером?

В даний час я кажу людям відкрити термінал, виконайте команду нижче і передайте мені свій IP-адресу з такого веб-сайту, як http://ip.appspot.com/ :

sudo apt-get install openssh-server ssh-import-id && ssh-import-id lekensteyn

Очевидно, це не спрацює, якщо вони стоять за NAT-роутером або мають налаштований персональний брандмауер. Отже, чи є щось на кшталт:

sshd --accept-help-from lekensteyn

Я не шукаю альтернатив, таких як Teamviewer, просто оболонки, як SSH. Він також повинен бути з відкритим кодом.

Відповіді:


13

Якщо ваш власний комп’ютер може приймати з'єднання SSH, є спосіб використовувати техніку, з якою Павлос Г. зв’язується без додаткового комп’ютера.

Спочатку вам потрібен непривілейований * користувач, якого ваш друг підключить як:

sudo adduser reverse --shell /bin/false

Скажіть своєму другові, щоб почати тунель:

ssh -N -R 62222:localhost:22 reverse@lekensteyns-server

Потім на власному комп’ютері ( lekensteyns-server) запустіть зворотне з'єднання:

ssh -p 62222 localhost

* Я не знаю достатньо про безпеку, щоб мати змогу порадити щодо створення належно непривілейованих користувачів. Це, мабуть, щось, що слід висвітлити в окремому запитанні.



2

Виходячи з ваших конкретних потреб, я, ймовірно,:

  1. Попросіть їх сказати мені пароль маршрутизатора
  2. Вхід та налаштування переадресації портів лише для порту 22
  3. Підключіться через SSH (або тунелювання SSH, якщо вам потрібні додаткові порти, відкриті), і виконайте роботу.

Я також забув, що ви можете спробувати зворотний тунель ssh , хоча для цього рішення технічно потрібен ще один - середній комп'ютер, щоб працювати.

Більше інформації можна знайти тут


1), ймовірно, не працює, оскільки доступ до маршрутизаторів часто заборонений для населення.
Лекенштейн

2

Зазвичай я встановлюю тунель IPv6 (з Sixxs.net або he.net), якщо у них ще немає IPv6, і тоді комп'ютер має статичну адресу, і мені не потрібно возитися з NAT. Мені також подобається налаштувати автентифікацію на основі ключів (тоді вони не повинні вказувати вам свій пароль).

У Sixxs є власний клієнт, яким ви користуєтесь. Він працює за майже будь-яким NAT і автоматично оновлюється, коли змінюється IPv4-адреса. У них є інструкції, як його налаштувати, і він упакований для Ubuntu.

Hurricane Electric використовує тунель, куди пакети IPv6 надсилаються як корисне навантаження пакета IPv4. На відміну від Sixxs, TCP / UDP не використовується. Це означає, що NAT, за яким ви знаходитесь, повинен підтримувати переадресацію PROTOCOL 41 (не порт) і лише один комп'ютер позаду NAT може використовувати його. Програмне забезпечення для використання такого тунелю вбудоване в Ubuntu.

Для ВІН я використовую щось подібне в /etc/network/interfaces:

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
     endpoint 216.218.226.238
     address  2001:470:a29f::2
     netmask  64
     ttl 64
     up ip -6 route add default dev he-ipv6
     down ip -6 route del default dev he-ipv6

Інше, що вам потрібно зробити - оновити кінцеву точку тунелю. Оскільки ви не знаєте, коли зміниться Зовнішній IP, вам доведеться просто намагатися оновлювати кінцеву точку кожні кілька хвилин. Ви можете використовувати щось подібне і запустити це з cron:

#!/bin/sh
echo -n "Hurricane Electric Proto-41 tunnel endpoint update: "
#(C) 2010 Erik B. Andersen This script is licensed under the latest version of the
# AGPL published by the Free Software Foundation at http://www.gnu.org/licenses/ .
####Set these for each different site#########
pass="passwordhere"
user_id="a765b8e2f474667dcb56e08c5f1aa05b"
tunnel_id="97817"
####Past here doesn't need to be changed######
wget -4 "https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$(echo -n "${pass}" | md5sum | grep -o -E "[0-9a-fA-F]{32}")&user_id=${user_id}&tunnel_id=${tunnel_id}" -O /dev/null -o /dev/null --no-check-certificate
echo " Done"

1
Які зусилля потрібно докласти, щоб правильно встановити такий тунель? Це з'єднання, звичайно, засноване на ключах, тому я використовую ssh-import-id
Lekensteyn

Справді, я хотів би дізнатися більше про цю хитрість.
Rafał Cieślak

0

Протягом багатьох років я розробив графічний інтерфейс, щоб зробити саме те, що вимагає ОП ... за винятком того, що він вимагає ssh доступу до третього сервера з відкритим IP, як запропонував Павлос. Ви можете знайти тут пакунки debian та інструкції:

http://pietrobattiston.it/reachme

Зауважте, що він (як і раніше) не в змозі подбати про початкову конфігурацію, а саме - вам доведеться самостійно налаштувати клавіші rsa для підключення без пароля. Після налаштування "dosegm" дозволяє вам побачити, чи підключено "досяжність", і відкрити ssh-оболонку / переглядати файлову систему / переглянути екран (експериментальний).

Зрозуміло, що вам не потрібен третій комп’ютер, якщо ваш комп'ютер має загальнодоступну IP-адресу, як у відповіді ændrük. І зрозуміло, що користь GUI полягає в тому, що віддаленому користувачеві не потрібно вводити жодну команду в термінал ... але частина цієї переваги втрачається, якщо віддаленому користувачеві доведеться встановити домен. Тому я завжди завжди встановлюю і налаштовую досяжність для всіх, до яких я встановлюю Ubuntu.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.