Як прокласти конкретні адреси через тунель?


14

Є певні веб-сайти / сервіси, до яких я можу отримати доступ лише з підмережі, на якій розміщений мій сервер (подумайте про типовий сценарій інтранет). Чи є спосіб прозоро маршрутизувати трафік, який прямує до цих адрес через тунель SSH?

Розглянемо наступне налаштування:

Мій ноутбук підключений до домашньої мережі. Він не має доступу до служб на ips X та Y безпосередньо. У мене тунель SSH до сервера, який знаходиться в підмережі, який фактично може отримати доступ до цих служб.

Чи можу я якось автоматично інкапсулювати весь трафік до підмереж X та Y, щоб пройти цей тунель, не запускаючи все рішення VPN, яке б передавало весь мій трафік через сервер? Іншими словами: весь трафік, який спрямовується на будь-яку іншу підмережу, все одно повинен прямувати з ноутбука, не проходячи через сервер (використовуючи тунель).

Відповіді:


6

Ви можете вказати інтерфейс, через який потрібно прокладати трафік у таблиці маршрутів:

sudo route add <host.com> -interface <ppp0>

Де host.com - ім'я хоста або ip, до якого ви хочете отримати доступ через інтерфейс, а ppp0 - ідентифікатор посилання для вашого vpn, показаного ifconfigкомандою.


2
Примітка: принаймні, для ubuntu -interfaceне є варіантом, routeтому вищенаведена пропозиція дає помилку використання. Також як це призведе до маршрутизації через тунель ssh, коли запитає ОП?
аріельф

3

Останні версії мережевих пристроїв підтримки OpenSSH для підтримки справжньої VPN. Див. Https://help.ubuntu.com/community/SSH_VPN для деякої базової документації (очевидно, призначена для Ubuntu, але основний принцип застосовується в інших місцях.)


Зауважте, що для цього потрібні привілеї root як на ноутбуці, так і на хості шлюзу.
Ріккардо Муррі

1

Відмова: Я насправді не перевіряв те, що збираюсь описати, і справді це може бути абсолютно неправильно, але ваше запитання настільки інтригує, що я не можу втриматися від спокуси скласти відповідь. :-) Також налаштування тут залежить від певної iptablesфункціональності, яка може існувати лише в Linux.

Якщо припустити, що ви хочете підключитися зі свого ноутбука до певного порту P1 на сервері X1, до порту P2 на сервері X2 і т.д. Примітка: IP-адреси X1, X2 тощо - це IP-адреси сервера, як видно з хоста шлюзу (того, у який ви SSH).

  1. Виберіть декілька невикористаних локальних портів L1 (наприклад, 10000), L2 (наприклад, 10001) і т.д. портів пар.

  2. Використовуйте iptablesдля переадресації пакетів, спрямованих на Xn: Pn на localhost: Ln

    iptables -t nat -A OUTPUT -p tcp -d X1 --повідомлення P1 -j DNAT - місце призначення місцеположення: L1 iptables -t nat -A OUTPUT -p tcp -d X2 - повідомлення P2 -j DNAT - Місцевий хост до місця призначення: L2

  3. Тепер SSH до шлюзу, використовуючи -Lопцію для тунельного трафіку з localhost: Ln до (Xn, Pn):

    ssh gateway.server -L localhost: L1: X1: P1 -L localhost: L2: X2: P2 ...

Приклад:

# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80

Застереження:

  • він працює тільки для TCP, якщо він працює взагалі ...

  • якщо ви хочете отримати доступ до декількох серверів, можливо, буде менше роботи з налаштуванням VPN

  • можливо, все ще буде простіше використовувати -Dопцію SSH, щоб імітувати проксі-сервер SOCKS і тунель весь ваш трафік через це.


Це насправді працює! (На жаль, це не відповідає моїй конкретній ситуації, коли я хочу маршрутизувати трафік, який походить з віртуальної машини, а не з localhost.)
pvgoran

1

підмережі X і Y, щоб пройти цей тунель, не запускаючи все рішення VPN, яке б передавало весь мій трафік через сервер?

Що ви хочете - це визначення VPN.

VPN не повинен

надіслати весь [ваш] трафік через сервер?

Якщо це так, він не налаштований належним чином.

Передбачається, що будь-яка машина, до якої намагаються отримати доступ через тунель або VPN, за визначенням, недоступна через Інтернет. Отже, лише потрібна, неінтернетна адреса маршрутизації повинна бути спрямована вниз по VPN.

Якщо у вас складніша ситуація, наприклад, лише машини X і Y і більше нічого. Ваш ІТ-персонал може розмістити їх у підмережі. Потім на вашому клієнтському комп’ютері прокладайте лише маршрут, який підмережі знижує VPN.


0

Чи можу я якось автоматично інкапсулювати весь трафік до підмереж X та Y, щоб пройти цей тунель, не запускаючи все рішення VPN, яке б передавало весь мій трафік через сервер?

Це на перший погляд трохи дивно, тому що саме це зробить VPN. SSH, як правило, є точковою справою, ідея полягає в тому, що ви підключите один порт на локальній машині до порту віддаленої машини в іншому місці; він насправді не розрахований на тип руху, який ви передбачаєте.

Іншими словами: весь трафік, який спрямовується на будь-яку іншу підмережу, все одно повинен прямувати з ноутбука, не проходячи через сервер (використовуючи тунель).

Знову про це подбає VPN.

Якщо ви стурбовані "важкою вагою" рішення щодо отримання безпечного трафіку VPN (тобто ви не хочете мавпати з ним, оскільки це було б занадто складно), вам слід по-справжньому подивитися на OpenVPN , який буде робити саме те, що ви описуєте. Це не тільки охоплює весь трафік, але це може бути зроблено таким чином, що лише трафік, призначений для цих підмереж, здійснить поїздку по VPN-трубі. Попереджую, що вам потрібно буде відредагувати текстовий файл на локальній і віддаленій машині, але запустити його досить просто.

Для ваших цілей, оскільки ви не хочете, щоб учасник посередині (сервер) бачив ваш трафік, ви встановили VPN для підключення безпосередньо зі свого комп'ютера до віддаленої машини. Будь-які маршрутизовані пакети будуть зашифровані перед виходом з ноутбука, тож ви маєте 100% покриття від кінця до кінця.


0

Як говорили інші, якщо вам потрібно "інкапсулювати весь трафік до підмереж", то, ймовірно, ви хочете використовувати VPN.

Однак для доступу до кількох сервісів, можливо, ви хочете скористатися функцією переадресації локального порту SSH, що дуже просто. Наприклад, якщо ви введете (зі свого ноутбука):

ssh -N -L 3333:localhost:2222 jump_box

то підключення до localhost:2222, буде так само , як підключення до localhost:2222з jump_box. Ви можете використовувати декілька опцій -L одночасно, і ви можете підключитися до сервісів на інших хостах, якщо ssd_config увімкнено jump_box.

Ви можете використовувати autosshза systemdдопомогою тощо, щоб підтримувати та працювати тунелі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.