Я пытаюсь получить доступ к VNC-серверам двух разных машин, расположенных в одной локальной сети, из WAN.
Поскольку я хочу, чтобы этот трафик маршрутизировался в туннель SSH, я использую ssh admin@xxxxxx.net -N -L 15900:127.0.0.1:5900
а потом vnc://admin@127.0.0.1:15900
, без проблем для первой машины.
Для второй машины я подключил порт 2222 к порту 22 IP-адреса этой машины в моем маршрутизаторе. NAT также настроен для переадресации порта 5900 на IP-адрес первой машины и порта 5901 на порт 5900 IP-адреса второй машины.
Я предполагал, что ssh -p2222 admin@xxxxxx.net -N -L 15901:127.0.0.1:5901
а потом vnc://admin@127.0.0.1:15901
будет работать, но это не так.
Оболочка, в которой я запускаю ssh -p2222 admin@xxxxxx.net -N -L 15901:127.0.0.1:5901
командные выходы:
канал 2: ошибка открытия: ошибка подключения: соединение отклонено
когда я пытаюсь использовать VNC в машине.
Я попытался ssh -v -p2222 admin@xxxxx.net -N -L 15901:127.0.0.1:5901
и я получил:
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 102: Applying options for *
debug1: Connecting to xxxxx.net [xx.xx.xx.xx] port 2222.
debug1: Connection established.
debug1: identity file /Users/admin/.ssh/id_rsa type 1
debug1: identity file /Users/admin/.ssh/id_rsa-cert type -1
debug1: identity file /Users/admin/.ssh/id_dsa type -1
debug1: identity file /Users/admin/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.2
debug1: match: OpenSSH_5.2 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA xx:xx:xx:xx
debug1: Host '[xxxxx.net]:2222' is known and matches the RSA host key.
debug1: Found key in /Users/admin/.ssh/known_hosts:60
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Next authentication method: public key
debug1: Offering RSA public key: /Users/admin/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (public key).
Authenticated to xxxxx.net ([xx.xx.xx.xx]:2222).
debug1: Local connections to LOCALHOST:15901 forwarded to remote address 127.0.0.1:5901
debug1: Local forwarding listening on ::1 port 15901.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 127.0.0.1 port 15901.
debug1: channel 1: new [port listener]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Connection to port 15901 forwarding to 127.0.0.1 port 5901 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 15901 for 127.0.0.1 port 5901, connect from 127.0.0.1 port 51974, channels 3
Кто-нибудь знает?
В последней команде допущена опечатка:
vnc://admin@127.0.0.1:159001
должен заявить
vnc://admin@127.0.0.1:15901
Если я правильно понимаю схему сети, вы не понимаете, как туннель SSH взаимодействует с NAT. По сути, как только NAT-маршрутизатор перенаправил ваше SSH-соединение с externalIP: 2222 на privateIP1: 22, NAT сделал свое дело и вышел из уравнения.
Чтобы получить VNC-соединение со вторым внутренним компьютером, вам необходимо туннелировать соединение, которое будет идти от порта 15901 на локальном компьютере через SSH-соединение к первому внутреннему компьютеру, а затем оттуда ко второму внутреннему компьютеру. Вы делаете это с ssh -p2222 admin@xxxxxx.net -N -L 15901:privateIP2:5900
.
Часть "privateIP2: 5900" - это то, что вам не хватает; ваша версия сообщает первому компьютеру о необходимости перенаправить соединение самому себе (127.0.0.1) на порт 5901; там ничего не слушает, поэтому он отклоняется.
Вы делаете не хотите, чтобы NAT-бокс перенаправлял порты 5900 и 5901 на что угодно - это позволило бы любому VNC подключаться к этим компьютерам из любого места и полностью игнорировать туннель SSH.