@Batiskaf_stv
Программист, ИТ-энтузиаст

Как настроить клиента OpenVPN, чтобы его локальная сеть не ломалась?

Есть удаленный сервер OpenVPN, работающий, как шлюз в интернет.
Есть локальная сеть с роутером на Linux с поднятым Dnsmasq и Samba. Подсеть 172.16.0.0/24.
После подключения к OpenVPN-серверу компьютеры локальной сети перестают пинговаться по имени.
На сервере в папке CCD создан файл с именем клиента и там прописано, чтобы в подсеть клиента пакеты не шли через сервер:
iroute 172.16.0.0 255.255.255.0
и по IP пинги в локальной сети продолжают ходить (при активном соединении OpenVPN).

В Linux не без проблем настроил подключение в Network Manager'е (KDE).
/etc/resolv.conf
# Generated by NetworkManager
search homenet # - это название моей рабочей группы, прописанное в dnsmasq и samba на роутере лок. сети
nameserver 1.1.1.1 # - DNS-сервер, переданный OpenVPN-сервером
nameserver 208.67.220.220 # - DNS-сервер, переданный OpenVPN-сервером
nameserver 172.16.0.1 # - роутер лок. сети
ip r
default via 10.25.0.1 dev tun0 proto static metric 50 
default via 172.16.0.1 dev eno1 proto dhcp metric 100 
10.25.0.0/24 dev tun0 proto kernel scope link src 10.25.0.6 metric 50 
172.16.0.0/24 dev eno1 proto kernel scope link src 172.16.0.2 metric 100 
172.16.0.1 dev eno1 proto static scope link metric 100 
300.300.300.300 via 172.16.0.1 dev eno1 proto static metric 100 # внешний IP OpenVPN-сервера
server.conf
server 10.25.0.0 255.255.255.0
port 1194
proto udp4
dev tun
topology subnet

cd /etc/openvpn/server/
ca ca.crt
cert server.crt
key server.key
dh dh.pem
crl-verify crl.pem

# Server - '0', client - '1'.
tls-auth ta.key 0 # This file is secret

user nobody
group nobody
persist-key
persist-tun

tls-server
tls-timeout 120

ifconfig-pool-persist ipp.txt
client-config-dir ccd

# Enable compression on the VPN link and push the
# option to the client (v2.4+ only, for earlier
# versions see below)
compress lz4-v2
push "compress lz4-v2"

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 1.1.1.1" # CloudFlare public server
push "dhcp-option DNS 208.67.220.220" # OpenDNS.com server

keepalive 10 120

cipher AES-256-GCM
auth SHA256
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-CHACHA20-POLY1305-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256

# The maximum number of concurrently connected
# clients we want to allow.
max-clients 20

status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log

# Set the appropriate level of log
# file verbosity.
#
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
#verb 3
verb 4

mute 20

# Notify the client that when the server restarts so it
# can automatically reconnect.
explicit-exit-notify 1

# 16 tips on OpenVPN security: https://blog.g3rt.nl/openvpn-security-tips.html

# 2. Check the Extended Key Usage on the certificates
remote-cert-eku "TLS Web Client Authentication" # On clients change to 'Server'


Если подключаться в консоли с помощью заранее созданного *.ovpn-конфига:
sudo openvpn --config home_pc.ovpn
то первый раз вообще трафик через OpenVPN не пошёл, а сейчас идёт, но не прописались DNS от OpenVPN-сервера, и используются DNS-сервера моего провайдера.
home_pc.ovpn
client
dev tun
proto udp4
remote 300.300.300.300 1194  # внешний IP OpenVPN-сервера

# Keep trying indefinitely to resolve the
# host name of the OpenVPN server.  Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite

# Most clients don't need to bind to
# a specific local port number.
nobind

# Downgrade privileges after initialization (non-Windows only)
setenv opt user nobody
setenv opt group nobody

# Block DNS servers on other network adapters to prevent DNS leaks. Windows 7 (or higher) only.
setenv opt block-outside-dns

# Try to preserve some state across restarts.
persist-key
persist-tun

# Wireless networks often produce a lot
# of duplicate packets.  Set this flag
# to silence duplicate packet warnings.
mute-replay-warnings

remote-cert-tls server
cipher AES-256-GCM
auth SHA256

# WARNING: this configuration may cache passwords in memory -- use the auth-nocache
auth-nocache

# Take this measure to prevent a client using his certificate to impersonate a server.
remote-cert-eku "TLS Web Server Authentication"

# Set log file verbosity.
verb 3

# Silence repeating messages
mute 20

<ca>...</ca>
<cert>...</cert>
<key>...</key>
<tls-auth>...</tls-auth>
key-direction 1
/etc/resolv.conf
# Generated by NetworkManager
search homenet
nameserver 172.16.0.1
ip r
0.0.0.0/1 via 10.25.0.1 dev tun0 
default via 172.16.0.1 dev eno1 proto dhcp metric 100 
10.25.0.0/24 dev tun0 proto kernel scope link src 10.25.0.6 
128.0.0.0/1 via 10.25.0.1 dev tun0 
172.16.0.0/24 dev eno1 proto kernel scope link src 172.16.0.2 metric 100 
300.300.300.300 via 172.16.0.1 dev eno1


Маршруты значительно отличаются по сравнению с подключением через Network Manager.
Зато пинги локальной сети по имени работают.

В случае Windows 7 (используется тот же home_pc.ovpn) пинги по имени работают к компьютерам, к которым уже были обращения, но с большой задержкой вначале, сетевое окружение тоже сильно тормозит. Но ранее подключенные сетевые диски открываются.

Правильно ли, что при соединении в Linux в консоли для маршрута "0.0.0.0/1 via 10.25.0.1 dev tun0" не прописывается слово "default"?
При соединении с помощью Network Manager локальный DNS-сервер есть в /etc/resolv.conf, но почему он не работает?

Как правильно настроить конфиги для Windows- и Linux-клиентов OpenVPN, чтобы они продолжали нормально работать с локальной сетью, при этом для всех внешних ресурсов использовали DNS-сервер, переданный OpenVPN-сервером?
  • Вопрос задан
  • 899 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы