Вопрос или проблема
Мне нужно настроить сеть OpenVPN, которая, вероятно, разрастется до нескольких сотен клиентов в течение следующих нескольких месяцев. Некоторые из клиентов являются серверами, а другие – устройствами, которым нужны услуги, размещенные на сервере(ах).
Идея состоит в том, чтобы использовать сеть 10.10.0.0/16
, в которую будут входить все клиенты. Серверы должны иметь статический VPN IP в диапазоне 10.10.0.1 - 10.10.0.254
, а клиенты должны получать DHCP VPN IP в диапазоне 10.10.1.1 - 10.10.255.254
. Сервер OpenVPN (в настоящее время 1) имеет IP 10.10.0.1
.
Чтобы распределить статические “серверные” IP, я раскомментировал client-config-dir
в конфигурации OpenVPN server.conf
, создал файл конфигурации для каждого сервера в ccd
с именем файла, соответствующим CN name
сервера, и добавил маршрут 10.10.0.0 255.255.0.0
в server.conf
. Каждый файл клиента содержит нечто подобное:
ifconfig-push 10.10.0.x 10.10.0.1
iroute 10.10.0.0 255.255.0.0
Когда я пытаюсь пинговать 10.10.0.1
с одного из серверов со статическим VPN IP, пинг проходит успешно.
Для клиентов DHCP я настроил несколько параметров в server.conf
:
dev tun
proto udp
dev tun
mode server
tls-server
ifconfig 10.10.0.1 255.255.0.0
ifconfig-pool 10.10.1.1 10.10.255.254
route-gateway 10.10.0.1
push "route-gateway 10.10.0.1"
push "route 10.10.0.0 255.255.0.0 10.10.0.1"
Клиенты подключаются корректно и получают IP в ожидаемом диапазоне (например, 10.10.1.61), но когда я пытаюсь пинговать 10.10.0.1
, пинг не проходит. Когда я проверяю шлюзы с помощью route -n
, я вижу, что установлен неверный шлюз:
root@somedevice:/home/pi# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.128.60.1 0.0.0.0 UG 202 0 0 eth0
10.10.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 <-- должен быть 10.10.0.1 ?
10.128.60.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
Когда я вручную добавляю шлюз route add 10.10.0.1 tun0
, я могу пинговать сервер VPN. Я по-прежнему не могу пинговать серверы (например, 10.10.0.20). Когда я проверяю routel
, я замечаю, что отсутствует маршрут к 10.10.0.0/16
.
root@somedevice:/home/pi# routel
target gateway source proto scope dev tbl
default 10.128.60.1 10.128.60.33 dhcp eth0
10.10.0.1 link tun0
10.10.1.1 10.10.1.2 kernel link tun0
10.128.60.0/ 24 10.128.60.33 dhcp link eth0
10.10.1.2 local 10.10.1.2 kernel host tun0 local
10.128.60.0 broadcast 10.128.60.33 kernel link eth0 local
10.128.60.33 local 10.128.60.33 kernel host eth0 local
10.128.60.255 broadcast 10.128.60.33 kernel link eth0 local
127.0.0.0 broadcast 127.0.0.1 kernel link lo local
127.0.0.0/ 8 local 127.0.0.1 kernel host lo local
127.0.0.1 local 127.0.0.1 kernel host lo local
127.255.255.255 broadcast 127.0.0.1 kernel link lo local
::1 kernel lo
fe80::/ 64 kernel eth0
fe80::/ 64 kernel tun0
::1 local kernel lo local
fe80::65cf:ce3:fc9f:20fa local kernel eth0 local
fe80::c648:ccba:8f47:86b7 local kernel tun0 local
ff00::/ 8 eth0 local
ff00::/ 8 tun0 local
Когда я вручную добавляю этот маршрут ip route add 10.10.0.0/16 via 10.10.0.1
, я могу пинговать серверы (например, 10.10.0.20) 😀
Вопросы:
- Как я могу передать правильный шлюз (
10.10.0.1
вместо10.10.1.1
) клиентам с DHCP-адресами? - Как я могу передать маршрут
10.10.0.0/16 via 10.10.0.1
клиентам с DHCP-адресами?
Я думал, что это делается с помощью
push "route-gateway 10.10.0.1"
push "route 10.10.0.0 255.255.0.0 10.10.0.1"
но это не работает, в чем моя ошибка?
———– ОБНОВЛЕНИЕ ———–
Я только что заметил, что push "route-gateway 10.10.0.1"
и push "route 10.10.0.0 255.255.0.0 10.10.0.1"
передают шлюз/маршрут “статическим клиентам серверов”, но не клиентам, которые получают свой VPN IP через DHCP. Почему они также не применяются к DHCP-клиентам?
Для моих клиентов (с dhcp ip) работает
port 53
proto udp
dev tun
tls-server
ca …
cert …
key…
dh …
cipher …
auth …
local …
server 10.10.1.0 255.255.255.0
max-clients 253
topology subnet
keepalive 10 120
comp-lzo no
push "comp-lzo no"
user nobody
group nogroup
persist-key
persist-tun
username-as-common-name
…
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 1.1.1.1"
push "redirect-gateway def1"
push "route 10.10.0.0 255.255.0.0 10.10.0.1 1"
или
push "route 10.10.0.0 255.255.0.0 net_gateway 1"
чтобы использовать шлюз по умолчанию клиента.
Ответ или решение
Создание и настройка OpenVPN-сети, особенно при проектировании, рассчитанном на значительное количество клиентов, требует внимательного подхода к распределению IP-адресов и маршрутизации. Обратим внимание на вашу задачу и обсудим, как правильно настроить маршрут и шлюз для клиентов, получающих IP-адреса через DHCP.
1. Использование статических IP-адресов для серверов
Вы сделали правильные шаги, добавив конфигурацию для статических IP-адресов с помощью client-config-dir
. Это позволяет вам задать фиксированные IP-адреса для серверов, указывая их имя в конфигурационных файлах в каталоге ccd
. Также вы правильно добавили маршрут 10.10.0.0 255.255.0.0
в server.conf
. Это позволит всем клиентам видеть и подключаться к вашим серверам в сети.
2. Конфигурация для клиентов с DHCP-адресами
Ваша конфигурация файла server.conf
, где вы определяете параметры для клиентов, получающих IP через DHCP, требует нескольких изменений для решения ваших вопросов.
A. Указание шлюза для клиентов
Ваш текущий подход с использованием:
push "route-gateway 10.10.0.1"
не работает должным образом, потому что, согласно вашей конфигурации, у клиентов с DHCP-адресами нет маршрута, который направляет трафик через 10.10.0.1
.
Для того чтобы обеспечить правильное значение шлюза для DHCP-клиентов, вам необходимо убедиться, что установлены правильные параметры маршрутизации и шлюза, как следует:
push "route 10.10.0.0 255.255.0.0 10.10.0.1"
push "route-gateway 10.10.0.1"
Если эти параметры не передаются DHCP-клиентам, попробуйте установить их в файл конфигурации таким образом:
push "redirect-gateway def1"
Это позволит по умолчанию перенаправить весь ваш трафик через вертикальный VPN-сервер.
B. Настройка маршрутов для клиентов
Чтобы маршруты корректно передавались вашим DHCP-клиентам, можно добавить следующие строки:
push "route 10.10.0.0 255.255.0.0"
Эта команда сообщает DHCP-клиентам, что вся сеть 10.10.0.0/16
доступна через VPN.
Пример окончательной конфигурации server.conf
Ваша итоговая конфигурация может выглядеть следующим образом:
dev tun
proto udp
ifconfig 10.10.0.1 255.255.0.0
ifconfig-pool 10.10.1.1 10.10.255.254
route-gateway 10.10.0.1
push "route 10.10.0.0 255.255.0.0"
push "route-gateway 10.10.0.1"
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
Заключение
После внесения изменений убедитесь, что вы перезапустили сервер OpenVPN и повторно подключили клиентов. Проверьте таблицу маршрутов на клиентском устройстве, чтобы убедиться, что маршруты и шлюз установлены правильно.
Эти корректировки должны разрешить ваши вопросы о маршрутизации и настройке клиентского шлюза. Если после всех изменений возникнут дополнительные проблемы, проверьте настройки брандмауэра, чтобы удостовериться, что порты и IP-адреса не блокируются.