Openvpn клиент и прокси на одном сервере

Автор dzirtt, 19 августа 2014, 19:28:10

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

sandaksatru

#15
Цитата: dzirtt от 22 августа 2014, 09:30:47Каким образом запросы будут попадать на сервер с овпн клиентом, если у всех клиентов внутри сети будет .настроен прокси во внешней сети?
Очень просто. У клиентов локальной сети (192.168.1.0/24) в качестве шлюза (назовём его шлюз_1) должна выступать машина с openvpn-клиентом (192.168.1.41). Весь трафик идет через него. На нём также могут быть установлены другие сетевые службы (p2p-клиент и прочее). Так как у вас роль интернет-маршрутизатора играет другое устройство (192.168.1.1, назовём его шлюз_2), то на шлюзе_1 должен быть маршрут по умолчанию 0.0.0.0/0 via 192.168.1.1 и объявлен локальный маршрут 192.168.1.0/24. При подключении его к удаленному openvpn серверу (назовём его шлюз_3) на шлюзе_1 должны объявляться ещё два маршрута:
1) 10.188.1.5 dev tun0  proto kernel  scope link  src 10.188.1.6 - маршрут до openvpn сервера, поднимается при активации интерфейса tun0
2) 10.123.1.1 via 10.123.1.5 - маршрут на внутренний адрес интернет-маршрутизатора (пусть будет шлюз_4)  удаленной сети. (лучше подимать post-up скриптом, что-то типа route add -host 10.123.1.1 gw 10.123.1.5). Этот же интернет маршрутизатор имеет и внешний адрес, который указан у вас в качестве адреса сервера в настройках openvpn клиента.
И третий маршрут до прокси-сервера (если он будет находиться не на шлюзе_3 или шлюзе_4, а за ними):
3) xxx.xxx.xxx.xxx via 10.123.1.1, где xxx.xxx.xxx.xxx - глобальный адрес прокси-сервера. Объявлять лучше также post-up скриптом. Если прокси поднять на шлюзе_3 или шлюзе_4, то этот дополнительный маршрут объявлять не надо. Также нужно настроить маскарадинг для пакетов с локальной сети (что-то типа iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE). В настройках приложений в локальной сети, трафик от которых мы хотим шифровать через openvpn, мы указываем адрес прокси сервера xxx.xxx.xxx.xxx.

Рассмотрим структуру взаимодействия хостов на примере браузера:
а) Вы вбиваете в адресной строке браузера https://debianforum.ru. Браузер обращается к прокси по адресу xxx.xxx.xxx.xxx. Пакет от браузера идёт на шлюз_1 с целью попасть до конечного адресата.
б) Ядро на шлюз_1, обнаружив отдельный маршрут до адресата, маскарадит пакет в ip интерфейса tun0 и пересылает его шлюзу_3 через tun0.
в) Т.к. tun0 - всего лишь виртуальный интерфейс openvpn, то весь трафик шифруется и пересылается openvpn клиентом через шлюз_2 на адрес внешнего интерфейса шлюза_4.
г) Шлюз_4 этот трафик -DNATит уже внутрь сети до шлюза_3 на порт приложения openvpn-server. Приложение openvpn-server этот трафик дешифрует и передает ядру через tun+.
д) Шлюз_3 пересылает дешифрованный пакет до конечного адресата - xxx.xxx.xxx.xxx обратно через шлюз_4.
е) Прокси-сервер в итоге получает запрос от браузера, обращается к debianforum.ru, получает ответ от http-сервера и пересылает его назад шлюзу_4.
ж) Далее пакет проходит от адресата до адресанта по обратной цепочке. И Браузер наконец получает запрашиваемую информацию.

Что бы сделал я: арендовал VDS-ку где-нибудь в голландии и поднял на ней vpn-сервер и прокси-сервер. У вас значительно уменьшится путь прохождения пакетов. А под vpn рекомендую рассмотреть ipsec+gre. Работает гораздо стабильней openvpn'а и настраивается проще.

Цитата: dzirtt от 22 августа 2014, 09:30:47А подскажите ОС в которой есть функционал позволяющий реализовать такой механизм?
Я не знаю такую ОС. Просто жаль, что за маршрутизацию и фильтрацию пакетов отвечают разные компоненты ядра. Как-бы было здорово, если бы с помощью iptables ещё можно было бы и маршруты прописывать для нужных нам пакетов...  8)

dzirtt

Оставлю пока kvm, позже перекачусь на vds kvm.
Спасибо за советы.