РЕДАКТИРОВАТЬ: Я знаю это 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.