💾 Archived View for betahowto.duckdns.org › wireguard:simple_vpn captured on 2024-03-21 at 15:35:17. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-02-05)
-=-=-=-=-=-=-
Рассмотрим установку и настройку WireGuard ( gemini://betahowto.duckdns.org/WireGuard ) в качестве простого VPN-сервера на Debian 10 ( https://ru.wikipedia.org/wiki/Debian ).
Будем исходить из задачи настроить VPN c топологией "звезда", сервер - на ALFIS ( gemini://betahowto.duckdns.org/VPS]]. C клиентов настроим доступ к домашней сети и к компьютеру в офисе (с которого так же будем иметь доступ к домашней сети). Кроме того, через VPN будет маршрутизироваться трафик в ( gemini://betahowto.duckdns.org/yggdrasil:Yggdrasil ), т.е., на клиентах Yggdrasil устанавливать необходимости не будет для того, чтобы получить доступ сеть. Для разрешения доменных имен [[yggdrasil:dns:ALFIS ) через туннель, будем использовать один из публичных серверов ( gemini://betahowto.duckdns.org/yggdrasil:dns:alfis#список_публичных_серверов ).
Примечание: этот пример предполагает наличие в домашней сети роутера с возможностью установки в него WireGuard.
Для Debian 10 WireGuard находится в репозитории backports. Добавляем его:
sh -c "echo 'deb http://deb.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.list"
Обновляем информацию о пакетах и устанавливаем WireGuard:
apt update && apt-get --yes install wireguard-dkms wireguard-tools
Активируем режим роутера, включив форвардинг пакетов между сетевыми интерфейсами:
sysctl -w net.ipv4.ip_forward=1 sysctl -w net.ipv6.conf.all.forwarding=1
Для того, чтобы форвардинг работал после перезагрузки системы вносим изменение в конфигурационный файл /etc/sysctl.conf -- в строках #net.ipv4.ip_forward=1 и #net.ipv6.conf.all.forwarding=1 удаляем признак комментария (#). Должно получиться так:
net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1
Создаем каталог для конфигурационного файла WireGuard и переходим в него:
mkdir -p /etc/wireguard && cd /etc/wireguard
Генерируем ключи сервера:
wg genkey | tee privatekey-server | wg pubkey > publickey-server
И сразу можем сгенерировать ключи для клиентов (например, для: домашнего роутера, смартфона, ноутбука и рабочей машины в офисе)
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
Создаем конфигурационный файл сервера WireGuard (используем редактор vi, nano или любой другой):
vi wg0.cfg
Содержимое файла:
[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] указываются публичные ключи клиентов.
Примечание: fd00::/8 -- аналог частных IPv4 адресов. Подробнее: Основы IPv6 ( https://habr.com/ru/post/64592/ ), Частный IP-адрес ( https://ru.wikipedia.org/wiki/Частный_IP-адрес ).
Включаем автоматический запуск сервера WireGuard при загрузке системы:
systemctl enable wg-quick@wg0
На этом настройку сервера можно завершить...
Запускаем сервер WireGuard:
wg-quick up wg0
Файлы конфигурации и ключи можно сохранить на локальной машине для того, чтобы проще было настраивать клиенты. Если вы подключаетесь из под Windows можно использовать программу WinSCP ( https://winscp.net/eng/docs/lang:ru ), под Linux - scp.
Подробно рассмотрим настройку клиента на Linux.
Клиенты под Windows, на смартфоне и роутере настраиваются c помощью графического интерфейса WireGuard (т.е., нужно установить соответствующее приложение), и при понимании принципов, с этим сложностей возникнуть не должно.
Ниже ( gemini://betahowto.duckdns.org/wireguard:simple_vpn#По поводу роутера ) будет еще небольшое замечание по поводу настройки роутера...
На ноутбуке с Linux аналогичным описанному выше способом устанавливаем WireGuard, создаем конфигурационный файл, вносим в него:
[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 # чтобы соединение не прерывалось
Ничто не мешает создать wg1.conf, wg2.conf и т.д. для подключения из разных мест.
На этом клиенте туннель постоянно поднятым держать необходимости нет, симлинк systemd-юнита создавать не нужно. При необходимости активируем туннель так:
wg-quick up wg0
Информацию о соединениях и на сервере и на клиенте можно смотреть так:
wg show wg0
На роутере WireGuard настраивается, в основном, для того, чтобы в любое время из любого места иметь доступ к домашней сети, поэтому туннельный IPv6 ему не нужен. Кроме того, из дома мы в любой момент с любого устройства можем получить доступ к серверу, и это даёт возможность настроить на роутере машрутизацию через туннель к ошибочно заблокированным РКН ( https://ru.wikipedia.org/wiki/Роскомнадзор ) сайтам. Т.о., все устройства дома проблем из-за этого испытывать не будут и не будут требовать каких-либо дополнительных действий. Весь трафик пускать через туннель на роутере смысла нет, можно прописать там конкретные адреса. Но тут кому как будет удобнее...
Устанавливается WireGuard на роутере, как специальный компонент через панель управления, и настраивается так же -- через web-интерфейс, либо через opkg ( https://en.wikipedia.org/wiki/Opkg ) и консоль -- в зависимости от модели и аппаратных возможностей роутера...
Так можно настроить простую приватную сеть с топологией "звезда". Устройства связаны, как нужно, доступ к Yggdrasil через туннель работает, доменные имена успешно разрешаются указанными серверами, в том числе ALFIS.
Если вам доступ к Yggdrasil через туннель не нужен, можно убрать всё, что касается IPv6 из конфигурационных файлов.
В процессе настройки [маршрутизации] вам, скорее всего, понадобятся средства диагности, чтобы видеть, по какому именно маршруту идут пакеты до заданного узла. Для этих целей можно использовать утилиты traceroute или mtr-tiny (совмещает в себе ping и traceroute).
Чтобы увидеть по какому маршруту идут пакеты просто выполните: traceroute google.com
или
mtr -b google.com
Флагами -4 -6 можно выбирать, тестируем IPv4 или IPv6.
Примечание: в Windows утилита traceroute переименована в tracert.
Иногда, так же бывает полезно узнать, как ресурсы, к которым вы обращаетесь, определяют ваш IP-адрес. Для этого можно использовать такие сайты, как 2ip.ru ( https://2ip.ru/ ) или myip.ru ( https://myip.ru/ ). Подобные сайты в Yggdrasil: http://[200:6223::d35b:1fd8:be0d:2841]/|myip.ygg, [[http://[301:d060:fb10:ae5b::2]/|http://[301:d060:fb10:ae5b::2]/]].
Так, если вы зайдете на myip.ru ( https://myip.ru/ ) до подключения к VPN, он покажет адрес, который выдан вам вашим провайдером Интернет (или прокси-сервера, если подключаетесь через прокси), а если после подключения к VPN (при условии, что маршрутизация настроена правильно), покажет адрес вашего VPN-сервера.
И на последок, пара сайтов, которые могут помочь определить "утечку" (если для вас это критично) вашего реального IP или запросов DNS: ipleak.net ( https://ipleak.net/ ), dnsleak.com ( https://dnsleak.com/ ), dnsleaktest.com ( https://www.dnsleaktest.com ).
gemini://betahowto.duckdns.org/WireGuard
https://ru.wikipedia.org/wiki/Debian
gemini://betahowto.duckdns.org/VPS]].
gemini://betahowto.duckdns.org/yggdrasil:Yggdrasil
gemini://betahowto.duckdns.org/yggdrasil:dns:alfis#список_публичных_серверов
https://habr.com/ru/post/64592/
https://ru.wikipedia.org/wiki/Частный_IP-адрес
https://winscp.net/eng/docs/lang:ru
gemini://betahowto.duckdns.org/wireguard:simple_vpn#По
https://ru.wikipedia.org/wiki/Роскомнадзор
https://en.wikipedia.org/wiki/Opkg
http://[200:6223::d35b:1fd8:be0d:2841]/|myip.ygg,
http://[301:d060:fb10:ae5b::2]/|http://[301:d060:fb10:ae5b::2]/]].