воскресенье, 9 ноября 2025 г.

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

 

Здесь рассматривается, как настроить на OpenWrt клиент WireGuard.

  • Всё проделывается на OpenWrt 22.03.5. На других версиях настройка не отличается
  • Предполагается, что уже есть работающий клиентский конфиг
  • Туннель можно настроить через консоль и через LuCi

Установка пакета

opkg update && opkg install wireguard-tools

Настройка состоит из конфигурации в network (Interface + Peer), создания зоны для WG и разрешения на передачу трафика из зоны lan в зону wg.

Через SSH можно настроить двумя способами:

  • Править файлы конфигурации
  • Использовать UCI

Настройка через файл конфигурации network

Конфигурация лежит в /etc/config/network. Так же как в любом конфиге WG, в OpenWrt есть две части: Interface и Peer.

config interface 'wg0'
	option proto 'wireguard'
	option listen_port '51820'
	option private_key '$PRIVATE_KEY'
	list addresses '$WG_IP'

config wireguard_wg0
	option name 'wg0_client'
	option route_allowed_ips '0'
	option persistent_keepalive '25'
	option allowed_ips '0.0.0.0/0'
	option endpoint_host '$HOST'
	option endpoint_port '51820'
	option public_key '$PUBLIC_KEY'
	option preshared_key '$PRESHARED_KEY'
В переменные начинающиеся с $ нужно подставить ваши значения.Часть Interface

Все перечисленные здесь переменные находятся в части [Interface] клиентской конфигурации.

proto — протокол, чтобы openwrt понимало, что это конфигурация WireGuard

listen_port — порт на котором WireGuard принимает соединения. Это можно не трогать

private_key — это приватный ключ клиента

list addresses — адрес в WG сети

Часть peer (здесь называется wireguard_wg0)

Все перечисленные здесь переменные находятся в части [Peer] клиентской конфигурации.

route_allowed_ips — флаг, который создаёт маршрут через WG интерфейс для перечисленных сетей из параметра allowed_ips. Если 1 и allowed_ips=0.0.0.0/0, то весь трафик будет идти через WG. 0 - выключено.

persistent_keepalive — интервал времени, через который отправляются пакеты для поддержки соединения. Это можно не трогать

allowed_ips — подсети, в которые может ходить трафик через туннель. В большинстве случаев никаких ограничений не требуется, поэтому 0.0.0.0/0

endpoint_host — ip/url WG сервера

endpoint_port — порт WireGuard на сервере. Указан в Endpoint после :

public_key — публичный ключ сервера

preshared_key - ключ PresharedKey, нужно указывать только, если сервер поддерживает это. И он есть в конфиге

Если нужна поддержка IPv6:

В interface добавить

	list addresses '$WG_IPv6'

В wireguard_wg0

	option allowed_ips '::/0'

Эта часть добавляется в конец файла конфигурации. После этого необходимо рестартануть сеть service network restart.

После рестарта должен появиться интерфейс wg0.

root@OpenWrt:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
...
5: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN qlen 1000
    link/[65534] 
    inet 192.168.100.2/32 brd 255.255.255.255 scope global wg0
       valid_lft forever preferred_lft forever

Для того, чтобы клиенты роутера могли ходить через WG, нужно добавить правила в /etc/config/firewall

config zone
        option name 'wg'
        option masq '1'
        option output 'ACCEPT'
        option forward 'REJECT'
        option input 'REJECT'
        option mtu_fix '1'
        option network 'wg0'

config forwarding
        option src 'lan'
        option dest 'wg'

После этого нужно перезапустить firewall

service firewall restart

Настройка через UCI

В переменные начинающиеся с $ нужно подставить ваши значения.

uci set network.wg0="interface"
uci set network.wg0.proto="wireguard"
uci set network.wg0.private_key="$PRIVATE_KEY"
uci set network.wg0.listen_port="51820"
uci add_list network.wg0.addresses="$WG_IP"
 
uci set network.peer="wireguard_wg0"
uci set network.peer.public_key="$PUBLIC_KEY"
uci set network.peer.endpoint_host="$HOST"
uci set network.peer.endpoint_port="51820"
uci set network.peer.route_allowed_ips="0"
uci set network.peer.persistent_keepalive="25"
uci set network.peer.allowed_ips="0.0.0.0/0"

Применить изменения и рестартануть сеть

uci commit network
service network restart

Если в конфиге есть PRESHARED_KEY

uci set network.peer.preshared_key="$PRESHARED_KEY"

Если нужна поддержка IPv6

uci add_list network.wg0.addresses="$WG_IPv6"
uci add_list network.peer.allowed_ips="::/0"

Добавление зоны и forwarding

uci add firewall zone
uci set firewall.@zone[-1]=zone
uci set firewall.@zone[-1].name='wg'
uci set firewall.@zone[-1].masq='1'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='REJECT'
uci set firewall.@zone[-1].input='REJECT'
uci set firewall.@zone[-1].mtu_fix='1'
uci set firewall.@zone[-1].network='wg0'

uci add firewall forwarding
uci set firewall.@forwarding[-1]=forwarding
uci set firewall.@forwarding[-1].src='lan'
uci set firewall.@forwarding[-1].dest='wg'

Применить изменения и рестартануть firewall

uci commit network
service firewall restart

Проверка работы через консоль

Посмотреть статистику WG можно через команду wg show. Смотреть на latest handshake, он должен быть меньше двух минут.

И на transfer: в received и sent должны быть не нули.

peer: -
  preshared key: (hidden)
  endpoint: host:51820
  allowed ips: 0.0.0.0/0, ::/0
  latest handshake: 34 seconds ago
  transfer: 184 B received, 552 B sent
  persistent keepalive: every 25 seconds

Проверить, что туннель работает, можно простым пингом с указанием интерфейса:

ping -I wg0 google.ru

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

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