Архив метки: VPN

Тонкая настройка WireGuard: доступ к сети за клиентом

Сегодня настроим сеть VPN WireGuard так, что бы клиент-1 VPN сети видел локальную сеть находящуюся за клиентом-2.




Схема сети WireGuard и локальной сети за клиентом.




Настройка сервера WireGuard




Сначала нам необходимо остановить сервер wireguard следующей командой:




sudo systemctl stop wg-quick@wg0.service




или




sudo wg-quick down /etc/wireguard/wg0.conf




Далее открываем файл настройки нашего сервера:




sudo nano /etc/wireguard/wg0.conf




  • Все пути справедливы, только если вы настраивали ваш VPN вот по этой инструкции.




В данном файле необходимо прописать у клиента-2, за которым локальная сеть, в секции [Peer] следующие строки:




[Peer]
PublicKey = публичный_ключ_клиента
AllowedIPs = 10.1.1.8/32, 10.5.1.0/24




  • AllowedIPs – в данной строке 10.1.1.8/32 – это ip-адрес клиента-2 в сети VPN, а 10.5.1.0/24 – это сеть за данным клиентом.




Данной командой мы разрешаем прохождения трафика локальной сети в сеть wireguard




После проделанных изменений запускаем наш сервер:




sudo systemctl start wg-quick@wg0.service




Теперь если с клиента-1 сети VPN попробовать пингануть ip адрес клиента-2 сети VPN, за которым присутствует локальная сеть, то мы увидим, что пакеты успешно проходят:




ping 10.1.1.8
PING 10.1.1.8 (10.1.1.8) 56(84) bytes of data.
64 bytes from 10.1.1.8: icmp_seq=1 ttl=127 time=231 ms
64 bytes from 10.1.1.8: icmp_seq=2 ttl=127 time=216 ms




А вот если попробовать пингануть какой либо IP адрес за клиентом-2, то увидим следующей результат:




ping 10.5.1.10
PING 10.5.1.10 (10.5.1.10) 56(84) bytes of data.
From 10.221.65.85 icmp_seq=1 Packet filtered
From 10.221.65.85 icmp_seq=2 Packet filtered




Как видим наши пакеты попадают под фильтр.




Чтобы разрешить прохождение пакетов, необходимо в конфигурационном файле wireguard нашего клиента-1 прописать следующее (покажу весь конфиг):




[Interface]
PrivateKey = приватный_ключ
ListenPort = 5555
Address = 10.1.1.5/32
[Peer]
PublicKey = публичный_ключ_сервера
AllowedIPs = 10.1.1.0/24, 10.5.1.0/24
Endpoint = IP-адрес_сервера:5555




Перезапускаем нашу службу wireguard на клиенте-1 :




sudo systemctl restart wg-quick@wg0.service




или




wg-quick down /etc/wireguard/wg0.conf
wg-quick up /etc/wireguard/wg0.conf




Набираем команду ping:




ping 10.5.1.10
PING 10.5.1.10 (10.5.1.10) 56(84) bytes of data.
64 bytes from 10.5.1.10: icmp_seq=1 ttl=62 time=93.9 ms
64 bytes from 10.5.1.10: icmp_seq=2 ttl=62 time=53.9 ms




Из вывода видно, что пакеты успешно проходят до сети за клиентом-2.




Вот еще одна команда из который мы видим, что на запрос адреса 10.5.1.10 отвечает клиент 10.1.1.8:




traceroute 10.5.1.10
traceroute to 10.5.1.11 (10.5.1.11), 30 hops max, 60 byte packets
 1  10.1.1.1 (10.1.1.1)  52.645 ms  52.614 ms  64.091 ms
 2  10.1.1.8 (10.1.1.8)  72.799 ms  84.202 ms  84.172 ms
 3  10.5.1.10 (10.5.1.10)  84.075 ms  84.028 ms  83.937 ms




На первый запрос у нас отвечает сервер wireguard 10.1.1.1, далее уже запрос уходит на клиента-2 vpn 10.1.1.8, за которым находятся локальная сеть 10.5.1.0/24. И на последний запрос уже отвечает клиент-3 локальной сети 10.5.1.10



[endtxt]




RSS







2022-08-24T12:52:22
VPN

Как обеспечить приватность в сети

Количество информации в сети постоянно увеличивается. Большая часть данных – это данные пользователей. Регистрация на сайтах, бронирование билетов, платёжные транзакции, предпочтения людей и многое другое бережно хранится на серверах и постоянно обрабатывается. Охоту за личными данными пользователями ведут рекламные площадки, торговые компании, соцсети. И если все они используют данные для показа нужной рекламы, то мошенники и хакеры преследуют только наживу. Как обеспечить свою приватность в сети? Есть несколько действенных алгоритмов.  Читать

[РЕШЕНО] Wireguard. RTNETLINK answers: Operation not supported.

При попытке создать интерфейс wireguard получаем ошибку «RTNETLINK answers: Operation not supported». Команда modprobe wireguard возвращает «modprobe: FATAL: Module wireguard not found».






Первым делом смотрим версию ядра, ядро должно быть не ниже версии 3.1:




uname -r




Если версия ядра нас устраивает, то выполняем




dkms status




должно вернуть что-то похожее:




wireguard, 1.0.20200401, 4.15.0-96-generic, x86_64: installed




Если ничего нет или в конце вместо installed стоит значение added, то двигаемся дальше. Набираем такую команду:




sudo modprobe wireguard




Выдает:




modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.15.0-96-generic




Лечим сообщение Wireguard. Operation not supported




Установим «Kernel-devel» необходимой версии. Версию нам подскажет команда «uname -r», набираем:




sudo apt install linux-headers-4.15.0-96-generic




или




sudo apt-get install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//')




После установки данного пакета wireguard успешно запустился.




Лечим сообщение Wireguard на Poxmox:




Если же автоматом не получается, то собираем модуль вручную:




# 
sudo apt install pve-kernel-5.4.60-1-pve
sudo dkms build wireguard/1.0.20200820
sudo dpkg-reconfigure wireguard-dkms




Либо




echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list
printf 'Package: *nPin: release a=unstablenPin-Priority: 90n' > /etc/apt/preferences.d/limit-unstable
apt update
apt install wireguard wireguard-tools wireguard-dkms pve-headers
echo "wireguard" >> /etc/modules-load.d/modules.conf
apt-get install --no-install-recommends wireguard-tools




После этого создание интерфейса должно проходить без проблем.



[endtxt]




. . . .




2020-04-09T08:58:33
VPN

Установка WireGuard на Ubuntu/Debian

Сегодня в статье приведу пример по установке и настройке VPN сервера WireGuard для операционных систем Ubuntu и Debian. Также данная статья будет справедлива и для всех производных систем данного типа.






WireGuard – это современная высокопроизводительная VPN для Linux,Windows, MacOS. Главной функцией WireGuard является обеспечение безопасного соединения между сторонами через сетевой интерфейс, зашифрованный с помощью аутентификации по открытому ключу. Это означает, что, в отличие от большинства виртуальных частных сетей, WireGuard не применяет топологию, что позволяет создавать различные конфигурации путем изменения конфигураций окружающей сети. Эта модель предлагает большую производительность и гибкость.




Сейчас WireGuard готовится к включению в состав ядра Linux. Если быть точнее, то он появится в ядре версии 5.6, он даже получил похвалу от Линус Торвальдса и в американском сенате.




Специалисты проверили скорость работы WireGuard и выяснили, что он способен обойти большинство протоколов шифрования в том числе широко известный протокол OpenVPN.




Причина, которая объясняет высокую скорость работы WireGuard, это применение быстрого и современного алгоритма шифрования, благодаря которому скорость передачи данных очень высока.
Кроме того, данный протокол очень похож на https, что позволяет обманывать системы анализа трафика DPI, установленные у Вашего провайдера и обходить эти блокировки по сигнатурам.




Установка и настройка при помощи скрипта




Для облегчения установки и настройки можете воспользоваться готовым скриптом. Данный скрипт универсальный для большинства систем.




Первым шагом подготовим нашу систему:




sudo -su
apt update && apt upgrade -y
apt install curl




Далее скачиваем скрипт.




curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh




Делаем его исполняемым:




chmod +x wireguard-install.sh




Запускаем установку и настройку WireGuard




./wireguard-install.sh




Установка WireGuard на Ubuntu




Установку нашего VPN WireGuard я буду производить на сервере под управлением операционной системы Ubuntu/Debian. И так поехали.




Ubuntu 18.04




Для начала надо добавить официальный репозиторий в систему:




sudo add-apt-repository ppa:wireguard/wireguard




  • Обновляем индексы




sudo apt update




  • Устанавливаем wireguard




sudo apt install -y wireguard wireguard-dkms iptables resolvconf qrencode




Ubuntu 20.04/22.04




Так как пакет входит в офицмальный репозиторий, то необходимо набрать всего лишь данные команды:




  • Обновляем индексы




sudo apt update




  • Устанавливаем wireguard




sudo apt install -y wireguard wireguard-dkms iptables resolvconf qrencode




Установка WireGuard на Debian




Для того чтобы установить WireGuard на Debian с начало необходимо авторизоваться под root пользователем:




sudo su




Далее набираем следующее:




echo "deb http://deb.debian.org/debian buster-backports main" >/etc/apt/sources.list.d/backports.list
apt update
apt install -y iptables resolvconf qrencode
apt install -y -t buster-backports wireguard




Для остальных операционных систем можете посмотреть официальную страничку инсталляции.




Также установите заголовки для вашего ядра, если вы еще этого не сделали:




apt-get install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//')




Настройка VPN WireGuard на серверной части




Давайте теперь настроим наш высокопроизводительный VPN на сервере wireguard. Для этого создадим файл конфигурации и необходимые ключи шифрования. Все действия выполняем из под root.




sudo su




(umask 077 && printf "[Interface]nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/wg-server-publickey.key




  • Первая команда записывает исходное содержимое конфигурационного файла в /etc/wireguard/wg0.conf. Значение umask в суб-оболочке позволяет создать файл с ограниченными разрешениями, не затрагивая обычную среду.
  • Вторая команда генерирует закрытый ключ с помощью команды wg и записывает ее непосредственно в конфигурационный файл с ограниченным доступом. Затем ключ передается обратно команде wg pubkey, чтобы получить связанный с ним открытый ключ, который записывается в /etc/wireguard/wg-sever-publickey.key. 




Следующим шагом нам необходимо включить форвардинг пакетов через наш сервер, для этого открываем следующий файл:




sudo nano /etc/sysctl.conf




И уберем знак комментария # со строки:




net.ipv4.ip_forward=1




Применим изменения




sudo sysctl -p




Далее отрываем файл на редактирования и вносим необходимую информацию о нашей VPN сети.




sudo nano /etc/wireguard/wg0.conf




Конфигурационный файл vpn wireguard




Внутри, в разделе [Interface], вы должны увидеть свой сгенерированный закрытый ключ. Этот раздел содержит конфигурацию для локальной стороны соединения.




В разделе Interface нужно также определить IP-адрес VPN, который будет использовать этот узел, и порт, который он будет прослушивать для соединений с одноранговыми узлами.




Давайте добавим в него следующие строки ListenPort, SaveConfig и Address:




[Interface]
PrivateKey = приватный_ключ_сервера
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.1/24 
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE




  • ListenPort – указываем свободный порт который будет прослушивать наш сервис wg-quick (VPN WireGuard)
  • SaveConfig – имеет значение true, чтобы сервис wg-quick мог автоматически сохранять свою активную конфигурацию в этом файле при завершении работы.
  • Address – это наш IP-адрес и маска сети
  • PostUP и PostDown – запускают необходимые правило для iptables




Пробуем поднять нашу сеть скриптом wg-quick:




sudo wg-quick up /etc/wireguard/wg0.conf




В системах с systemd вместо этого можно использовать следующую запись:




sudo systemctl start wg-quick@wg0.service




Если systemd ругается, то сперва необходимо включить сервис следующей командой:




sudo systemctl enable wg-quick@wg0.service




Настройка VPN WireGuard на клиентской машине




В качестве клиента у меня будет выступать ноутбук с операционной системой Ubuntu Desktop 18.04 LTS




Все действия выполняем из под пользователя root.




sudo su
add-apt-repository ppa:wireguard/wireguard 
apt install wireguard -y




Для Ubuntu 20.04 необходимо повторить тоже самое, что и при установке на серверную часть. (см. Выше)




Далее создаем конфигурационный файл и генерируем ключи:




(umask 077 && printf "[Interface]nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/wg-server-publickey.key




Открываем наш конфигурационный файл и вносим изменения.




sudo nano /etc/wireguard/wg0.conf




[Interface]
PrivateKey = приватный_ключ_клиента
ListenPort = 5555
Address = 10.0.0.2/32 




Создайте раздел под названием [Peer] после раздела [Interface].




[Peer]
PublicKey = Публичный_ключ_сервера
AllowedIPs = 10.0.0.0/24
Endpoint = IP-адрес_сервера:5555
PersistentKeepalive = 10




  • PublicKey – укажите значение открытого ключа сервера. Вы можете найти это значение, набрав на сервере команду: wg
  • AllowedIPs – указывает на пропуск трафика через VPN. В данном случае будет проходить через VPN только трафик сети 10.0.0.0/24. Весть остальной трафик пойдет через вашего провайдер. Для заворота всего трафика через VPN указываем значение 0.0.0.0/0
  • PersistentKeepalive – время в секундах для постоянной проверки доступности ресурса.




Запускаем сервис на Ubuntu:




 sudo systemctl start wg-quick@wg0.service 




Запускаем сервис на Debian:




sudo wg-quick up /etc/wireguard/wg0.conf




Peer на стороне сервера




На сервере также необходимо добавить информацию о клиенте. Иначе ваш туннель VPN не откроется. Для этого возвращаемся на сервер и останавливаем службу wireguard:




sudo systemctl stop wg-quick@wg0.service




Далее открываем конфигурационный файл:




sudo nano /etc/wireguard/wg0.conf




И вносим информацию о клиенте.




[Peer]
PublicKey = публичный_ключ_клиента
AllowedIPs = 10.0.0.5/32
PersistentKeepalive = 10




  • PublicKey – ключ клиента можно посмотреть на клиентской машине при помощи команды wg.
  • AllowedIPs – указывает на IP клиента. Обязательно с маской 32




Запускаем наш сервис:




 sudo systemctl start wg-quick@wg0.service 




Пробуем пропинговать клиента.




ping 10.0.0.2




64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.916 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.545 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.647 ms




Со стороны клиента также должен проходить пинг до сервера.




ping 10.0.0.1




64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=2.40 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.646 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.555 ms




Хотя статья получилась большой, но все настраивается очень быстро.




Тонкая настройка параметров WireGuard на примере Proxmox




  • /usr/lib/sysctl.d/10-pve-ct-inotify-limits.conf
    fs.inotify.max_queued_events = 8388608
    fs.inotify.max_user_instances = 65536
    fs.inotify.max_user_watches = 4194304
    vm.max_map_count = 262144
    net.ipv4.neigh.default.gc_thresh3 = 8192
    net.ipv6.neigh.default.gc_thresh3 = 8192
    kernel.keys.maxkeys = 2000
  • /usr/lib/sysctl.d/10-pve.conf
    net.bridge.bridge-nf-call-ip6tables = 0
    net.bridge.bridge-nf-call-iptables = 0
    net.bridge.bridge-nf-call-arptables = 0
    net.bridge.bridge-nf-filter-vlan-tagged = 0
    net.ipv4.igmp_link_local_mcast_reports = 0
    fs.aio-max-nr = 1048576
  • /usr/lib/sysctl.d/50-pid-max.conf
    kernel.pid_max = 4194304
  • /etc/sysctl.d/99-sysctl.conf
    net.ipv4.ip_forward = 1
  • /usr/lib/sysctl.d/protect-links.conf
    fs.protected_fifos = 1
    fs.protected_hardlinks = 1
    fs.protected_regular = 2
    fs.protected_symlinks = 1
  • /usr/lib/sysctl.d/pve-firewall.conf
    net.ipv4.conf.all.rp_filter = 2
  • /etc/sysctl.d/wg.conf
    net.ipv4.ip_forward = 1
    net.ipv6.conf.all.forwarding = 1
  • /etc/sysctl.conf
    net.ipv4.ip_forward = 1



[endtxt]




. . . .




2020-02-06T02:33:33
VPN

Выбор конфигурации VPN сервера

Приняв решение поддерживать UDP- и TCP-клиентов системный администратор неизбежно приходит ко второму вопросу: bridge-server или P2P-сервер. Напомним:




1. В режиме bridge-сервер используется виртуальный L2-интерфейс: tap. В этом случае VPN-клиент – и возможно его внутренняя сеть – становятся частью поднимаемой вами VPN-сети. К вам в сеть пойдут  ARP-трафик и broadcast-пакеты из сети клиента. Если последняя собрана на Windows, то широковещательный трафик будет изрядным. А если в сети клиента заведется доморощенный хакер, то сеть ваша и сети других ваших клиентов могут стать мишенью атак. Ибо L2-трафик предоставляет для этого больше возможностей;




2. В режиме P2P используется виртуальный  L3-интерфейс: tun. Степень защищенности вашей сети от клиента (и клиента от вашей сети) определяются настройками вашего файрвола. Широковещательный трафик (в частности NetBIOS-пакеты) отсутсвуют. Вы можете разрешить к вам движение RDP и HTTP пакетов – т.е. полностью подавить UDP-трафик из сети клиента – а к клиенту ограничить трафик SMB и SNMP портами. 




Предположим: у вас поднята группа терминальных серверов (обычно – виртуальных), собранных в одну внутреннюю сеть. И, возможно – на разных физических хостах. И вот оно искушение: включаем ОБА – TCP и UDP VPN-сервера – в режим bridge-server и vous a la! Клиенты просто и легко ходят к  серверам через оба VPN-сервера. Более того: появляется возможность кластеризовать VPN, подняв их на хостах у разных провайдеров! Никакой маршрутизации! Однако постарайтесь преодолеть это искушение. Если не хотите потом заниматься настройкой ebtables, а также решать с помощью политик Windows задачки – как не дать увидеть с ваших терминальных серверов компьютеры из разных клиентских сетей.




Наш совет: не использовать bridge-server конфигурацию без веских оснований. И никогда не использовать ее для подключения к своей сети недоверенных клиентов.  




Bridge-server оказывается полезным, когда нужно связать – в том числе временно – ваши собственные надежно защищенные внутренние серверные сети. Инструкции разработчика по конфигурации OpenVPN bridge-server: https://openvpn.net/index.php/open-source/documentation/miscellaneous/76-ethernet-bridging.htm




Если выбор конфигурации склонился в сторону P2P соединения остается решить последний вопрос: какую использовать топологию.




Опция topology   приобретает смысл совместно с dev tun. И предусматривает три  варианта: net30, p2p, subnet –  в случае использования OpenVPN версии 2.1 или новее.




Универсальным решением для VPN-сервера является net30 – default. Он будет работать со всеми версиями Windows, Unix, Mikrotik. Его недостатками являются: избыточное расходование адресного пространства – по 4 адреса на каждого VPN-клиента и более сложная маршрутизация к клиентской сети со стороны сервера в случае пула VPN-серверов.




topology p2p для счастливчиков, у которых отсутсвуют Windows-VPN-клиенты. 




topology subnet рекомендуем, во-первых,  для TCP-серверов, рассчитанных на подключение Микротиков. Во-вторых для UDP-серверов, клиентами которых являются unix и Windows от 8.2 и выше. Данная топология выделяет каждому клиенту один адрес.




Надеемся, что данная заметка позволила кому-то расставить недостающие точки над Ё в своих планах. И подготовила к мысли, что на одном хосте логично поднимать несколько VPN-серверов.



2019-09-23T11:47:02
VPN

Настройка VPN на Ubuntu Server (способ второй)

2019-09-21T20:51:47
VPN