Я использую сервер OpenVPN и хочу назначить конкретному клиенту статический IP-адрес.
Это мой server.conf. я считать это настраивает пул виртуальных IP-адресов для диапазона от 10.5.24.209 до 10.5.24.223.
port 443
proto tcp
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-auth ta.key 0
topology subnet
server 10.5.24.208 255.255.255.240
#This netmask should span IPs .208-.223.
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 168.xx.xx.xx"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem
client-to-client
client-config-dir ccd
Это содержание /etc/openvpn/ccd/W7LocalVM
, где W7LocalVM - это общее имя моего клиента. Я не совсем понимаю, что делает эта директива, но я думаю, что первый IP должен быть желаемым статическим IP моего клиента, а второй IP должен быть IP моего сервера.
ifconfig-push 10.5.24.210 10.5.24.209
Однако, когда я пытаюсь подключить своего клиента к этой конфигурации сервера, я получаю следующую ошибку:
Mon Aug 07 14:07:34 2017 Set TAP-Windows TUN subnet mode network/local/netmask = 10.5.24.208/10.5.24.210/10.5.24.209 [SUCCEEDED]
Mon Aug 07 14:07:34 2017 MANAGEMENT: Client disconnected
Mon Aug 07 14:07:34 2017 ERROR: --ip-win32 dynamic [offset] : offset is outside of --ifconfig subnet
Mon Aug 07 14:07:34 2017 Exiting due to fatal error
Я думал, что IP 10.5.24.210 находится в подсети, определенной на стороне сервера, и я не понимаю, почему я получаю эту ошибку. Может ли кто-нибудь помочь мне в этом?
Эта проблема возникает из-за того, что openvpn пытается проанализировать ваши параметры ifconfig как ip, за которым следует маска подсети.
Согласно странице руководства:
- режим топологии
...
подсеть - используйте подсеть, а не топологию «точка-точка», настроив интерфейс 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-адреса удаленной конечной точки.
Эта опция существует в OpenVPN 2.1 и выше.
Примечание. Использование --topology subnet изменяет интерпретацию аргументов --ifconfig на «адресную сетевую маску», а не «локальный удаленный».
--ifconfig l rn
Установите параметры адаптера TUN / TAP. l - IP-адрес локальной конечной точки VPN. Для устройств TUN в режиме «точка-точка» rn - это IP-адрес удаленной конечной точки VPN. Для устройств TAP, или устройства TUN, используемые с --topology subnet, rn - маска подсети сегмента виртуальной сети, который создается или подключается к. Для устройств TUN, которые обеспечивают виртуальные двухточечные IP-соединения (при использовании в режиме --topology net30 или p2p), правильное использование --ifconfig заключается в использовании двух частных IP-адресов, которые не являются членами какой-либо существующей подсети. который уже используется. IP-адреса могут быть последовательными и должны иметь обратный порядок на удаленном узле. После того, как VPN будет установлен, вы отправите pinging rn через VPN.
Для устройств TAP, которые обеспечивают ....
Внутри кода сервера вы устанавливаете топологию на subnet
, а затем отправьте его клиенту с помощью server
заявление.
Согласно приведенной выше документации, вместо того, чтобы проталкивать ваш ifconfig с использованием «локального», «удаленного» адреса, вам необходимо добавить следующее в «/ etc / openvpn / ccd / W7LocalVM»:
ifconfig-push 10.5.24.210 255.255.255.252
push route 10.5.24.210 255.255.255.252
# ifconfig 10.5.24.209 255.255.255.252
Последняя строка, вероятно, не нужна, но она оставлена в качестве примера того, что ifconfig-push «должен» делать на стороне сервера, чтобы соединение работало.