Вы можете попробовать следующее awk
:
awk '{ for (i = 6; i <= NF; i++) { if ($i == $4) { $i = 0; } else if ($i == $5) { $i = 1; } } } 1' file
или:
awk '{ for (i = 6; i <= NF; i++) { $i = ($i == $4) ? 0 : 1; } } 1' file
У меня была проблема с утечкой DNS в Ubuntu 17.10, а теперь и в 18.04 LTS. Должно быть, это началось, когда я обновился с 16.10 некоторое время назад, и я никогда не думал проверять до сих пор случайно. Ничего из вышеперечисленного (и других вещей, которые я нашел и попробовал ), не помогли, пока я не наткнулся на этот URL ниже, прочитав отчет об ошибке. Комментарий о добавлении строки приоритета dns -у меня сработал.
https://bugs.launchpad.net/network-manager/+bug/1624317см. комментарий #103.
Найдите установленные VPN-подключения NetworkManager («$
» — это просто моя системная подсказка, чтобы показать, что вы находитесь в командной строке в окне терминала):
$ ls -la /etc/NetworkManager/system-connections/*
Затем выберите тот, который вы хотите исправить, и запустите на нем эту команду (или вы можете просто отредактировать файл конфигурации вручную, так как эта команда просто добавляет запись приоритета dns -в разделе ipv4):
$ sudo nmcli connection modify <vpn-connection-name> ipv4.dns-priority -42
И перезапустить:
$ sudo service network-manager restart
Обратите внимание, что, по крайней мере для меня, помещение его в конфигурационный файл OpenVPN.ovpn, полученный из моей VPN (ProtonVPN ), не сработало. По какой-то причине он не попал в конфигурацию NetworkManager, когда он был установлен с помощью диалогового окна GUI. Только обновив конфиг после его установки, а затем перезапустив NetworkManager, заработало. И вам нужно сделать это для каждой установленной конфигурации VPN, которую вы хотите использовать.
Тааааак, ответ таков: внимательно следуйте инструкциям всегда -на -из вики ArchLinux:
https://wiki.archlinux.org/index.php/OpenVPN#Update_systemd-resolved_script
и к добавить соответствующие строки.
Итак, в два приема:
sudo apt install openvpn-systemd-resolved
и добавьте следующие строки в ваш файл.ovpn:
script-security 2
dhcp-option DNS 208.67.222.222
dhcp-option DNS 208.67.220.220
dhcp-option DNS 8.26.56.26
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
Если это неясно, теперь ваш файл должен содержать две строки «вверх» и две строки «вниз»:
# old lines
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
# new lines
script-security 2
dhcp-option DNS 208.67.222.222
dhcp-option DNS 208.67.220.220
dhcp-option DNS 8.26.56.26
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
См. Редактировать 1 в моем вопросе.
Эта проблема странного systemd-resolved.service
поведения упоминается здесь .
Кажется, в конфигурационный файл клиента можно добавить следующую опцию:
dhcp-option DOMAIN-ROUTE.
, который, очевидно, направляет все DNS через выбранное соединение...
Похоже, это ошибка из-за того, что Ubuntu переключился на systemd -resolve до того, как пакет openvpn -manager -openvpn был обновлен, чтобы он знал о systemd -resolve. Ubuntu 18.10, кажется, решил эту проблему с помощью сетевого -менеджера 1.12.2 -0ubuntu5. Подробнее здесь :https://gitlab.gnome.org/GNOME/NetworkManager-openvpn/issues/10.
До тех пор, пока это не будет опубликовано, ответ @Bob Willan работал на меня.
Мне удалось решить эту проблему, добавив эти строки в мой конфигурационный файл OpenVPN:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
из @ Как устранить утечку DNS OpenVPN в Linux
А для пользователей Windows (OpenVPN +2.3.9):
block-outside-dns
Я также столкнулся с -проблемой утечки DNS. Модификация моего файла ovpn не помогла. Причина - отсутствие пакета. OpenVPN не предупредил меня об этом.
script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf
Взглянув на скрипт cat /etc/openvpn/update-resolv-conf
, я увидел, что он вызывает другую программу по адресу /sbin/resolvconf
. Выполнение ls /sbin/resolvconf
показало мне, что мне не хватает этого файла. Быстрый поиск привел меня к пропавшему пакету.
После установки с помощью apt install openresolv
изменения в моем скрипте ovpn вступили в силу.
Если -как и я -у вас не установлен пакет resolvconf
и вы не хотите его устанавливать, вы можете использовать приведенный ниже сценарий для обновления файла resolv.conf
.
#!/bin/bash
# ------------------------------------------------------------------------------
# EN: Update resolv.conf to use the DNS defined by the VPN
# PT: Atualiza os DNS do resolv.conf para usar os definidos pela VPN
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# Get DNS defined by the VPN service
# Exit with error if the DNS array is empty
# ------------------------------------------------------------------------------
function getVpnDns() {
for frgn_optn in ${!foreign_option_*} ; do
for fo in "${!frgn_optn}" ; do
DNSARRAY+=( $(echo $fo | awk '/dhcp-option DNS/{print $3}') )
done
done
[ -z "$DNSARRAY" ] && exit 1
}
# ------------------------------------------------------------------------------
# Write DNS to resolv.conf
# ------------------------------------------------------------------------------
function writeResolvConf() {
getVpnDns
for DNS in ${DNSARRAY[@]} ; do
echo "nameserver $DNS"
done | tee /etc/resolv.conf
}
# ------------------------------------------------------------------------------
# Switch between resolv.conf configs on 'up' and 'down' events
# ------------------------------------------------------------------------------
case "$script_type" in
up)
mv -v /etc/resolv.conf /etc/resolv.conf.rag && writeResolvConf
;;
down)
mv -fv /etc/resolv.conf.rag /etc/resolv.conf
;;
esac