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

OpenVPN для правил пользователя без маршрутизации интернет-трафика

РЕДАКТИРОВАТЬ: Я знаю это learn-address это то, что мне нужно использовать для вызова скрипта (как указано в openvpn-netfilter project), чтобы установить правила брандмауэра. Думаю, мой вопрос больше связан с config.ovpn сценарий. Как вы настраиваете client.ovpn файлы, чтобы одновременно узнать, какие маршруты к пользователю нужны, а также сохранить интернет-трафик к провайдеру пользователя?

У меня вопрос о том, как сделать правила брандмауэра для каждого пользователя, а также не маршрутизация интернет-трафика через сервер OpenVPN. Я пытаюсь настроить VPN-сервер для группы друзей, пока мы работаем над проектом. Я буду реализовывать что-то вроде этого проекта Github: https://github.com/gdestuynder/openvpn-netfilter. Это позволит серверу VPN искать ACL для пользователя и реализовывать их с помощью iptables на стороне сервера. Весь другой трафик будет отключен.

Я знаю, что для моей личной домашней VPN я могу использовать следующие client.ovpn config для не маршрутизировать интернет-трафик через VPN:

route-nopull
route 192.168.1.0 255.255.255.0

куда 192.168.1.0/24 это моя домашняя подсеть, и 10.8.0.0/24 (не показан) - это диапазон IP-адресов DHCP tun адаптер. Я знаю, что размещение этого в конфигурации клиента переопределяет настройку сервера push "redirect-gateway def1 bypass-dhcp".

Вот где я запутался: я уже знаю, что моя домашняя подсеть 192.168.1.0/24, поэтому я легко могу поместить это в client.ovpn файл. Но если я ничего не знаю о подсетях / IP-адресах, к которым у меня есть доступ (как у большинства пользователей), как OpenVPN динамически передает клиенту правила VPN для каждого пользователя?

Другими словами, если user1 имеет доступ к 10.0.0.2 и 10.0.2.10 и user2 имеет доступ к 10.0.2.10 и 10.0.3.4, как OpenVPN узнает, что нужно направлять правильные маршруты каждому пользователю, используя при этом те же общие client.ovpn конфигурация?

Вы можете отправить своим клиентам отдельные директивы openvpn, используя файлы конфигурации, специфичные для клиента, в client-config-dir.

В файл конфигурации сервера включите директиву:

client-config-dir ccd

и создайте этот каталог, если он еще не существует в вашем пути openvpn, например:

/etc/openvpn/ccd

Теперь создайте файл конфигурации для каждого клиента в ccd каталог, имеющий то же имя, что и общее имя клиента X509. Следующие варианты допустимы в контексте конкретного клиента: push, push-reset, iroute, ifconfig-push, и config.

Например, для отправки маршрутов клиенту с CN user1 в его справке:

echo 'push "route 10.0.0.2 255.255.255.255 10.8.0.1"' >> /etc/openvpn/ccd/user1
echo 'push "route 10.0.2.10 255.255.255.255 10.8.0.1"' >> /etc/openvpn/ccd/user1

Чтобы это сработало, вам нужно получить директивы конфигурации на ваших клиентах с сервера, используя pull директива.

У вас может быть директива client в вашей клиентской конфигурации, которая является вспомогательной директивой и расширяется следующим образом:

pull
tls-client

Не используй route-nopull в комбинации, так как это остановило бы клиента тянуть маршруты. Если тебе надо redirect-gateway на определенных клиентах для маршрутизации всего трафика через подсеть VPN вы можете разместить эту директиву только в этих файлах конфигурации клиента, а не в файле конфигурации вашего сервера для всех клиентов. В redirect-gateway Директива автоматически выполняет команды маршрутизации, чтобы весь исходящий IP-трафик перенаправлялся через VPN. Видеть человек страница.

Для тех, кто хочет узнать альтернативный ответ, также может быть полезно следующее. Когда вы используете client-connect скрипт, OpenVPN передает вашему скрипту один аргумент: путь к временному файлу, в который вы можете добавить push "route 192.168.10.0 255.255.255.0" подобные заявления. Он служит в качестве динамического файла, подобного CCD, без необходимости создания статических файлов CCD.