Как подтолкнуть шлюз и маршрутизировать к клиенту OpenVPN?

Вопрос или проблема

Мне нужно настроить сеть 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-адреса не блокируются.

Оцените материал
Добавить комментарий

Капча загружается...