У меня есть следующие настройки:

  1. Маршрутизатор с доступом в интернет
    • Публичный статический IP-адрес
    • Низкий функционал
    • Имеет функцию "Переадресация портов"
    • Локальный IP-адрес: 192.168.1.1
  2. Сервер Linux (Ubuntu), подключенный к VPN-сервису (не контролируемый мной), в качестве шлюза для клиента (3)
    • Интерфейс enp0s3: gw: 192.168.1.1; IP-адрес: 192.168.1.10
    • Интерфейс tun0 - VPN соединение
  3. Клиент Windows 7
    • Сетевой интерфейс: gw: 192.168.1.10; IP-адрес: 192.168.1.8

Правила iptables на сервере (2):

*nat
:PREROUTING ACCEP T [443:55918]  
:INPUT ACCEPT [21:3328]
:OUTPUT ACCEPT [22:1600]
:POSTROUTING ACCEPT [73:4883]
-A POSTROUTING -s 192.168.1.8/32 -o tun0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [2135:1080592]
:FORWARD ACCEPT [846:190487]
:OUTPUT ACCEPT [1592:396526]
-A FORWARD -s 192.168.1.8/32 -i tun0 -o enp0s3 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.1.8/32 -i enp0s3 -o tun0 -j ACCEPT
COMMIT

Как мне перенаправить порт для подключения SSH к клиенту через адрес внешнего маршрутизатора? (Я не могу сделать это через VPN).

1 ответ1

0

Это легко сделать с помощью резервного SSH-соединения.

Подготовка на сервере:

Я предполагаю, что у вас установлен и запущен cron . Создайте новый файл в /etc/cron.hourly со следующим содержимым: (не забудьте chmod +x файл!)

#!/bin/bash
cstate=$(netstat -na | grep "tcp" | grep "<IP-of-home-machine>:22" | tr -s " " | cut -d " " -f 6 | head -n 1)
cdate=$(date "+%Y-%m-%d %H:%M:%S")
if [[ $cstate == "ESTABLISHED" ]] || [[ $cstate == "TIME_WAIT" ]]
then
    echo "[$cdate] SSH connection up. ($cstate)" >> /var/log/check-ssh-relay.log
else
    echo "[$cdate] SSH connection broken. ($cstate) Reconnecting..." >> /var/log/check-ssh-relay.log
    ssh -N -f -R 12122:localhost:22 <username>@<IP-of-home-machine>
fi

Это будет проверять ежечасно, если соединение установлено и пытается повторно подключиться, если это не так. Полезно, когда ваш компьютер дома не всегда включен. Он записывает информацию журнала в /var/log/check-ssh-relay.log . Аутентификация выполняется с помощью SSH-ключей, поэтому убедитесь, что вы правильно настроили эту настройку заранее.

На вашем компьютере дома:

Если вы правильно настроили openssh-сервер, все что вам нужно сделать сейчас:

$ ssh <server-username>@localhost -p 12122

Чтобы создать соединение SSH. SCP, SFTP и co. тоже работает конечно.

Если по соображениям безопасности вы хотите изменить порт SSH по умолчанию на вашем домашнем компьютере, просто замените :22 в приведенном выше сценарии на стороне сервера на выбранный вами пользовательский порт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .