Назад | Перейти на главную страницу

SSH Socks Proxy с iptables REDIRECT

Я погуглил и не нашел ответа на свой вопрос. Помоги мне, пожалуйста. Есть два сервера:

serverA with public IP 12.0.0.10 and an private IP 10.0.0.5
serverB with public IP 20.0.0.11

Я установил прокси SOCKS на serverB на serverA:

ssh -D20.0.0.11:2222 root@12.0.0.10

Поэтому, когда на моем локальном компьютере в браузере я указываю прокси-сервер SOCKS 20.0.0.11:2222 (serverB: 2222) в качестве внешнего IP-адреса во время просмотра, я получаю 12.0.0.10 (IP-адрес serverA). Все в порядке.

Как хорошо, если я пойду на http://10.0.0.5 (частный IP-адрес сервера) он также доступен. Это то, что мне нужно. Я хочу сделать серверs A private IP to be available through servers B публичный IP-адрес на определенных портах, но без указания SOCKS в моем браузере.

Я мог бы использовать переадресацию порта ssh, но проблема в том, что мне нужно переадресовать много портов, и я не знаю, какие именно - я знаю только диапазон.

Поэтому, когда я подключаюсь к 20.0.0.11 к любому порту, например, из диапазона 3000: 4000, я хочу, чтобы этот трафик был перенаправлен на 10.0.0.5 на том же порту. Вот почему я решил, что может мне помочь прокси SOCKS через SSH и iptables REDIRECT.

Клиент -> serverBPublicIP (любой порт из диапазона 3000: 4000) -> serverAPublicIP -> serverAPrivateIP (порт был запрошен на serverBPublicIP)

На serverB я делаю:

ssh -D20.0.0.11:2222 root@12.0.0.10
iptables -t nat -A PREROUTING -d 20.0.0.11 -p tcp --dport 3000:4000 -j REDIRECT --to-port 2222

Но это не работает - например, когда я использую telnet на 20.0.0.11:3001, я не вижу прокси-трафика на serverA. Что мне еще делать? Я пробовал такой tcpsocks (например, я подключаюсь к 20.0.0.11:3001)

Client -> 20.0.0.11:3001 -> iptables REDIRECT from 3001 --to-port 1111 -> tcpsocks from 1111 to 2222 -> SOCKS proxy from serverB to serverA on port 2222 -> serverA

Но я не знаю, что делать с трафиком на serverA. Как направить его на его частный IP. Помоги мне, пожалуйста. Я знаю, что VPN удаляет весь ад, который я пытаюсь создать, но у меня нет возможности использовать устройство tun / tap. Он отключен.

Я знаю, что VPN удаляет весь ад, который я пытаюсь создать, но у меня нет возможности использовать устройство tun / tap. Он отключен.

Звучит немного странно, но tun / tap (AFAIK) будет использоваться только для SSL VPN (например, openVPN).

Это означает, что вам может повезти больше с IPSEC VPN, например с strongswan (https://strongswan.org/), который не использует устройства tun / tap.

Как вы говорите, запускать 10 или 100 туннелей SSH бок о бок - это немного утомительно и непросто.

Если IPSEC VPN также не будет работать, вы можете попробовать разместить haproxy на сервере A и создать один SSH-пересылку (-L) вместо НОСКИ (-D) туннель. Таким образом, вы можете настроить (веб-сервер) на B для использования этого сервера пересылки в качестве восходящего потока и использовать haproxy на A для работы с несколькими службами и т. Д.

В качестве альтернативы можно было бы сделать что-то вроде:

ssh -L 3000:10.0.0.5:3000 -L 3001:10.0.0.5:3001 .... -L 4000:10.0.0.5:4000 12.0.0.10

Это создаст тысячу и один отдельный туннель ssh для каждого порта. Я никогда не пробовал настраивать более тысячи одновременных туннелей ssh, поэтому я понятия не имею, какой будет производительность, будет ли она вообще работать, или вам придется настраивать несколько параллелей. ssh процессы.

Это будет довольно длинная командная строка, я бы посоветовал написать какой-нибудь скрипт для фактического вызова команды.

В общем, я бы не рекомендовал, если это вообще возможно, настраивать VPN.

Есть ли причина, по которой ваши пользователи не могут просто подключиться к 12.0.0.10 напрямую? Или порты не открываются через брандмауэр? Если нет, не можете ли вы просто открыть порты в брандмауэре с выбранных IP-адресов, или у вас есть соображения безопасности, которые не позволяют вам это сделать?