
У меня возникла странная проблема.
Я создал новый Linode, который будет выступать в качестве конечной точки туннелирования.
Мне удалось успешно удаленно перенаправить порт 1194, так что теперь соединения с linode-server@1194 успешно устанавливаются на порт 1194 моего компьютера, и я могу подключиться к своему VPN, подключившись к порту 1194 на моем linode-server.
Ниже приведена команда, которую я использовал (она работает):
ssh -N -R 1194:localhost:1194 [email protected]
Теперь я хочу перенаправить и 443. Я попробовал это:
ssh -N -R 443:192.168.1.122:443 [email protected]
Мой локальный сервер намеренно прослушивает 192.168.1.122 (не localhost).
Однако указанная выше команда не открывает порт 443 на сервере. Я получаю следующую ошибку:
Предупреждение: не удалось выполнить переадресацию удаленного порта для прослушиваемого порта 443
Итак, я проверил на своем linode-server, работает ли что-нибудь на порту 443. Ничего не работает:
user@linode-server:~$ sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 7438/sshd: user
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 411/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2377/sshd: /usr/sbi
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1513/master
tcp6 0 0 :::1194 :::* LISTEN 7438/sshd: user
tcp6 0 0 :::22 :::* LISTEN 2377/sshd: /usr/sbi
tcp6 0 0 :::25 :::* LISTEN 1513/master
udp 0 0 127.0.0.53:53 0.0.0.0:* 411/systemd-resolve
user@linode-server:~$
На сервере нет soft-firewall. А облачный firewall Linode отключен, я все равно не могу этого сделать.
Я совершенно не понимаю, почему не работает переадресация 443.
PS - аутентификация пользователя при создании туннеля работает нормально.
Я не уверен, поможет ли это, но мой sshd_config выглядит так:
user@linode-server:~$ cat /etc/ssh/sshd_config | grep -v "^#" | grep -v "^$"
Include /etc/ssh/sshd_config.d/*.conf
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
GatewayPorts yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
user@linode-server:~$
И чтобы прояснить, нет ничего в/etc/ssh/sshd_config.d/
Подробное логирование с помощью sshd на linode-server:
...
Aug 14 09:00:32 connect sshd[9499]: Postponed publickey for pi from *HIDDEN: My home public IP* port 49180 ssh2 [preauth]
Aug 14 09:00:32 connect sshd[9499]: Accepted key RSA *HIDDEN* found at /home/pi/.ssh/authorized_keys:1
Aug 14 09:00:32 connect sshd[9499]: Accepted publickey for pi from *HIDDEN: My home public IP* port 49180 ssh2: RSA *HIDDEN*
Aug 14 09:00:32 connect sshd[9499]: pam_unix(sshd:session): session opened for user pi by (uid=0)
Aug 14 09:00:32 connect systemd-logind[578]: New session 157 of user pi.
Aug 14 09:00:32 connect sshd[9499]: User child is on pid 9579
Aug 14 09:00:32 connect sshd[9579]: bind [0.0.0.0]:443: Permission denied
Aug 14 09:00:32 connect sshd[9579]: error: bind [::]:443: Permission denied
Aug 14 09:00:32 connect sshd[9579]: error: channel_setup_fwd_listener_tcpip: cannot listen to port: 443
...
Почему отказано в разрешении? Команда удаленной переадресации, которую я использовал выше, использует одного и того же пользователя (как для успешного, так и для неудачного туннеля).
Только что найденоздесьчто это может быть из-за того, что 443 — привилегированный порт. Теперь я не хочу использовать пользователя root для включения удаленной пересылки на 443. Я заблокировал linode-server и не могу войти в систему как root (и я не хочу разрешать вход root). Согласно приведенной выше ссылке, я могу использовать setcap
, на linode-server, но как мне это сделать, поскольку команда открытия туннеля фактически запускается с моего локального компьютера. Какие у меня есть альтернативы? Я знаю, что, возможно, использование более высокого порта на linode-server сработает, но я не хочу этого делать. Я бы очень хотел, чтобы это был порт 443, чтобы мне не нужно было запоминать порт.
решение1
На локальном сервере вместо этого инициирована удаленная переадресация порта с порта 8080 (непривилегированный порт)
ssh -N -R 8080:192.168.1.122:443 [email protected]
На linode-server установил инструмент под названием socat
и использовал следующую команду для локальной переадресации с 8080 на 443 на linode server, и теперь это работает :)
sudo socat TCP-LISTEN:443,fork TCP:0.0.0.0:8080
решение2
Проблема в том, что порт 443 не прослушивается. Для того, чтобы вы могли подключаться к порту 443, должен быть процесс, прослушивающий порт 443. Если вы посмотрите на свой netstat, вы увидите, что в настоящее время у вас есть процесс, прослушивающий порт 1194, поэтому подключения к порту 1194 успешны. Вам нужно изменить этот процесс для прослушивания порта 443.
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 7438/sshd: pi