У меня есть сервер OpenVPN с адресом Inet 10.8.0.1, обслуживающий подсеть 10.8.0.0/24. У меня есть два клиента, подключенных к этому серверу, и журнал состояния (/etc/openvpn/openvpn-status.log) выглядит следующим образом:
OpenVPN CLIENT LIST
Updated,Wed Aug 9 15:56:38 2017
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client1,10.0.0.177:54810,4648,4853,Wed Aug 9 15:56:28 2017
client2,10.0.0.224:53999,4731,4935,Wed Aug 9 15:56:16 2017
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.6,client1,10.0.0.177:54810,Wed Aug 9 15:56:28 2017
10.8.0.10,client2,10.0.0.224:53999,Wed Aug 9 15:56:16 2017
GLOBAL STATS
Max bcast/mcast queue length,0
END
Теперь на клиенте 2, когда я запускаю (ifconfig), я получаю следующее для интерфейса tun:
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.10 P-t-P:10.8.0.9 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Внутренний адрес P-t-P читается как 10.8.0.9. Где этот интерфейс присутствует в подсети? Это на клиенте или на сервере? Traceroute на этом интерфейсе от клиента дает мне следующее:
traceroute to 10.8.0.9 (10.8.0.9), 64 hops max
1 10.8.0.1 0.348ms 0.210ms 0.163ms
2 * * *
3 * * *
4 * * *
5 * ^C
Теперь, если это похоже на фиктивный inet-адрес, может ли этот inet-адрес использоваться для клиента сервером OpenVPN, если у него заканчиваются адреса, в случае, если он достигает ограничения в 254 VPN-клиентов?
Заранее спасибо!
Ваш сервер OpenVPN, похоже, настроен с использованием топологии net30. Эта топология требуется для совместимости с действительно старыми клиентами, работающими в более старых версиях Windows.
Эта топология в основном использует /24
подсеть, которую вы назначили для VPN, и разбивает ее на 64 подсети с 30-битными масками. Это означает, что у вас может быть не более 63 подключенных клиентов.
В net30 00
(двоичные биты) и 11
адреса не используются, 01
адрес назначается соединению PTP на сервере и 10
адрес используется на клиенте.
Итак, учитывая 10.8.0.6,client1,...
клиент. подсеть 10.8.0.4
. Широковещательный адрес 10.8.0.7
. Адрес, принадлежащий серверу OpenVPN: 10.8.0.5
(хотя на самом деле вы не увидите, что он назначен на сервере), а адрес, назначенный клиенту, 10.8.0.6
.
$ ipcalc 10.8.0.4/30
Address: 10.8.0.4 00001010.00001000.00000000.000001 00
Netmask: 255.255.255.252 = 30 11111111.11111111.11111111.111111 00
Wildcard: 0.0.0.3 00000000.00000000.00000000.000000 11
=>
Network: 10.8.0.4/30 00001010.00001000.00000000.000001 00
HostMin: 10.8.0.5 00001010.00001000.00000000.000001 01
HostMax: 10.8.0.6 00001010.00001000.00000000.000001 10
Broadcast: 10.8.0.7 00001010.00001000.00000000.000001 11
В наши дни вам было бы намного лучше переключить свой сервер на использование topology subnet
. Эта опция сообщает OpenVPN 10.8.0.0/24
как одну подсеть, а не разбивать ее на кучу более мелких подсетей. Каждый клиент будет использовать только 1 адрес из возможных ~ 253, доступных в подсети, вместо обычных 4, как это происходит с net30.
режим топологии
Настройте топологию виртуальной адресации при работе в режиме --dev tun. Эта директива не имеет значения в режиме касания --dev, который всегда использует топологию подсети. Если вы установите эту директиву на сервере, директивы --server и --server-bridge также автоматически передадут выбранную вами настройку топологии клиентам. Эту директиву также можно вручную отправить клиентам. Как и директива --dev, эта директива всегда должна быть совместима между клиентом и сервером.
режим может быть одним из:
net30 - используйте топологию «точка-точка», выделяя одну подсеть / 30 для каждого клиента. Это сделано для обеспечения семантики «точка-точка», когда некоторые или все подключающиеся клиенты могут быть системами Windows. Это значение по умолчанию в OpenVPN 2.0.
подсеть - используйте подсеть, а не топологию «точка-точка», настроив интерфейс tun с локальным IP-адресом и маской подсети, аналогично топологии, используемой в --dev tap и режиме моста Ethernet. Этот режим выделяет один IP-адрес для каждого подключающегося клиента и также работает в Windows. Доступно, только если сервер и клиенты имеют OpenVPN 2.1 или выше или OpenVPN 2.0.x, который был вручную исправлен с помощью кода директивы --topology. При использовании в Windows требуется версия 8.2 или выше драйвера TAP-Win32. При использовании в * nix требует, чтобы драйвер tun поддерживал команду ifconfig (8), которая устанавливает подсеть вместо IP-адреса удаленной конечной точки.