Настраиваем WireGuard сервер

WARP

Самый простой способ это воспользоваться готовым конфигом для сервиса WARP (aka 1.1.1.1) от Cloudflare. Конфиг можно взять тут.

Свой сервер

Для запуска своего сервера, например на Debian, нам понадобятся пакеты: wireguard и wireguard-tools. Теперь надо сгенерировать приватный и публчиные ключи

$ sudo -i
cd /etc/wireguard/
umask 077; wg genkey | tee privatekey | wg pubkey > publickey

После того как ключи сгенерированы можно переходит к файлу настроек сервера

$ sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 172.0.0.1/24  # адрес сервера внутри VPN
ListenPort = 51820     # порт который "слушает" сервер 
PrivateKey =           # содержимое файла /etc/wireguard/privatekey
# Правила iptables отвечающие за роутинг из wg0 во внешний интернет (интерфейс с внешним IP, в данном случае eth0, найти свой можно командой ip addr)
# Добавляем правила после запуска сервера
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Удяляем правила после остановки 
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE 

Включаем скрипт автозапуска сервера и стартуем

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

Если все прошло успешно, то команда ip link покажет интерфейс wg0

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420

Кроме настроек WireGuard на сервере надо разрешить транзит трафика. Для этого выполним следующие команды

$ sudo sysctl -w net.ipv4.ip_forward=1
$ sudo sysctl -w net.ipv6.conf.all.forwarding=1
$ sysctl -p /etc/sysctl.conf

Настройки клиента

Добавление ключей на сервер

Для WARP просто копируем из секции Interface значения PublicKey и PrivateKey.
Для собственного сервера надо сгенерировать ключи для клиента

$ sudo -i
mkdir /etc/wireguard/router-client/ && cd /etc/wireguard/router-client/
umask 077; wg genkey | tee privatekey | wg pubkey > publickey

Теперь добавляем публичный ключ клиента и его IP внутри VPN в настройки сервера

$ sudo nano /etc/wireguard/wg0.conf
...
# travel router
[Peer]
PublicKey =               # данные из файла /etc/wireguard/router-client/pubkey/ или WARP PublickKey 
AllowedIPs = 172.0.0.2/32 # IP из подсети сервера

После этого надо перезагрузить Wireguard-сервер и можно приступать к настройкам на роутере

$ sudo systemctl restart wg-quick@wg0

Настройка Wireguard на Mikrotik

Все настройки будут на примере Mikrotik hAP ac^2, с прошивкой v7.1.1 (stable).

Заходим в меню WebFig -> WireGuard -> Вкладка WireGuard -> Add new.
Указываем name: wireguard1.
ListenPort сгенерируется автоматически.
PrivateKey берем из

  • Конфиг WARP: секция Interface -> копируем PrivateKey
  • Свой сервер: данные из файла /etc/wireguard/router-client/privatekey

Проверяем, что cгенерировался Public Key и соответствует тому, что добавляли в конфиг сервера выше.

mikrotik wg 1

Переходим во вкладку Peers и добавляем настройки для сервера к которому подключаемся

  • Interface: wireguard1
  • PublicKey:
    • Для WARP берем PublicKey из раздела Peer конфига
    • Для собственного сервера из файла /etc/wireguard/pubkey
  • Endpoint:
    • Для WARP копируем Endpoint (там где IP, без порта) из раздела Peer конфига
    • Для собственного сервера указываем IP VPSки
  • Ednpoint port:
    • Для WARP копируем порт из Endpoint из раздела Peer конфига
    • Для собственного сервера копируем порт из настроек сервера (51820)
  • Allowed Address: 0.0.0.0/0 - чтобы разрешить трафик на любой адрес, в том числе за пределами VPN
  • Persistent Keepalive: 00:05:00

В меню IP/Addresses добавляем клиентский адрес wireguard

  • Comment: Wireguard net
  • Address: 172.0.0.2/32
  • Network: 172.0.0.0
  • Interface: wireguard1

После этих настроек должно установиться подключение с сервером WireGuard. Чтобы убедиться в этом, достаточно на самом сервере выполнить команду wg show

Получение маршрутов через BGP

Так как нам не надо маршрутизировать вообще весь трафик через WireGuard, а только некоторые подсети, удобнее всего этот список получить от сервиса antifilter.download через BGP. О том, что такое BGP и как он работает, можно почитать на Хабре. Быстрее всего добавить настройки BGP через консоль (Terminal) микротика.

/routing/bgp/connection/add as=64512 disabled=no hold-time=4m input.filter=bgp_in local.address=172.0.0.2 .role=ibgp name=antifilter_bgp remote.address=45.154.73.71/32 keepalive-time=5m routing-table=main router-id=<внешний ip-адрес роутера> 

И добавим правило для роутинга через полученные маршруты

/routing/filter/rule/add chain=bgp_in disabled=no rule="set gw %wireguard1; accept"

После этого трафик в заблокированые сети должен пойти через WireGuard

Настраиваем DoH

Несмотря на настройки роутинга некоторые сервисы все еще могут быть недоступны по доменному имени. Чтобы это исправить надо переключиться на DNS over HTTPS, это защищенная версия запросов DNS через шифрованное соединение.
Для начала отключим получение DNS от провайдера. В консоли микротика выполним

/ip/dhcp-client/set use-peer-dns=no

Так же, для проверки подлинности DoH-сервера нам нужны корневые сертификаты. Скачиваем их

/tool fetch url=https://curl.se/ca/cacert.pem

и импортируем

/certificate import file-name=cacert.pem

Возвращаемся в WebFig и там переходим в IP -> DNS.

  • servers прописываем 1.1.1.1 и 8.8.8.8;
  • use doh server: https://1.1.1.1/dns-query ;
  • verify DoH certificate: true ;
  • allow remote request: true ;

mikrotik doh

Сохраняем/применяем настройки и теперь все ранее недоступные ресурсы должны открываться :)

Подпишись на мой канал в Телеграм!