How to Wiki Database (change log)
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
16 KiB
186 lines
16 KiB
9 months ago
|
====== Простой VPN-сервер ======
|
||
|
|
||
|
Рассмотрим установку и настройку [[:WireGuard|WireGuard]] в качестве простого VPN-сервера на [[wpru>Debian|Debian 10]].
|
||
|
|
||
|
Будем исходить из задачи настроить VPN c топологией "звезда", сервер - на [[:VPS]]. C клиентов настроим доступ к домашней сети и к компьютеру в офисе (с которого так же будем иметь доступ к домашней сети). Кроме того, через VPN будет маршрутизироваться трафик в [[:yggdrasil:Yggdrasil]], т.е., на клиентах Yggdrasil устанавливать необходимости не будет для того, чтобы получить доступ сеть. Для разрешения доменных имен [[yggdrasil:dns:ALFIS|ALFIS]] через туннель, будем использовать один из [[:yggdrasil:dns:alfis#список_публичных_серверов|публичных серверов]].
|
||
|
|
||
|
//Примечание: этот пример предполагает наличие в домашней сети роутера с возможностью установки в него WireGuard.//
|
||
|
|
||
|
===== Установка =====
|
||
|
|
||
|
Для Debian 10 WireGuard находится в репозитории backports. Добавляем его:
|
||
|
<code>sh -c "echo 'deb http://deb.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.list"</code>
|
||
|
|
||
|
Обновляем информацию о пакетах и устанавливаем WireGuard:
|
||
|
<code>apt update && apt-get --yes install wireguard-dkms wireguard-tools</code>
|
||
|
|
||
|
===== Настройка сервера =====
|
||
|
|
||
|
Активируем режим роутера, включив форвардинг пакетов между сетевыми интерфейсами:
|
||
|
<code>sysctl -w net.ipv4.ip_forward=1
|
||
|
sysctl -w net.ipv6.conf.all.forwarding=1</code>
|
||
|
|
||
|
Для того, чтобы форвардинг работал после перезагрузки системы вносим изменение в конфигурационный файл ''%%/etc/sysctl.conf%%'' -- в строках ''%%#net.ipv4.ip_forward=1%%'' и ''%%#net.ipv6.conf.all.forwarding=1%%'' удаляем признак комментария (''%%#%%''). Должно получиться так:
|
||
|
<code>net.ipv4.ip_forward=1
|
||
|
net.ipv6.conf.all.forwarding=1</code>
|
||
|
|
||
|
Создаем каталог для конфигурационного файла WireGuard и переходим в него:
|
||
|
<code>mkdir -p /etc/wireguard && cd /etc/wireguard</code>
|
||
|
|
||
|
Генерируем ключи сервера:
|
||
|
<code>wg genkey | tee privatekey-server | wg pubkey > publickey-server</code>
|
||
|
|
||
|
И сразу можем сгенерировать ключи для клиентов (например, для: домашнего роутера, смартфона, ноутбука и рабочей машины в офисе)
|
||
|
<code>wg genkey | tee privatekey-client-router | wg pubkey > publickey-client-router
|
||
|
wg genkey | tee privatekey-client-smartph | wg pubkey > publickey-client-smartph
|
||
|
wg genkey | tee privatekey-client-wrkPC | wg pubkey > publickey-client-wrkPC
|
||
|
wg genkey | tee privatekey-client-ntb | wg pubkey > publickey-client-ntb</code>
|
||
|
|
||
|
Создаем конфигурационный файл сервера WireGuard (используем редактор vi, nano или любой другой):
|
||
|
<code>vi wg0.cfg</code>
|
||
|
|
||
|
Содержимое файла:
|
||
|
<code>[Interface]
|
||
|
Address = 10.0.0.1/24, fd00::1/124 # адреса сервера в туннеле и их подсети
|
||
|
PrivateKey = 7Ewkr05HDT/DdmYSM8rGv554OoF3mk9vfC3DdlYW/nc= # приватный ключ сервера
|
||
|
ListenPort = 51820 # порт, на котором будет ожидать подключений сервер (можно изменить, если будут ограничения по используемым портам)
|
||
|
# правила iptables будут добавляться и удаляться автоматически при включении и отключении виртуального сетевого интерфейса WireGuard:
|
||
|
# (эти правила реализуют NAT для клиентов)
|
||
|
#IPv4
|
||
|
PostUp = iptables -A FORWARD -i %i -j ACCEPT
|
||
|
PostUp = iptables -A FORWARD -o %i -j ACCEPT
|
||
|
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||
|
#IPv6
|
||
|
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT
|
||
|
PostUp = ip6tables -A FORWARD -o %i -j ACCEPT
|
||
|
PostUp = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||
|
#Yggdrasil
|
||
|
PostUp = ip6tables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
|
||
|
#########################
|
||
|
#IPv4
|
||
|
PostDown = iptables -D FORWARD -i %i -j ACCEPT
|
||
|
PostDown = iptables -D FORWARD -o %i -j ACCEPT
|
||
|
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
||
|
#IPv6
|
||
|
PostDown = ip6tables -D FORWARD -i %i -j ACCEPT
|
||
|
PostDown = ip6tables -D FORWARD -o %i -j ACCEPT
|
||
|
PostDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
||
|
#Yggdrasil
|
||
|
PostDown = ip6tables -t nat -D POSTROUTING -o tun0 -j MASQUERADE
|
||
|
#eth0 - имя интерфейса на сервере (у вас может отличаться)
|
||
|
#tun0 - интерфейс Yggdrasil на сервере
|
||
|
#вместо %i WireGuard автоматически подставит имя своего интерфеса (wg0)
|
||
|
|
||
|
#Ниже в конфигурационном файле сервера перечислены клиенты, которым разрешено подключение к серверу
|
||
|
[Peer]
|
||
|
#Роутер
|
||
|
PublicKey = keP1jP+XvTp84kUxct6MGXx8rR1xFCMoBniN8m+WLxE= # соответствующий публичный ключ клиента
|
||
|
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24 # адреса и подсети, которые будут маршрутизироваться сервером, через туннель до клиента (иными словами, то, к чему сервер будет иметь доступ через туннель)
|
||
|
# 192.168.1.0/24 - адрес домашней сети, роутер в этой сети имеет адрес 192.168.1.1
|
||
|
# 10.0.0.2/32 - адрес клиента в туннеле (/32 - означает один хост в подсети)
|
||
|
|
||
|
[Peer]
|
||
|
#Смартфон
|
||
|
PublicKey = ho2zZ01goTnlZ03pjl8cJcvRVzsnAivkKRjHaXa50Q0=
|
||
|
AllowedIPs = 10.0.0.3/32, fd00::3/128 #/128 - один хост
|
||
|
|
||
|
[Peer]
|
||
|
#ноутбук
|
||
|
PublicKey = trrzZ01goTnlZ03pjl8cJcvRVzsnAivkKRjHaXaamd=
|
||
|
AllowedIPs = 10.0.0.4/32, fd00::4/128
|
||
|
|
||
|
[Peer]
|
||
|
#Рабочая машина в офисе
|
||
|
PublicKey = 0Kn68QK84Nb5wkxbzpnLiPPgj15KXpEvRk+ATlxFvHw=
|
||
|
AllowedIPs = 10.0.0.5/32, fd00::5/128
|
||
|
|
||
|
#В секции [Interface] указывается приватный ключ сервера (генерировали ранее), в секциях [Peer] указываются публичные ключи клиентов.</code>
|
||
|
|
||
|
//Примечание: fd00::/8 -- аналог частных IPv4 адресов. Подробнее: [[https://habr.com/ru/post/64592/|Основы IPv6]], [[wpru>Частный_IP-адрес|Частный IP-адрес]].//
|
||
|
|
||
|
Включаем автоматический запуск сервера WireGuard при загрузке системы:
|
||
|
<code>systemctl enable wg-quick@wg0</code>
|
||
|
|
||
|
На этом настройку сервера можно завершить...
|
||
|
|
||
|
Запускаем сервер WireGuard:
|
||
|
<code>wg-quick up wg0</code>
|
||
|
|
||
|
Файлы конфигурации и ключи можно сохранить на локальной машине для того, чтобы проще было настраивать клиенты. Если вы подключаетесь из под Windows можно использовать программу [[https://winscp.net/eng/docs/lang:ru|WinSCP]], под Linux - scp.
|
||
|
|
||
|
===== Настройка клиентов =====
|
||
|
|
||
|
Подробно рассмотрим настройку клиента на Linux.
|
||
|
|
||
|
Клиенты под Windows, на смартфоне и роутере настраиваются c помощью графического интерфейса WireGuard (т.е., нужно установить соответствующее приложение), и при понимании принципов, с этим сложностей возникнуть не должно.
|
||
|
|
||
|
[[:wireguard:simple_vpn#По поводу роутера|Ниже]] будет еще небольшое замечание по поводу настройки роутера...
|
||
|
|
||
|
На ноутбуке с Linux аналогичным описанному выше способом устанавливаем WireGuard, создаем конфигурационный файл, вносим в него:
|
||
|
|
||
|
<code>[Interface]
|
||
|
Address = 10.0.0.4/24, fd00::4/124
|
||
|
PrivateKey = sdwrd1oaoYAFOg0CPBkXhsvfzPrLj79aIQ0THsffes=
|
||
|
DNS = 94.140.14.14, 94.140.15.15, 302:db60::53 # последним указан публичный адрес DNS-сервера ALFIS (можно указать не публичный, а свой)
|
||
|
#так же, в разделе с DNS можно прописать домашний DNS-сервер (pi.hole, например)
|
||
|
|
||
|
#Трафик через туннель маршрутизируется полностью, за исключением нижеследующего:
|
||
|
PostUp = ip route add zzz.zz.zzz.zz via 192.168.1.1 # сервер в офисе (нужно по работе)
|
||
|
PostUp = ip route add $(dig A myDomain.com +short | tail -n 1) via 192.168.1.1 # и еще один сервер, который требует скоростного доступа
|
||
|
|
||
|
#!Если вместе с туннелем Wireguard на этой же машине будет запускаться Yggdrasil, то тут же имеет смысл перечислить
|
||
|
#публичные пиры, к которым будете подключаться, чтобы соединение с ними не шло через туннель.
|
||
|
|
||
|
################################################################
|
||
|
|
||
|
#то, к чему ходим напрямую
|
||
|
PostDown = ip route del zzz.zz.zzz.zz
|
||
|
PostDown = ip route del $(dig A myDomain.com +short | tail -n 1)
|
||
|
|
||
|
#!Если вместе с туннелем Wireguard на этой же машине будет запускаться Yggdrasil, то тут же имеет смысл перечислить
|
||
|
#публичные пиры, к которым будете подключаться, чтобы соединение с ними не шло через туннель.
|
||
|
|
||
|
[Peer]
|
||
|
PublicKey = asdoSDafr2sNv6cp/FcdlKiuVCi2DtCduU0mmrrte=
|
||
|
Endpoint = xxx.xxx.xxx.xxx:51820 # адрес сервера WireGuard и порт, на котором он ожидает подключений
|
||
|
AllowedIPs = 0.0.0.0/0, ::/0 # адреса / подсети, которые будут маршрутизироваться через туннель (маршрутизируем всё)
|
||
|
#!При такой конфигурации необходимо наличие "настоящего" IPv6 на сервере, иначе сайты по IPv6 (не Yggdrasil) открываться не будут
|
||
|
#!Вместо ::/0 можно использовать 200::/7
|
||
|
PersistentKeepalive = 30 # чтобы соединение не прерывалось</code>
|
||
|
|
||
|
Ничто не мешает создать wg1.conf, wg2.conf и т.д. для подключения из разных мест.
|
||
|
|
||
|
На этом клиенте туннель постоянно поднятым держать необходимости нет, симлинк systemd-юнита создавать не нужно. При необходимости активируем туннель так:
|
||
|
<code>wg-quick up wg0</code>
|
||
|
|
||
|
Информацию о соединениях и на сервере и на клиенте можно смотреть так:
|
||
|
<code>wg show wg0</code>
|
||
|
|
||
|
==== По поводу роутера ====
|
||
|
|
||
|
На роутере WireGuard настраивается, в основном, для того, чтобы в любое время из любого места иметь доступ к домашней сети, поэтому туннельный IPv6 ему не нужен. Кроме того, из дома мы в любой момент с любого устройства можем получить доступ к серверу, и это даёт возможность настроить на роутере машрутизацию через туннель к ошибочно заблокированным [[wpru>Роскомнадзор|РКН]] сайтам. Т.о., все устройства дома проблем из-за этого испытывать не будут и не будут требовать каких-либо дополнительных действий. Весь трафик пускать через туннель на роутере смысла нет, можно прописать там конкретные адреса. Но тут кому как будет удобнее...
|
||
|
|
||
|
Устанавливается WireGuard на роутере, как специальный компонент через панель управления, и настраивается так же -- через web-интерфейс, либо через [[wp>Opkg|opkg]] и консоль -- в зависимости от модели и аппаратных возможностей роутера...
|
||
|
|
||
|
===== Заключение =====
|
||
|
|
||
|
Так можно настроить простую приватную сеть с топологией "звезда". Устройства связаны, как нужно, доступ к Yggdrasil через туннель работает, доменные имена успешно разрешаются указанными серверами, в том числе ALFIS.
|
||
|
|
||
|
Если вам доступ к Yggdrasil через туннель не нужен, можно убрать всё, что касается IPv6 из конфигурационных файлов.
|
||
|
|
||
|
В процессе настройки [маршрутизации] вам, скорее всего, понадобятся средства диагности, чтобы видеть, по какому именно маршруту идут пакеты до заданного узла. Для этих целей можно использовать утилиты traceroute или mtr-tiny (совмещает в себе ping и traceroute).
|
||
|
|
||
|
Чтобы увидеть по какому маршруту идут пакеты просто выполните: <code>traceroute google.com</code>
|
||
|
или
|
||
|
<code>mtr -b google.com</code>
|
||
|
|
||
|
Флагами ''%%-4%%'' ''%%-6%%'' можно выбирать, тестируем IPv4 или IPv6.
|
||
|
|
||
|
//Примечание: в Windows утилита traceroute переименована в tracert.//
|
||
|
|
||
|
Иногда, так же бывает полезно узнать, как ресурсы, к которым вы обращаетесь, определяют ваш IP-адрес. Для этого можно использовать такие сайты, как [[https://2ip.ru/|2ip.ru]] или [[https://myip.ru/|myip.ru]]. Подобные сайты в Yggdrasil: [[http://[200:6223::d35b:1fd8:be0d:2841]/|myip.ygg]], [[http://[301:d060:fb10:ae5b::2]/|http://[301:d060:fb10:ae5b::2]/]].
|
||
|
|
||
|
Так, если вы зайдете на [[https://myip.ru/|myip.ru]] до подключения к VPN, он покажет адрес, который выдан вам вашим провайдером Интернет (или прокси-сервера, если подключаетесь через прокси), а если после подключения к VPN (при условии, что маршрутизация настроена правильно), покажет адрес вашего VPN-сервера.
|
||
|
|
||
|
И на последок, пара сайтов, которые могут помочь определить "утечку" (если для вас это критично) вашего реального IP или запросов DNS: [[https://ipleak.net/|ipleak.net]], [[https://dnsleak.com/|dnsleak.com]], [[https://www.dnsleaktest.com|dnsleaktest.com]].
|