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.
185 lines
16 KiB
185 lines
16 KiB
====== Простой 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]].
|
|
|