Поднимаем свой DNS + Wireguard

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Всем привет данная статься будет разделенна на 2 части
1.Wireguard и VDS
2.Dnsproxy и pi hole

1.Часть Wireguard и VDS

Покупаем сервер Digital OCean, Timweb,First VDS берите где хотите
Я взял на TimWeb, берем на Debian 12 так как команды будут потспроенны под него
Подключаемся к серверу

-----------------------
Код: Скопировать в буфер обмена
Код:
apt update -- Обновляем пакеты

echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list

printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstab

apt install wireguard -- устанавлием сам wireguard
-----------------------
Если нет модуля ядра, ставим и его:
apt-get install wireguard-dkms wireguard-tools linux-headers-$(uname -r)
Как только всё будет готово, проверяем, что модуль загружен:
modprobe wireguard && lsmod | grep wireguard
--------------------
После создаем любую папку
mkdir ~/{Название вашей папки} cd ~/{Название вашей папки}
Создаем ключи для сервера и клиента
Код: Скопировать в буфер обмена
Код:
umask 077
wg genkey | tee server_private_key | wg pubkey > server_public_key
wg genkey | tee client_private_key | wg pubkey > client_public_key
-----------------------
Далее через cat смотрим наши ключи
Код: Скопировать в буфер обмена
Код:
cat server_private_key |
cat server_public_key  |           
cat client_private_key |         
cat client_public_key  |
Все ключи запишите ,они еще понадобятся
-----------------------
В sysctl включаем forwarding
Код: Скопировать в буфер обмена
Код:
nano /etc/sysctl.conf
# net.ipv4.ip_forward = 1
sysctl -p
-----------------------
cd /etc/wireguard/ nano /etc/wireguard/wg0.conf

Туда вписываем:
# nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = {Сюда вписываем ваш приватный ключ 'cat server_private_key'}

[Peer]
PublicKey = {Сюда вписываем паблик ключ 'cat client_public_key'}
AllowedIPs = 10.8.0.2/32
-----------------------
Нажмите, чтобы раскрыть...
Пока что закрываем файл
По желанию можем защититься и сделать его только для root пользователей командой:

chmod 600 /etc/wireguard/wg0.conf
-----------------------
Включаем и запускаем сервис wireguard
Код: Скопировать в буфер обмена
Код:
systemctl enable wg-quick@wg0.service
systemctl restart wg-quick@wg0.service
-----------------------
Далее вы можете подкючить любое устройство к вашему wireguard я буду показывать на примере мвой системе parrot os

Код: Скопировать в буфер обмена
Код:
sudo add-apt-repository ppa:wireguard/wireguard или же apt install wireguard
cd /etc/wireguard
nano /etc/wireguard/wg0-client.conf

[Interface]
Address = 10.8.0.2/32
PrivateKey = {сюда вписываем cat client_private_key}
DNS = 8.8.8.8

[Peer]
PublicKey = {сюда вписываем cat server_public_key}
Endpoint = {На сервере прописываем 'ifconfig' и пишем наш ip}:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 21
Нажмите, чтобы раскрыть...
-----------------------
Сохраняем файл, и пробуем подключиться командой:

wg-quick up wg0-client -- включаем

[#] ip link add wg0-client type wireguard
[#] wg setconf wg0-client /dev/fd/63
[#] ip address add 10.8.0.2/32 dev wg0-client
[#] ip link set mtu 1420 dev wg0-client
[#] ip link set wg0-client up
[#] mount `8.8.8.8' /etc/resolv.conf
[#] wg set wg0-client fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0-client table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
Нажмите, чтобы раскрыть...

Если выдает такую ошибку /usr/bin/wg-quick: line 32: resolvconf: command not found
То просто пишите 'sudo apt install openresolv' и все.



wg-quick down wg0-client -- выключаем

[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0-client
[#] umount /etc/resolv.conf
Нажмите, чтобы раскрыть...

Итак мы закончили первую часть статьи ,далее мы будем поднимать свой DNS сервер через pi hole

2.ЧАсть Dnsproxy и pi hole

Будем использовать программу dnsproxy:
--------------------------------------------
Для работы с данным репозиторием нам нужен язык go версии не менее 1.20
Установка или обновления golang


Код: Скопировать в буфер обмена
Код:
sudo apt update && sudo apt upgrade

cd Downloads

wget https://golang.org/dl/go1.20.2.linux-amd64.tar.gz

sudo tar -C /usr/local -xzf go1.20.2.linux-amd64.tar.gz

Далее добавляем golang в PATH


Код: Скопировать в буфер обмена
Код:
echo "export PATH=/usr/local/go/bin:${PATH}" | sudo tee -a $HOME/.profile

source $HOME/.profile

go version -- проверяем версию go

Должно вывести:

go version go1.20.2 linux/amd64
--------------------------------------------
устанавливаем dnsproxy
git clone https://github.com/AdguardTeam/dnsproxy make build

если сделать все правильно то ошибок быть не должно
--------------------------------------------
Выбирем на сайте проги любой вариант подключния
./dnsproxy -u sdns://AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk -- я выбрал этот

Запускаем программу
Если все без ошибок то работаем дальше

--------------------------------------------
1.кликаем на иконку wifi правой конпокой
2.нажимаем edit connection
3.Выбираем сеть к которой вы подключены не вадно wifi или ethernet
4.Выбираем ipv4 Settings
5.в Dns сервер вписываем 127.0.0.1 и вес ваш трафик будет через dns proxy который вы хостите на основной машине

Нажмите, чтобы раскрыть...

если все работает и вы разобрались то теперь будес совмещать wireguard и pi hole
--------------------------------------------
Подключаемся к нашему серверу через ssh
Вписываем:

Код: Скопировать в буфер обмена
Код:
sudo iptables -A INPUT -s 10.8.0.1/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT

sudo iptables -A INPUT -s 10.8.0.1/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT

apt install iptables-persistent

apt install curl

echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections

echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections

sudo apt install iptables-persistent -y

sudo systemctl enable netfilter-persistent

sudo netfilter-persistent save

Устанавливаем pi hole
curl -sSL https://install.pi-hole.net | sudo PIHOLE_SKIP_OS_CHECK=true bash

1.После установки выбираем wg0
2.Далее нажмаем yes/continue
3.Привыборе Dns сервере выбрайте любой, потом сдеаем нормальный
4.И выбраем Anonumous режим

Нажмите, чтобы раскрыть...

--------------------------------------------
Установим Unbound DNS:

sudo apt install unbound unbound-host -y curl -o /var/lib/unbound/root.hints https://www.internic.net/domain/named.cache

--------------------------------------------

Создаем конфиг /etc/unbound/unbound.conf.d/pi-hole.conf
nano /etc/unbound/unbound.conf.d/pi-hole.conf
Туда вставляем этот текст:

server:
# if no logfile is specified, syslog is used
# logfile: "/var/log/unbound/unbound.log"
verbosity: 1
port: 5353

do-ip4: yes
do-udp: yes
do-tcp: yes

# may be set to yes if you have IPv6 connectivity
do-ip6: no

# use this only when you downloaded the list of primary root servers
root-hints: "/var/lib/unbound/root.hints"

# respond to DNS requests on all interfaces
interface: 0.0.0.0
max-udp-size: 3072

# IPs authorised to access the DNS Serverdig pi-hole.net @127.0.0.1 -p 53
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.1 allow
access-control: 10.8.0.1/24 allow

# hide DNS Server info
hide-identity: yes
hide-version: yes

# limit DNS fraud and use DNSSEC
harden-glue: yes
harden-dnssec-stripped: yes
harden-referral-path: yes

# add an unwanted reply threshold to clean the cache and avoid, when possible, DNS poisoning
unwanted-reply-threshold: 10000000

# have the validator print validation failures to the log val-log-level: 1
# don't use Capitalisation randomisation as it known to cause DNSSEC issues sometimes
# see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
use-caps-for-id: no

# reduce EDNS reassembly buffer size
# suggested by the unbound man page to reduce fragmentation reassembly problems
edns-buffer-size: 1472

# TTL bounds for cache
cache-min-ttl: 3600
cache-max-ttl: 86400

# perform prefetching of close to expired message cache entries
# this only applies to domains that have been frequently queried
prefetch: yes
prefetch-key: yes
# one thread should be sufficient, can be increased on beefy machines
num-threads: 1
# ensure kernel buffer is large enough to not lose messages in traffic spikes
so-rcvbuf: 1m

# ensure privacy of local IP ranges
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
Нажмите, чтобы раскрыть...

Перезагрузи тачку
reboot

Проверяем как все работает , нигде не должно быть ошибок


dig pi-hole.net @127.0.0.1 -p 5353 dig sigfail.verteiltesysteme.net @127.0.0.1 -p 5353 dig sigok.verteiltesysteme.net @127.0.0.1 -p 5353
--------------------------------------------

1.На основной такчке заходим в админку pi hole
2.Заходим в settings там кликаем на dns и в параметр custom вписываем 127.0.0.1#53
3.Далее редактируем конфигурационный файл wireguard на оосновной тачке
4.Редактируем парамет DNS меня его на ip wg0 на сервере
5.После тыкаем на wifi правой конпке
6.Выбираем ipv4 Settings
7.В Dns сервер вписываем 10.8.0.1 и вес ваш трафик будет через dns который теперь хоститься на сервере

Нажмите, чтобы раскрыть...

На этом собственно все, в самом pi hole разбрайтесь сами, спасибо за внимание:)
 
Сверху Снизу