Проблема
Мне нужно получить доступ к нескольким различным сетям VPN одновременно, в основном по HTTP, а иногда и по SSH. Кроме того, мне не разрешено использовать openvpn на моей рабочей станции (никаких юридических ограничений, скорее, проблема инфраструктуры). Экспедирование портов в порядке.
Следующая диаграмма представляет собой попытку изобразить вовлеченные стороны. Моя рабочая станция хочет получить доступ host1.private-network1.de
и host2.private-network1.de
которые не видны в Интернете. Учреждение требует, чтобы я ввел их VPN для доступа к этой машине. То же самое относится к третьему хосту во второй частной сети. Мне нужно получить доступ к машине через порт 22, но это возможно только внутри VPN.
Мое предполагаемое решение
(Другие решения тоже подойдут)
Я планирую использовать подконтрольный мне прокси-сервер (например, RPI) для подключения к разным сетям через openvpn. На месте прокси-сервер позволяет переадресацию портов с помощью SSH. На моей рабочей станции я теперь мог настроить переадресацию портов, например:
Вопрос в том, как настроить несколько сетей OpenVPN в Linux, чтобы я мог использовать простую переадресацию портов (как показано на рисунке) для доступа к разным хостам в разных частных сетях. VPN должны только использоваться для переадресации этого порта. Оставшийся трафик на прокси-узле (например, обновления) не должен маршрутизироваться через какое-либо из этих VPN-подключений. Даже желательно, чтобы весь оставшийся трафик все еще можно маршрутизировать через третью VPN, но это может быть другим вопросом.
ОТ: С Рождеством :)
Я предполагаю, что обе частные сети предоставляют общедоступный сервер OpenVPN и проталкивают соответствующие маршруты.
Просто подключитесь ко всем серверам OpenVPN одновременно с прокси-сервера. Бегать ip route show
чтобы убедиться, что трафик по умолчанию не проходит через VPN.
Теперь используйте iptables
на прокси-сервере для перенаправления портов на частные хосты:
iptables -t nat -A PREROUTING -p tcp --dport 2223 -j DNAT --to host1.private-network1.de:22
iptables -t nat -A PREROUTING -p tcp --dport 8081 -j DNAT --to host2.private-network1.de:80
iptables -t nat -A PREROUTING -p tcp --dport 2224 -j DNAT --to host.private-network2.de:22
iptables -t nat -A POSTROUTING -s <WORKSTATION_IP> -j MASQUERADE
Заменить <WORKSTATION_IP>
с IP-адресом Рабочей станции (видимым прокси-сервером) и host1.private-network1.de
с IP-адресом, через который частный хост доступен для прокси-сервера.
Теперь, если вы хотите использовать ssh в host1.private-network1.de
, делать:
ssh <proxy_server_ip> -p 2223
На месте прокси-сервер позволяет переадресацию портов с помощью SSH.
Не используйте SSH-туннелирование. Это ненадежно и медленно. В основном он используется для создания временных туннелей.