пятница, 7 января 2022 г.

Настройка Wireguard VPN

Эта статья - продолжение `Настройка маршрутизации в сети с неподконтрольным роутером`. Итак имеем домашнюю локальную сеть, роутер от провайдера без возможности прошивки и настройки. Ставим в локальной сети сервер. Настраиваем на сервере Wireguard VPN и связываем две локальные сети. Другая локальная сеть - маршрутизатор Xiaomi Mi Router 3G с прошивкой Padavan и Entware. В принципе инструкций по настройке Wireguard - масса. Лично я долго не мог понять, да и сейчас не понимаю, зачем нужно каждому wg устройству назначать адрес из частного диапазона. Могу понять зачем это нужно для одного клиента - ему же нужен какой-то адрес. Но зачем это нужно если связывать две разных сети - непонятно. У специалистов настройка wireguard вообще не вызывает никаких проблем, но я не они. Кстати мне больше всего понравилась инструкция на сайте keenetic - по ней я все и делал.

Параметры

  • Локальная сеть - 192.168.2.0/24
  • Роутер - 192.168.2.1
  • Сервер - 192.168.2.4, ethernet интерфейс - enp1s0
  • Другая локальная сеть (за xiaomi mi router) - 192.168.3.0/24
  • wireguard device network (частный диапазон IP адресов из которого назначаются адреса wireguard интерфейсам) - 10.253.1.0/24
    • сервер wireguard address - 10.253.1.2
    • android клиент - 10.253.1.10
    • xiaomi mi router wireguard - 10.253.1.3

Dnsmasq

Чтобы все работало в локальной сети необходимо добавить два новых маршрута, которые мы анонсируем через DHCP, чтобы трафик в другую локальную сеть и wireguard device network шел через наш сервер:

Wireguard сервер

Ставим пакет wireguard.
Генерируем пару ключей (открытый + закрытый) для сервера:
```
cd /etc/wireguard
wg genkey > private-key
wg pubkey > public-key < private-key
```
Конфигурация /etc/wireguard/wg0.conf
Запускаем `systemctl start wg-quick@wg0.service`
Включаем автозапуск `systemctl enable wg-quick@wg0.service`
В ubuntu все работает - создается интерфейс wg0, создаются маршруты.
Проверить статус можно командой `wg showconf wg0`, `wg show`, маршруты командой `ip route`.
В настройках роутера пробрасываем wireguard порт до сервера.

Andoid client

Нет смысла еще раз писать то, что уже неплохо написано до нас. Публичный ключ с Android клиента добавляем в соответствующую секцию конфигурации wireguard.

Entware + Padavan

Файлы настроек:

Для работы Entware на прошивке Padavan нужна USB флешка. Как ставить entware написано в padavan wiki.
Ставим пакет wireguard-go: `opkg install wireguard-go`. Теоретически можно использовать утилиту `wg-quick` для настройки интерфейса и маршрутизатора, но у меня оно почему-то не заработало :(.
Итак настраиваем wireguard вручную как написано на официальном сайте. Создаем файл конфигурации /opt/etc/wireguard/wg0.conf и делаем

```
wireguard-go wg0
ip address add dev wg0 10.253.1.3/24
wg setconf wg0 /opt/etc/wireguard/wg0.conf
ip link set up dev wg0
ip route add 192.168.2.0/24 dev wg0 src 192.168.3.1
iptables -t filter -A INPUT -i wg0 -j ACCEPT
iptables -t filter -A FORWARD -i wg0 -j ACCEPT
```

По какой-то причине эту строчку конфигурации из секции [Interfaces] конфига `wg setconf` не принял, поэтому я ее закоментировал:
```
[Interfaces]
Address = 10.253.1.3/24
```

Примечание:
Маршрут `ip route add 10.253.1.0/24 dev wg0 src 10.253.1.3` добавился сам.
Переопределяем iptables policy по умолчанию для цепочек INPUT, FORWARD таблицы filter - у меня значения по-умолчанию были DROP, с ними маршрутизация из локальной сети 192.168.2.0/24 в 192.168.3.0/24 (в мою локальную сеть) не работала.

Настройка iptables

После некоторых обновлений конфигурации маршрутизатора (например обновление правил белых/черных списков по mac адресу - web интерфейс маршрутизатора -> Advanced settings -> Firewall -> MAC Filter) маршрутизатор с прошивкой padavan сбрасывает правила iptables. Чтобы все продолжало работать в прошивке есть файлик `/opt/etc/init.d/S10iptables` (softlinkg) -> `/opt/bin/update_iptables.sh`, который запускается после обновления конфигурации. В него заносим все правила iptables - у меня там правила для wireguard и правила, которые я настроил для прозрачного использования tor в локальной сети, который настроил по этой инструкции.

Доступ к роутеру из VPN

Поскольку на роутере таблицу маршрутизации мы настроить не можем, то не можем и получить к нему доступ из VPN напрямую. Чтобы получить web доступ к роутеру можно добавить nginx reverse proxy configuration. Например на порту 8081. Ссылку на файл колнфигурации надо добавить в директорию /etc/nginx/sites-enabled - `ln -s /etc/nginx/sites-available/local ./`.
Перезагружаем конфигурацию nginx: `systemctl reload nginx`.
Теперь роутер доступен по адресу `http://192.168.2.4:8081`.
 

Комментариев нет:

Отправить комментарий