LINUX.ORG.RU

Как предотвратить утечку по DNS на клиенте OpenVPN?

 , , ,


0

1

Попробовал разобраться с клиентом OpenVPN на линуксе, на данный момент умею подымать соединение с VPN провайдером командой sudo openvpn --config /файл конфигурации. Но обнаружил утечку DNS трафика, надо это дело подправить. Нужно пропускать DNS трафик через сервер VPN провайдера. Погуглил на эту тему, мне задача показалась сложной, сам разобраться не смог. Поэтому пишу здесь, если кто даст понятные для меня рекомендации, я готов посидеть разобраться что к чему. Может кто даст мануалы на эту тему, в идеале на русском языке, буду благодарен. Я не очень то продвинутый юзер, так что чем подробнее получу инфу, тем больше шансов что смогу достичь просветления по этому вопросу.


Бичовый вариант: поднимаем dnsmasq на VPN-сервере, в настройках dns для openvpn указываем внутренний адрес VPN-сервера.

Здесь dnsmasq будет работать как dns-прокси (перенаправлять днс-запросы наружу и держать у себя их кэш) с простым конфигом. Крутим его на VPN-сервере, конечно. Теперь задача заставить клиент использовать этот прокси. Если правильно помню, потом нужно указать dhcp-options DNS внутренний.адрес.сервера, script-security 2 в конфиге клиента.

lu4nik ★★★
()

У клиента должен стоять resolvconf. И несколько строчек в конфиг добавить. Гуглиться должно очень быстро.

anonymous
()
Ответ на: комментарий от lu4nik

Бичовый вариант: поднимаем dnsmasq на VPN-сервере, в настройках dns для openvpn указываем внутренний адрес VPN-сервера.

Здесь dnsmasq будет работать как dns-прокси (перенаправлять днс-запросы наружу и держать у себя их кэш) с простым конфигом. Крутим его на VPN-сервере, конечно. Теперь задача заставить клиент использовать этот прокси. Если правильно помню, потом нужно указать dhcp-options DNS внутренний.адрес.сервера, script-security 2 в конфиге клиента.

У меня нету доступа к VPN серверу.

MRX256
() автор топика
Ответ на: комментарий от MRX256

Тогда выставляешь внешний DNS-сервер руками на клиенте (в networkmanager или что там у тебя) и указываешь именно для его адреса маршрут через VPN.

Дописываешь в свой клиентский конфиг OpenVPN следующее:

script-security 2
up "sh /etc/openvpn/dns_routing.sh up"
down "sh /etc/openvpn/dns_routing.sh down"
Создаешь /etc/openvpn/dns_routing.sh:
#!/bin/sh

DNS_IP=8.8.8.8
VPN_SERVER_IP=172.18.0.1

case $1 in
    up)
        ip route add $DNS_IP via $VPN_SERVER_IP
        ;;
    down)
        ip route del $DNS_IP
        ;;
    *)
        echo Wrong command
esac
Не забудь отредактировать адрес DNS и VPN серверов (для последнего нужен адрес внутри VPN-сети).

lu4nik ★★★
()
Ответ на: комментарий от MRX256

У меня нету доступа к VPN серверу.

Может у клиента проблема и не пушится просто.(вообще надо лог смотреть) Добавь в свой конфиг:

script-security 2
up /etc/openvpn/scripts/update-systemd-resolved
down /etc/openvpn/scripts/update-systemd-resolved
down-pre
или делай так через resolvconf

https://rtfm.co.ua/arch-linux-openvpn-ne-obnovlyaetsya-resolv-conf/

anonymous
()
Ответ на: комментарий от lu4nik

че это такое, первый раз такое костыльное решение вижу?

anonymous
()
Ответ на: комментарий от anonymous

И каким образом в resolv.conf адреса поменяются? Че за брендятина?

Нашел файл resolf.conf в папке /etc вот его содержимое domain lan search lan nameserver 192.168.0.1

может здесь что то подправить надо?

MRX256
() автор топика
Ответ на: комментарий от MRX256

Оно должно автоматом при подключении перезаписывать файл. Для этого тебе надо проделать манипуляции выше.

anonymous
()
Ответ на: комментарий от lu4nik

Дописываешь в свой клиентский конфиг OpenVPN следующее:

Попробовал так сделать, заменил в клиентском конфиге строчки: script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf

на эти:

script-security 2 up «sh /etc/openvpn/dns_routing.sh up» down «sh /etc/openvpn/dns_routing.sh down»

это так и оставил DNS_IP=8.8.8.8 а здесь прописал IP VPN сервера VPN_SERVER_IP=(прописал IP)

поднял соединение, DNS утечка не устранена.

MRX256
() автор топика
Ответ на: комментарий от lu4nik

Тогда выставляешь внешний DNS-сервер руками на клиенте (в networkmanager или что там у тебя) и указываешь именно для его адреса маршрут через VPN.

У меня нету никаких networkmanager. Все делаю в терминале.

MRX256
() автор топика
Ответ на: комментарий от MRX256

заменил в клиентском конфиге строчки: script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf

Не надо, делай все обратно. Посмотри внутрь скрипта

#!/bin/bash
# 
# Parses DHCP options from openvpn to update resolv.conf
# To use set as 'up' and 'down' script in your openvpn *.conf:
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
#
# Used snippets of resolvconf script by Thomas Hood and Chris Hanson.
# Licensed under the GNU GPL.  See /usr/share/common-licenses/GPL. 
# 
# Example envs set from openvpn:
#
#     foreign_option_1='dhcp-option DNS 193.43.27.132'
#     foreign_option_2='dhcp-option DNS 193.43.27.133'
#     foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
#

[ -x /sbin/resolvconf ] || exit 0
[ "$script_type" ] || exit 0
[ "$dev" ] || exit 0

split_into_parts()
{
	part1="$1"
	part2="$2"
	part3="$3"
}

case "$script_type" in
  up)
	NMSRVRS=""
	SRCHS=""
	for optionvarname in ${!foreign_option_*} ; do
		option="${!optionvarname}"
		echo "$option"
		split_into_parts $option
		if [ "$part1" = "dhcp-option" ] ; then
			if [ "$part2" = "DNS" ] ; then
				NMSRVRS="${NMSRVRS:+$NMSRVRS }$part3"
			elif [ "$part2" = "DOMAIN" ] ; then
				SRCHS="${SRCHS:+$SRCHS }$part3"
			fi
		fi
	done
	R=""
	[ "$SRCHS" ] && R="search $SRCHS
"
	for NS in $NMSRVRS ; do
        	R="${R}nameserver $NS
"
	done
	echo -n "$R" | /sbin/resolvconf -a "${dev}.openvpn"
	;;
  down)
	/sbin/resolvconf -d "${dev}.openvpn"
	;;
esac
и увидишь, что оно там дергает resolvconf. Поставь пакет, и ставь решено.

anonymous
()
Ответ на: комментарий от anonymous

Не надо, делай все обратно. Посмотри внутрь скрипта

А что именно надо внутри скрипта смотреть?

MRX256
() автор топика
Ответ на: комментарий от anonymous

Что в логе у тебя при подключении?

Логи предоставлю, только подскажи что ты имеешь виду. Лог это инфа которая в терминале отображается после того как я ввожу команду для подключения, или какой то файл куда записываются все логи?

MRX256
() автор топика

Пробовал подключить VPN с помощью 3 разных провайдеров и вот оно чудо, на одном из них нет утечки по DNS, а у остальных есть. При этом никакие настройки не трогаю, просто по очереди запускаю файлы конфигурации командой sudo openvpn --config /провайдер1 и все работает, но когда пишу в терминал команду sudo openvpn --config /провайдер2 то идет утечка по DNS. Кто то может сказать почему так происходит?

MRX256
() автор топика

Долго ковырялся с этими VPN и решил свой вопрос по большей части, но не до конца. Сначала доковырялся до того, что к какому бы VPN серверу я не подключался DNS запросы шли на какой то один и тот же сервер. Нашел в папке /etc/resolvconf/run/interface файл интерфейса OpenVpn в котором был прописан какой то nameserver, что то вроде 10.8.8.1 и с тех пор данные в resol.conf начали меняться при каждом подключении, интерфейсы в /etc/resolvconf/run/interface начали появляться и пропадать. Вроде все заработало, такое чувство что это были непонятные глюки. После чего я взял развернул бэкап всей своей системы, затем установил пакет resolvconf и как будто и не было проблем с DNS. Но вот что мне интересно до сих пор, пока это дело ковырял у меня скопилось куча файлов конфигурации от разных VPN провайдеров, и когда подключаюсь, на некоторых из них есть утечка по DNS, а у некоторых нету. При этом утечка происходит не рандомно, а конкретный файл конфигурации четко либо дает утечку DNS либо нет. Можно как то подправить утечку по DNS в файлах конфигурации которые стабильно дают эту утечку? Нагуглил такую тему, что если в файл конфигурации добавить в конце эти строчки:

script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf

то DNS трафик пойдет через VPN провайдера, но этого не происходит. Как видите, еще есть остался маленький нерешенный вопрос.

MRX256
() автор топика
Ответ на: комментарий от MRX256

При этом утечка происходит не рандомно, а конкретный файл конфигурации четко либо дает утечку DNS либо нет.

Скорее в серверном конфиге, где у тебя dnsleak, нет строчек про пуш dns. Поэтому ничего не прилетает со стороны сервера. Можешь самостоятельно руками отредактировать /etc/resolv.conf вписать туда публичный dns сервер. Или не пользуйся этими провайдерами.

anonymous
()

Нужно предотвращать не утечку DNS в отдельности, но все утечки трафика вне VPN в целом.

Наиболее простой и понятный вариант это запретить весь исходящий трафик по умолчанию:

iptables -P OUTPUT DROP

После чего разрешить только трафик до VPN сервера:

iptables -A OUTPUT -d 192.0.2.17 -j ACCEPT

Где 192.0.2.17 — IP адрес VPN сервера.

А также траффик через само VPN соединение:

iptables -A OUTPUT -o tun+ -j ACCEPT
iptables -A OUTPUT -o tap+ -j ACCEPT

Где tun+ и tap+ — маски openvpn интерфейсов по умолчанию.

См. мою конфигурацию iptables.

anonymous
()
Ответ на: комментарий от anonymous

Нужно предотвращать не утечку DNS в отдельности, но все утечки трафика вне VPN в целом.

А какие могут быть утечки трафика вне VPN вообще?

Где tun+ и tap+ — маски openvpn интерфейсов по умолчанию.

А где брать эти маски openvpn?

И насчет iptables, я когда то поверхностно ознакомился с iptables, мне показалось это дело сложным, поэтому не сильно не вникал, помню что там некоторые вещи могут функционировать до первой перезагрузки. Поэтому спрошу, команды iptables которые ты мне написал будут действовать до первой перезагрузки ПК или всегда?

MRX256
() автор топика
Ответ на: комментарий от anonymous

Нужно предотвращать не утечку DNS в отдельности, но все утечки трафика вне VPN в целом.

Кстати, если брать чисто VPN клиент, любой, не только OpenVpn, какие виды утечки трафика могут быть у клиентов кроме утечек DNS , IPv6 и привычных всем IPv4?

MRX256
() автор топика

Я использую сейчас бичезатычку в виде пары скриптов:

vpnon.sh

sudo openvpn --config ~/.openvpn/client.ovpn --daemon
sudo sed -i '2s/^/# /' /etc/resolv.conf
echo 'nameserver <DNS_MAIN>' | sudo tee -a /etc/resolv.conf 1>/dev/null
echo 'nameserver <DNS_FALLBACK>' | sudo tee -a /etc/resolv.conf 1>/dev/null
sudo timedatectl set-timezone '<VPN_TZ>'

vpnoff.sh

sudo killall openvpn
sudo sed -i -e '4d' -e '3d' /etc/resolv.conf
sudo sed -i 's/# //' /etc/resolv.conf
sudo timedatectl set-timezone '<MY_TZ>'

Где:

  • <DNS_MAIN> — основной DNS.
  • <DNS_FALLBACK> — бэкапный DNS.
  • <VPN_TZ> — тайм-зона сервера.
  • <MY_TZ> — тайм-зона моей машины.

Вроде как ничего не вытекает, но решение говнистое — нужно по-хорошему пропускать всё через туннель, форсить весь трафик с клиента через правила iptables. Настроить свой DNS-резолвер типа unbound и оттуда плясать.

Всё никак не соберусь довести до ума.

SfyMantissa
()
Ответ на: комментарий от SfyMantissa

sudo sed -i '2s/^/# /' /etc/resolv.conf
echo 'nameserver <DNS_MAIN>' | sudo tee -a /etc/resolv.conf 1>/dev/null
echo 'nameserver <DNS_FALLBACK>' | sudo tee -a /etc/resolv.conf 1>/dev/null

тогда уж лучше так

echo "nameserver $DNS" | /sbin/resolvconf -a tun0.vpn
/sbin/resolvconf -d tun0.vpn

anonymous
()

обнаружил утечку DNS трафика

Так никто и не уточнил, что автор треда подразумевает под 'утечкой днс трафика'. Может он чекает на каком-нибудь популярном сайте и у него браузер стучит?

2. Зачем вам openvpn для этих целей, если есть shadowsocks + https://github.com/shadowsocks/v2ray-plugin

anonymous
()
Ответ на: комментарий от MRX256

Кстати, если брать чисто VPN клиент, любой, не только OpenVpn, какие виды утечки трафика могут быть у клиентов кроме утечек DNS , IPv6 и привычных всем IPv4?

Из головы, если шапочку не надел.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.