• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Поднимаем свой DNS + Wireguard

k0priz

(L3) cache
Пользователь
Регистрация
23.10.2023
Сообщения
166
Реакции
198
Гарант сделки
4
Всем привет данная статься будет разделенна на 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 разбрайтесь сами, спасибо за внимание:)
 
Тоже самое для тех у кого пока нет свитера и бороды:
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх