Туннель SSH для удаленного рабочего стола через промежуточный сервер, часть II

10

Ранее я спрашивал, как настроить 2 SSH-туннеля с использованием промежуточного сервера для запуска через них удаленного рабочего стола, и мне удалось заставить его работать. Сейчас я пытаюсь сделать то же самое, используя те же машины, но в обратном порядке. Вот настройки:

  1. Windows 7 ПК в частной сети, сидит за брандмауэром.
  2. Сервер открытого доступа Linux, который имеет доступ к ПК.
  3. Windows 7 ноутбук, дома, на котором я хочу сделать удаленный рабочий стол с ПК.

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

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

Я подключаюсь к серверу Linux по SSH и запускаю 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
@ белый, я не вижу причин, по которым я не смогу использовать описанную мной настройку. Даже если есть более простые решения (требующие участия третьей стороны), я считаю, что это интересная задача.
Михай Тодор
1
Это очень пост, но проблема все еще существует, и это очень расстраивает, что все ответы, кажется, не имеют смысла. Соединение может быть инициировано, но оно разрывается через секунду после запуска. Комментарий о том, что «вход в систему через rdp нарушит это соединение», кажется, согласуется с тем, что наблюдается, но он не дает ответа на вопрос, почему и не предлагает решения.
Рерманс

Ответы:

3

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

Я переключился с putty на bitvise tunnelier и установил 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 (максимально допустимое значение для ЛВС, без учета кадров большого размера) ). Вы можете попробовать уменьшить их, чтобы уменьшить фрагментацию.

Смотрите также:

basvdlei
источник
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.

./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
Интересно. У меня больше нет доступа к этой настройке, поэтому я не смогу проверить вашу теорию, но было бы неплохо получить некоторые дополнительные сведения об этом для других людей, которые сталкиваются с той же проблемой. У вас есть ссылки на ваши претензии? Что вы подразумеваете под разрывом соединения?
Михай Тодор
0

я думаю, что вы можете сделать все конф с вашего ноутбука

установить соединение замазки к коробке linux на вашем ноутбуке. затем в «connection»> «SSH»> «tunnels» поместите 60666 в поле «source port» и убедитесь, что выбран переключатель «Local». в «пункте назначения» вы вводите win7-box-name-or-ip: 3389.

сохраните все это, и это позволит вам открыть сеанс putty для linux-box, который автоматически создает туннель, перенаправляющий трафик на localhost (ваш ноутбук): 60666 на win7: 3389

если вы делаете это в командной строке, это должно быть что-то вроде

ssh -L60666:win7:3389 linux-box
jwinders
источник
1
Итак, давайте посмотрим ... Эта конфигурация должна перенаправить порт 3389 с ПК на порт 60666 на ноутбуке. Я не вижу, как это будет работать, и, в любом случае, это не позволит мне сделать удаленный рабочий стол на ноутбуке ... Насколько я не могу сказать, это нужно сделать, используя 2 тоннели.
Михай Тодор
с этим конфигом вы не можете зайти на локальный хост: 60666 на своем ноутбуке?
Джуиндерс
Нет, это не работает.
Михай Тодор
1
Это не работает Единственный способ, которым я могу это сделать, - это сначала установить туннель от Linux на ПК, ssh 3389:localhost:3389 'domain\user'@PCа затем telnet localhost 3389на Linux.
Михай Тодор
1
Это интересный момент, но я не уверен, что понимаю, что его блокирует. В брандмауэре Windows есть правило, которое явно разрешает все подключения к порту 3389 из домена.
Михай Тодор
0

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

Джонатан Ллойд
источник
2
Хорошая попытка, но все же не удача :(
Михай Тодор