Тунель SSH для віддаленого робочого столу через сервер-посередник, частина II


10

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

  1. ПК Windows 7 в приватній мережі, сидячи за брандмауером.
  2. Загальнодоступний сервер Linux, який має доступ до ПК.
  3. Домашній ноутбук Windows 7, на якому я хочу зробити віддалений робочий стіл від ПК.

Я використовую мастику на ноутбуці , щоб створити зворотний тунель від нього на сервер Linux: R60666 localhost:3389.

Я використовую мастику на комп'ютері , щоб створити регулярний тунель від нього на сервер Linux: L60666 localhost:60666.

Я SSH для Linux sever і запускаю telnet localhost 60666 і, здається, дає очікуваний вихід, як описано в підказках щодо налагодження, які я отримав тут .

Я намагаюся підключитися до віддаленого робочого столу з ПК на ноутбук: localhost:60666. Він запитує моє ім’я користувача та пароль, я натискаю кнопку ОК, і він блокує моє поточне сеанс на ноутбуці (тому я бачу вітальний екран на ноутбуці замість робочого столу), на екрані віддаленого робочого столу відображається повідомлення "Ласкаво просимо", а потім це просто стає чорним. Він не відключається, не дає помилок, і я не в змозі виконувати жодних дій на екрані віддаленого робочого столу. Я спробував те саме налаштування з ноутбуком Windows XP, і я відчуваю ті самі симптоми. Я також намагався використовувати різні порти, ніж 60666, але нічого не змінилося. Хтось має уявлення про те, що я роблю не так?


Оновлення : Як вказував @jwinders, я не в змозі запускати telnet PC 3389безпосередньо з сервера Linux. Оскільки у брандмауера Windows є правило, що дозволяє встановлювати всі з'єднання на порту 3389, я не маю поняття, що це блокує. На щастя, я можу створити тунель SSH з машини Linux на ПК ssh 3389:localhost:3389 'domain\user'@PC.


Я б серйозно просто використовував GoToMyPC на той момент.
ewwhite

1
@ewwhite Я не бачу жодної причини, чому я не зможу використовувати налаштування, описані нами. Навіть якщо є більш прості рішення (для яких потрібно залучати ще одну сторону), я вважаю це цікавим завданням.
Михай Тодор

1
Це дуже важливий пост, але проблема все ще існує, і це дуже засмучує, що всі відповіді, здається, не відповідають суті. З'єднання можна ініціювати, але воно розривається через секунду після його запуску. Коментар про те, що "вхід через rdp, порушить цей зв'язок", здається, узгоджується з тим, що спостерігається, але він не відповідає чому, ні він не пропонує рішення.
rhermans

Відповіді:


3

Я зіткнувся з тим самим чорним екраном + відключення проблеми сьогодні, використовуючи шпаклівку як мій клієнт. Зрештою, я знайшов рішення .

Я перейшов з програми "шпаклівка" на бітвіз-тунель і встановив S2Cз'єднання з такими налаштуваннями:

listen if:0.0.0.0
listen port:13389
destination host:localhost
dest port:3389

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

Для запису я жодним чином не пов’язаний з цими хлопцями.


2

Я не бачу нічого поганого у ваших тунелях SSH. Підключення до localhost: 60666 на ПК має закінчитися на localhost: 3389 на ноутбуці. І факт отримання екрана входу підтверджує цю оцінку.

Трохи гуглаючи на порожньому екрані, перейдіть до цієї статті бази знань Microsoft: http://support.microsoft.com/kb/555840 . У ньому зазначено, що порожній екран може виникнути через можливі невідповідності розміру MTU:

Правда, що сервер, клієнт та мережеве обладнання використовують розмір "MTU".

З огляду на ваші неабиякі мережеві перестрибування, брандмауери та те, що у вас є, фрагментація пакетів є цілком ймовірною :) Більшість машин Windows за замовчуванням використовують MTU 1300, тоді як у більшості ящиків Linux розміщено 1500 (максимальне дозволене значення для локальної мережі, не враховуючи рамки jumbo ). Ви можете спробувати зменшити їх, щоб зменшити фрагментацію.

Дивись також:


1
Дякую за підказку, але, на жаль, це не виходить. MTU як на моєму ноутбуці, так і на ПК встановлено на 1500 ( netsh interface ipv4 show subinterfaces) і має ping linux_server -f -l 1472успіх з обох машин. Так само, як тест, я спробував встановити MTU на ПК на 1300, але це не допомогло. Я також спробував змінити його на ноутбуці, але безрезультатно :( Мені цікаво, чи є якийсь "розумніший" спосіб налагодити цю проблему ...
Михай Тодор

1

Хіба VPN не буде більш підходящим? OpenVPN налаштовується дуже просто. Ось зразок конфігурації та декілька посилань, які направляють вас до процесу створення сертифіката

Просто налаштуйте посередника для господаря, і гості можуть зателефонувати і все одно спілкуватися один з одним.

apt-get install openvpn
mkdir /etc/openvpn/easy-rsa
mkdir -p /etc/openvpn/ccd/client_server
touch /etc/openvpn/ipp.txt
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca 
./build-key-server server
./build-dh
cd /etc/openvpn/easy-rsa/keys
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -certfile ca.crt

Потім створіть новий файл /etc/openvpn/client_server.confі помістіть у нього наступне, змінивши SERVER_IP_ADDRESSвідповідний

local SERVER_IP_ADDRESS
port 8443
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
pkcs12 /etc/openvpn/easy-rsa/keys/server.p12
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
ifconfig-pool-persist /etc/openvpn/ipp.txt
server 192.168.100.0 255.255.255.0
client-config-dir /etc/openvpn/ccd/client_server
ccd-exclusive
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
reneg-sec 0
client-to-client

Потім побудуйте ключ для кожного користувача, який збирається підключитися, і створіть конфігураційний файл у ccd dir

./build-key-pkcs12 user1@domain.com
echo "ifconfig-push 192.168.100.2 255.255.255.0" > /etc/openvpn/ccd/client_server/user1@domain.com

IP-адреса ОБОВ'ЯЗКОВО підходить для підмережі / 30 (див. Http://www.subnet-calculator.com/cidr.php ), оскільки для з'єднання доступні лише 2 адреси (сервер та клієнт). Отже, ваш наступний доступний IP-клієнт буде 192.168.100.6 тощо.

Потім у вас є статичні IP-адреси на кожного підключеного користувача.

Потім надайте the user1@domain.com.p12файл кінцевому користувачеві та використовуйте наступний конфігураційний файл

client
dev tun
proto udp
remote SERVER_IP_ADDRESS 8443
pkcs12 user1@domain.com.p12
resolv-retry infinite
nobind
ns-cert-type server
comp-lzo
verb 3
reneg-sec 0

1
Ну, так, це могло б спрацювати, але я не маю необхідного доступу до вікна Linux для встановлення матеріалів :( Все-таки я вважаю, що це все надзвичайно засмучує, оскільки воно працює в одному напрямку, а в іншому - не вдається.
Михай Тодор

1

Якщо ви запускаєте сеанс ssh в обліковому записі користувача (використовуючи програму, таку як putty.exe), коли ви намагаєтесь увійти через rdp, це порушить це з'єднання, що призведе до розриву сеансу rdp. Що вам потрібно зробити, це запустити ssh тунель як послугу, яка не буде перервана.


1
Цікаво. У мене більше немає доступу до цієї установки, тому я не зможу перевірити вашу теорію, але було б непогано отримати додаткові деталі щодо цього для інших людей, які стикаються з тією ж проблемою. Чи є у вас якісь посилання на ваші претензії? Що ви маєте на увазі під тим, що зв'язок порушив Putty?
Михай Тодор

0

Я думаю, що ти можеш робити всі конфіденції зі свого ноутбука

встановити з'єднання шпаклівки до вікна Linux на вашому ноутбуці. потім у 'з'єднанні'> 'SSH'> 'тунелях' поставте 60666 у поле 'вихідний порт' та переконайтесь, що вибрана локальна радіо-кнопка. у полі призначення ви вводите win7-box-name-or-ip: 3389.

збережіть все це, і це повинно дозволити вам відкрити сеанс шпаклівки до linux-box, який автоматично створює тунельний переадресаційний трафік до localhost (ваш ноутбук): 60666 до win7: 3389

якщо ви робите це в командному рядку, це повинно бути щось подібне

ssh -L60666:win7:3389 linux-box

1
Отже, давайте подивимось ... Ця конфігурація повинна переслати порт 3389 з ПК на порт 60666 на ноутбуці. Я не бачу, як це буде працювати, але, в будь-якому випадку, це не дозволить мені робити віддалений робочий стіл на ноутбуці ... Наскільки я не можу сказати, це потрібно зробити за допомогою 2 тунелі.
Михай Тодор

З цією конфіденцією ви не можете rdp до localhost: 60666 на своєму ноутбуку?
jwinders

Ні, це не працює.
Михай Тодор

1
Це не працює. Єдиний спосіб, що мені вдається зробити це - спершу встановити тунель від linux box до ПК, ssh 3389:localhost:3389 'domain\user'@PCа потім зробити telnet localhost 3389на Linux box.
Михай Тодор

1
Це цікавий момент, але я не впевнений, що розумію, що це блокує. У брандмауері Windows є правило, яке явно дозволяє всі з'єднання порту 3389 з домену.
Михай Тодор

0

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


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