Я настроил PPTP VPN-соединение в Ubuntu 16.04.3 LTS через NetworkManager (nm-pptp-ppp-plugin), и оно работает. Моя конфигурация:
Я прокомментировал #dns=dnsmasq
в /etc/NetworkManager/NetworkManager.conf
, запустил sudo dpkg-reconfigure resolvconf
и sudo resolvconf -u
.
Без VPN-подключения my /etc/resolv.conf
содержит следующую строку:
nameserver 192.168.3.1
, где 192.168.3.1 - это IP-адрес моего маршрутизатора.
После этого VPN-соединение /etc/resolv.conf
изменяется на:
nameserver 192.168.1.1
nameserver 192.168.3.1
Но, насколько я понимаю, оно должно содержать только 192.168.1.1.
Можно ли программно удалить IP-адрес моего маршрутизатора (192.168.3.1) из /etc/resolv.conf
?
Я имею в виду диспетчер NetworkManager или аналогичный.
Похоже, у меня нет проблемы утечки DNS с моей текущей конфигурацией.
P.S. Я понимаю, что мой вопрос, возможно, обсуждался ранее, но возможные дубликаты не соответствуют моим потребностям.
Обновление 1. На моем другом ноутбуке 16.04 мне также нужно было отключить systemd-resolved.service
с помощью:
sudo systemctl stop systemd-resolved.service
sudo systemctl disable systemd-resolved.service
Обновление 2
Я написал простой и понятный грязный диспетчер и поместил его в
/etc/NetworkManager/dispatcher.d/03vpn
:
#!/bin/sh -e
RESOLV_CONF=`readlink /etc/resolv.conf`
ROUTER_IP="nameserver 192.168.3.1"
logger -t DNS-antileak "start"
# disable local router IP in /etc/resolv.conf
if [ "$2" = "vpn-up" ]; then
sed -i "s/$ROUTER_IP/#$ROUTER_IP/g" $RESOLV_CONF
logger -t DNS-antileak "disabled $ROUTER_IP on vpn-up"
fi
if [ "$2" = "vpn-down" ]; then
sed -i "s/#$ROUTER_IP/$ROUTER_IP/g" $RESOLV_CONF
logger -t DNS-antileak "enabled $ROUTER_IP on vpn-down"
fi
logger -t DNS-antileak "end"
exit 0
Его можно активировать с помощью
sudo chown root:root /etc/NetworkManager/dispatcher.d/03vpn
sudo chmod 755 /etc/NetworkManager/dispatcher.d/03vpn
Я тестировал его с подключениями OpenVPN и PPTP.
Также я нашел другие тесты на утечку DNS: Whoer и WhatLeaks .
Это хорошо известная ошибка NetworkManager, а именно # 1211110 . Он восходит к Ubuntu 13.04 до 16.04 и , в худшей степени , к Ubuntu 16.10.
Похоже, у меня нет проблем с утечкой DNS в моей текущей конфигурации.
Тогда считайте, что вам повезло. . :) Большинство пользователей (включая меня) столкнулись с серьезными утечками DNS и пробовали разные подходы к их устранению.
Вот некоторые подходы, предложенные в отчете об ошибке (кратко):
Make a резервная копия этого файла NetworkManager:
sudo cp / usr / lib / NetworkManager / nm-openvpn-service-openvpn-helper /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper.orig
Добавьте в файл следующие 3 строки.
#! / Bin / bash / etc / openvpn / update-resolv-conf $ @ /usr/lib/NetworkManager/nm-openvpn-service-openvpn-helper.orig $ @
Затем:
sudo chmod + x / usr / lib / NetworkManager / nm-openvpn-service-openvpn-helper
Предупреждение: после отключения VPN необходимо выполнить следующую команду.
sudo script_type = down dev = tun0 / etc / openvpn / update-resolv-conf
Отредактируйте VPN-соединение (через NM) и настройте статический DNS, например, используя серверы Google:
8.8.8.8, 8.8.4.4
Таким образом, запрос DNS отправляется через внешний IP-адрес, следовательно, он маршрутизируется с использованием VPN.
Затем также настройте беспроводное соединение для использования этих статических DNS-серверов.
Запустите
openvpn
через командную строку.
(... некоторые другие громоздкие решения, которые я не буду здесь обсуждать ...)
Удалить этот файл конфигурации:
sudo rm -rf /etc/resolv.conf
Добавьте эту строку в раздел
[main]
в/ etc / NetworkManager / NetworkManager.conf
:dns = dnsmasq
Если у вас установлен пакет
dnsmasq
, убедитесь, что службаdnsmasq
не включена, в противном случае это не сработает. Вам также следует перезагрузиться.
Эта ошибка была исправлена в Ubuntu 17.04 . Вместо того, чтобы пробовать случайные патчи в вашей системе, вероятно, лучше просто обновить. :)