Настройка сервера Wireguard в OpenWRT без веб-интерфейса LuCI

Дмитрий Филатов
В предыдущей статье я подробно описывал процесс настройки Wireguard-сервера на OpenWRT. Но в том рецепте использовался веб-интерфейс LuCI, который я не очень-то и люблю. Недавно я собрал себе новую прошивку для роутера, полностью исключив из неё веб-интерфейс. Настало время переделать рецепт под чёрную-чёрную консоль.

Сделаем всё то же самое, что и в прошлый раз, но только будем непосредственно править файлы конфигурации соответствующих служб. Даже UCI использовать не будем - для наглядности, чтобы было видно, что и в каком файле меняется. Напомню, как пользоваться редактором vim, если кто забыл. Открываем нужный файл:

vi /path/to/file

Нажимает клавишу <i>, чтобы перейти в режим редактирования. Редактируем. Нажимаем клавишу <Esc>, чтобы перейти в режим команд. В режиме команд вводим последовательно двоеточие и команду: <:w> - чтобы сохранить изменения, <:q> - чтобы выйти из редактора. Ну, разумеется, после ввода команды надо нажать клавишу <Enter>.

Итак, будем использовать вводные (IP-адреса, порты) из прошлой статьи. Можете открыть её и сравнивать. Суть заключается в следующем. Сначала нужно сгенерировать ключевую пару для сервера, потом настроить сервер (в файле /etc/config/network добавить интерфейс, в файле /etc/config/firewall настроить все правила), затем на каждом устройстве, входящем в сеть, тоже сгенерировать ключевые пары, вернуться в файл /etc/config/network и добавить пиры, используя публичные ключи этих устройств.

Внимание! Все описанные ниже команды запускаются непосредственно на роутере. Поэтому, для начала подключитесь к роутеру по SSH. А затем первым делом сгенерируем ключевую пару для сервера:

umask 077 && wg genkey > privkey
cat privkey | wg pubkey > pubkey
cat privkey

В файле...

/etc/config/network

...добавим интерфейс (название интерфейса произвольное, я выбрал 'wg0'):

config interface 'wg0'
option proto 'wireguard'
option private_key '<Секретный ключ сервера - мы получили его выше командой cat privkey>'
option listen_port '51820'
list addresses '10.14.0.1/29'

...добавим пиры (да, название секции конфигурации у всех пиров одинаковое - слово 'wireguard_' + название интерфейса, в нашем случае 'wg0'):

config wireguard_wg0
option description 'Android' # Описание пира, например, Client-1, Ubuntu или другие понятные вам ключевые слова
option public_key '<Публичный ключ Клиента-1>'
list allowed_ips '10.14.0.2/32' # см. предыдущую статью, там для Android-клиента мы выбрали такой внутренний IP-адрес
option route_allowed_ips '1'
option persistent_keepalive '25'

config wireguard_wg0
option description 'Windows'
option public_key '<Публичный ключ Клиента-2>'
list allowed_ips '10.14.0.3/32'
option route_allowed_ips '1'
option persistent_keepalive '25'

В файле...

/etc/config/firewall

...отредактируем зону:

config zone
option name lan
list network 'lan'
list network 'wg0' # Прикрепить интерфейс к зоне lan
option input ACCEPT
option output ACCEPT
option forward ACCEPT

...добавим правило:

config rule
option name 'Allow-Wireguard'
option target 'ACCEPT'
option src 'wan'
option proto 'udp'
option dest_port '51820'
option family 'ipv4'

И перезапустим сервисы:

/etc/init.d/network restart
/etc/init.d/firewall restart

Как видите, настраивать через консоль даже проще - сразу понятно, откуда что берётся.
2021-03-25