У меня есть VPN, настроенный на некоторых виртуальных машинах с использованием OpenVPN. На одной из виртуальных машин работает dnsmasq, чтобы обеспечить базовый DNS внутри сети. Мой клиент работает под управлением Ubuntu, который теперь более или менее заставляет systemd-resolved. Я обнаружил, что, хотя он утверждает, что настроил DNS, я на самом деле не могу выполнить nslookup или покопаться в именах хостов внутри VPN. Я могу пинговать их по IP, но не по имени.
Давайте углубимся в файлы конфигурации.
Конфигурация сервера OpenVPN:
mode server
local 192.168.50.101
port 1194
proto udp
dev tun
ca /etc/openvpn/server/ssl/ca.pem
cert /etc/openvpn/server/ssl/cert.pem
key /etc/openvpn/server/ssl/key.pem
dh /etc/openvpn/server/ssl/dh2048.pem
topology subnet
server 10.99.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.10.0.0 255.255.255.0"
push "dhcp-option DNS 10.99.0.1"
keepalive 10 120
cipher AES-128-CBC # AES
comp-lzo
push "comp-lzo yes"
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 6
mute 20
Конфигурация клиента:
client
dev tun
proto udp
remote 192.168.50.101 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca REDACTED
cert REDACTED
key REDACTED
remote-cert-tls server
cipher AES-128-CBC
comp-lzo
verb 3
mute 20
ping-restart 30
script-security 2
setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
Я установил https://github.com/jonathanio/update-systemd-resolved, как кажется, рекомендуется. Фактически, он обновляет настройки DNS, как это может быть показано в журналах с разрешением systemd (Switching to DNS server 10.99.0.1 for interface tun0.
) и --status
вывод:
Link 26 (tun0)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 10.99.0.1
/etc/resolve.conf
указывает на 127.0.0.53, что по умолчанию при использовании systemd-resolved.
Я пробовал использовать встроенное соединение OpenVPN в NetworkManager, и оно не решает проблему с DNS и даже не настраивает маршруты правильно (поэтому я даже не могу пинговать или подключаться по IP).
Еще несколько вещей, о которых люди, вероятно, спросят:
/etc/resolv.conf
чтобы указать на DNS-сервер моего VPN (на 10.99.0.1), тогда разрешение DNS работает нормально. Тем не менее, resolv.conf управляется либо systemd-resolved, либо NetworkManager через resolvconf, и я хотел бы сохранить их, если это возможно, чтобы не нарушать корзину яблока Ubuntu.Сначала проверьте подключение с консоли:
sudo openvpn --verb 1 --config /path_to_conf/config.ovpn
Если у вас есть эта ошибка:
/etc/resolvconf/update.d/libc: Предупреждение: /etc/resolv.conf не является символической ссылкой на /run/resolvconf/resolv.conf
тогда исправь /etc/resolvconf/update.d/libc
перед
DYNAMICRSLVCNFFILE="/run/resolvconf/resolv.conf"
после
#DYNAMICRSLVCNFFILE="/run/resolvconf/resolv.conf"
DYNAMICRSLVCNFFILE="/run/systemd/resolve/resolv.conf"
Во-вторых, добавьте параметр в конфигурацию сервера openvpn.
push "dhcp-option DOMAIN YOUR_DOMAIN_NAME"