Приветствую уважаемый,
Интересует "хитрый" (или нет
) вариант настройки VPN сети. В ходе изысканий столкнулся с проблемами или можно сказать неясностями. Большая просьба владеющих мастерством настройки сего добра помочь разобраться.
Исходные:
- Есть N-ное (много, возможно десятки или сотни) количество клиентских устройств с Linux, на которых запущен OpneVPN и подключен GSM-модем с динамическим IP.
- Есть N-ное (но значительно меньше, допустим 3-10) клиентских ПК (Windows/Linux) скажем так "операторов", с не важно каким IP, статическим или динамическим.
- Есть 1 сервер Linux/Ubuntu, у которого внешний белый статически IP и который доступен в локальной сети для операторов и из интернета для клиентских устройств.
Что хочу получить:
- Необходимо собрать всё в VPN сеть.
- Необходимо получить безопасность подключений и шифрование трафика.
- Все клиенты должны видеть друг-друга в VPN сети.
- Клиентским устройствам в VPN сети должен выдаваться постоянный IP, идеально если на стороне сервера не придётся что-то делать для этого, а в самом устройстве можно было бы прописать требуемый адрес в настройках подключения к VPN. В этом собственно первая "хитрость" и заключается.
- Идеально если для всех клиентских устройств было возможно создать одну и ту же пару сертификат-ключ, чтобы раз сделать на большую групп (устройств очень много, для каждого генерировать и после обслуживать всё это тяжело будет). А в этом заключается вторая "хитрость".
Моё решение:
Пробовал разные варианты по мотивам официальной документации и множества форумом, блогов. Но так и не получил нужного мне идеального варианта решения.
Вариант 1.
Всё получилось и хорошо работает если для каждого клиента создаю отдельную пару ключ-сертификат. За ними со стороны сервера закрепляется постоянный IP, и вроде всё хорошо, но:
- приходится каждому клиенту свои ключи выдавать, что сильно накладно в сопровождении для сотен устройств.
- нет возможности на стороне клиента указать закрепляемый ему IP адрес.
Вариант 2.
Всё вроде тоже получилось но не совсем хорошо хотя тоже вроде работает, при том что всем клиентам выдана одна и та же пара ключ-сертификат. Удобно, раз сервер настроил и не трогаешь его больше. Но:
- сервер теперь не идентифицирует каждого клиента уникально и соответственно IP им выдаются динамически.
Конфигурации (пока для пробы все клиенты внутри локальной сети) для вариант 1.
Сервера
port 1194
proto udp
dev tun
ca ca.crt
cert servercert.crt
key serverkey.key
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
client-to-client
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
Клиента Linux
client
dev tun
proto udp
remote 10.5.0.100 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>
tls-auth /etc/openvpn/ta.key 1
Клиента Windows
client
dev tun
proto udp
remote 10.5.0.100 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
key-direction 1
verb 3
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>
Для варианта 2, в конфигурацию сервера включался параметр (не взирая на то, что написано в комментарии к нему):
# Uncomment this directive if multiple clients
# might connect with the same certificate/key
# files or common names. This is recommended
# only for testing purposes. For production use,
# each client should have its own certificate/key
# pair.
#
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE "COMMON NAME",
# UNCOMMENT THIS LINE OUT.
duplicate-cn
Так вот вопросы на который прошу помочь найти решения:
1) Как настроить так чтобы работало по варианту 2 но при этом закрепить за каждым клиентом постоянный IP и в идеале настройкой со стороны клиента?
2) Пробовал на клиентской стороне параметр ifconfig 10.8.0.9 10.5.0.100 , но он вообще никак не воспринимается судя по всему. В обоих вариантах сервер сам выдаёт IP клиенту, в пером на постоянно во втором динамически но ни в одном из случав этот клиентский параметр не учитывается.
Версия OpenVPN на всех сторонах v2.4.х (10.5.0.100 - IP адрес сервера в локальной сети).
PS: Возможно я что-то упустил или неверно применил или вообще не возможно то, что я хочу получить, большая просьба помочь с этим разобраться.