Существуют определенные веб-сайты / службы, к которым я могу получить доступ только из подсети, в которой находится мой сервер (вспомните типичный сценарий интрасети). Есть ли способ прозрачной маршрутизации трафика, который идет на эти адреса через туннель SSH?
Рассмотрим следующую настройку:
Мой ноутбук подключен к домашней сети. Он не может получить доступ к сервисам на ips X и Y напрямую. У меня есть туннель SSH к серверу, который находится в подсети, которая на самом деле может получить доступ к этим службам.
Могу ли я каким-то образом автоматически инкапсулировать весь трафик в подсети X и Y для прохождения через этот туннель без необходимости запуска всего решения VPN, которое будет отправлять весь мой трафик через сервер? Другими словами: весь трафик, который идет в любую другую подсеть, должен по-прежнему идти напрямую с ноутбука, не проходя через сервер (используя туннель).
источник
-interface
это не вариант,route
поэтому приведенное выше предложение дает ошибку использования. Кроме того, как это приведет к маршрутизации через туннель ssh, как запрашивает OP?Последние версии OpenSSH поддерживают настройку сетевых устройств для настройки VPN. См. Https://help.ubuntu.com/community/SSH_VPN для некоторой базовой документации (очевидно, предназначенной для Ubuntu, но основной принцип применяется в другом месте.)
источник
Отказ от ответственности: я на самом деле не проверял то, что собираюсь описать, и действительно, это может быть совершенно неправильно, но ваш вопрос настолько интригует, что я не могу удержаться от соблазна составить ответ. :-) Кроме того, настройка здесь зависит от некоторых
iptables
функций, которые могут существовать только в Linux.Предполагая, что вы хотите подключиться со своего ноутбука к определенному порту P1 на сервере X1, к порту P2 на сервере X2 и т. Д. - я собираюсь описать, как маршрутизировать трафик TCP на эти конкретные пары сервер + порт через туннель SSH. Примечание. IP-адреса X1, X2 и т. Д. Являются IP-адресами сервера, которые видны с хоста шлюза (с которым вы работаете по SSH).
Выберите некоторые неиспользуемые локальные порты L1 (например, 10000), L2 (например, 10001) и т. Д. Порты L1, L2, ... должны быть все различны, и их количество должно быть равно количеству отдельных (Xn, Pn) серверов + портовые пары.
Используется
iptables
для перенаправления пакетов, направленных на Xn: Pn, на localhost: Lniptables -t nat -A ВЫХОД -p tcp -d X1 --dport P1 -j DNAT - к локальному узлу назначения: L1 iptables -t nat -A OUTPUT -p tcp -d X2 - порт P2 -j DNAT - локальный пункт назначения: L2
Теперь SSH к шлюзу, используя
-L
опцию для туннелирования трафика от localhost: Ln до (Xn, Pn):ssh gateway.server -L локальный хост: L1: X1: P1 -L локальный хост: L2: X2: P2 ...
Пример:
Предостережения:
он работает только для TCP, если он вообще работает ...
если вы хотите получить доступ к более чем одному серверу, возможно, потребуется меньше усилий для настройки VPN
все еще может быть проще использовать
-D
опцию SSH для симуляции прокси-сервера SOCKS и туннелирования всего вашего трафика через него.источник
То, что вы хотите, это определение VPN.
VPN не должен
Если это так, он не настроен должным образом.
Предполагается, что любая машина, к которой вы пытаетесь получить доступ через туннель или VPN, по определению недоступна через Интернет. Таким образом, только необходимый, не маршрутизируемый через Интернет адрес должен маршрутизироваться по VPN.
Если у вас более сложная ситуация, например, машина X и Y и ничего больше. Ваш ИТ-персонал может поместить их в подсеть для вас. Затем на вашем клиентском компьютере только маршрутизируйте эту подсеть вниз по VPN.
источник
На первый взгляд это немного странно, потому что именно это VPN сделает для вас. SSH имеет тенденцию быть делом точка-точка, идея состоит в том, что вы подключаете один порт на вашем локальном компьютере к порту удаленного компьютера в другом месте; это действительно не было разработано для того типа трафика, который вы себе представляете.
Опять же, VPN позаботится об этом.
Если вас беспокоит «тяжеловесное» решение для получения защищенного VPN-трафика (т.е. вы не хотите с ним мириться, потому что это будет слишком сложно), вам стоит обратить внимание на OpenVPN. , который будет делать именно то, что вы описываете. Он не только инкапсулирует весь трафик, но и может быть выполнен таким образом, что только трафик, предназначенный для этих подсетей, будет проходить через канал VPN. Я предупрежу вас, что вам все еще нужно будет отредактировать текстовый файл на локальном и удаленном компьютере (ах), но его довольно легко запустить.
Для ваших целей, поскольку вы не хотите, чтобы сторона в середине (сервер) видела ваш трафик, вы должны настроить VPN для прямого подключения вашего компьютера к удаленному компьютеру. Любые маршрутизируемые пакеты будут зашифрованы перед тем, как покинуть ваш ноутбук, поэтому у вас будет 100% сквозное покрытие.
источник
Как уже говорили другие, если вы должны «инкапсулировать весь трафик в подсети», то вы, вероятно, захотите использовать VPN.
Однако, чтобы получить доступ только к нескольким службам, вы можете использовать функцию переадресации локальных портов SSH, которая действительно проста. Например, если вы введете (с вашего ноутбука):
затем подключение к
localhost:2222
, будет похоже на подключение кlocalhost:2222
отjump_box
. Вы можете использовать несколько опций -L одновременно, и вы можете подключиться к сервисам на других хостах, если ssd_config включенjump_box
позволяет это.Вы можете использовать
autossh
сsystemd
или как, чтобы поддерживать туннели в рабочем состоянии.источник