Как настроить WireGuard на OpenWRT как сервер и клиент?

Вопрос или проблема

Во-первых, я знаю, что WireGuard работает с одноранговыми узлами, но я буду использовать термины “клиент” и “сервер” для облегчения понимания.

Я пытаюсь настроить WireGuard на роутере с OpenWRT, чтобы

  • удаленно подключаться к домашней сети, используя либо мой телефон, либо ноутбук.
  • направлять трафик к трем определенным IP-адресам из моей домашней сети через удаленную сеть.

enter image description here

Я могу сделать так, чтобы оба сценария работали индивидуально, но не могу заставить их работать одновременно.

Это моя текущая настройка с обоими интерфейсами:

firewall.lan=zone
firewall.lan.name="https://superuser.com/questions/1870825/lan"
firewall.lan.input="ACCEPT"
firewall.lan.output="ACCEPT"
firewall.lan.forward='ACCEPT'
firewall.lan.network="https://superuser.com/questions/1870825/lan"
firewall.wan=zone
firewall.wan.name="wan"
firewall.wan.input="REJECT"
firewall.wan.output="ACCEPT"
firewall.wan.forward='REJECT'
firewall.wan.masq='1'
firewall.wan.mtu_fix='1'
firewall.wan.network='wan' 'wan6'

firewall.@zone[2]=zone 
firewall.@zone[2].name="RemoteVPN"
firewall.@zone[2].input="REJECT"
firewall.@zone[2].output="ACCEPT"
firewall.@zone[2].forward='REJECT'
firewall.@zone[2].masq='1'
firewall.@zone[2].mtu_fix='1'
firewall.@zone[2].network='remote_network'
firewall.@forwarding[1]=forwarding
firewall.@forwarding[1].src="https://superuser.com/questions/1870825/lan"
firewall.@forwarding[1].dest="RemoteVPN"
firewall.wg=rule
firewall.wg.name="Allow-WireGuard"
firewall.wg.src="wan"
firewall.wg.dest_port="51820"
firewall.wg.proto='udp'
firewall.wg.target="ACCEPT"

network.remote_network=interface
network.remote_network.proto='wireguard'
network.remote_network.private_key=<redacted>
network.remote_network.listen_port="51000"
network.remote_network.addresses="10.10.10.11/32"
network.remote_network.dns="192.168.128.1"

network.@wireguard_remote_network[0]=wireguard_remote_network
network.@wireguard_remote_network[0].description='Imported peer configuration'
network.@wireguard_remote_network[0].public_key=<redacted>
network.@wireguard_remote_network[0].endpoint_host="<redacted>"
network.@wireguard_remote_network[0].endpoint_port="51000"
network.@wireguard_remote_network[0].route_allowed_ips="1"
network.@wireguard_remote_network[0].persistent_keepalive="25"
network.@wireguard_remote_network[0].allowed_ips="10.10.10.10/32" '<redacted>/32' '<redacted>/128'


network.HomeNetworkVPN=interface
network.HomeNetworkVPN.proto='wireguard'
network.HomeNetworkVPN.private_key='<redacted>'
network.HomeNetworkVPN.listen_port="51820"
network.HomeNetworkVPN.addresses="192.168.9.1/24"
network.wgclient=wireguard_HomeNetworkVPN
network.wgclient.public_key=<redacted>
network.wgclient.preshared_key='<redacted>'
network.wgclient.allowed_ips="192.168.9.2/32"

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

uci add_list firewall.lan.network="${VPN_IF}"

На данный момент туннель к удаленному серверу работает. Однако, если я выполню упомянутую выше команду, оба перестанут работать.

Ответ или решение

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

Теория

WireGuard – это современный, эффективный и простой в использовании VPN-протокол, который использует современную криптографию. Основная концепция WireGuard заключается в использовании "пиров", но для простоты восприятия, обычно используем термины "сервер" и "клиент".

Когда вы настраиваете WireGuard в качестве сервера на вашем маршрутизаторе OpenWRT, вы позволите удаленным устройствам подключаться к вашей домашней сети через VPN. Другая задача заключается в настраивании маршрутизатора для туннелирования определенного трафика из домашней сети к удаленной сети через другой WireGuard-туннель, в котором маршрутизатор сам будет работать в роли клиента.

Пример

Ваша текущая конфигурация загружает два интерфейса WireGuard:

  1. HomeNetworkVPN – для принятия входящих соединений, тем самым выступая в роли сервера для удаленного доступа к домашней сети.
  2. remote_network – для установления исходящих соединений с удаленной сетью, таким образом выступая в роли клиента.

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

Применение

Для решения этой проблемы порядок настроек может понадобиться пересмотреть следующим образом:

  1. Настройка Firewall:

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

    # Для входящих подключений к вашему домашнему VPN
    uci set firewall.homevpn=zone
    uci set firewall.homevpn.name='homevpn'
    uci set firewall.homevpn.input='ACCEPT'
    uci set firewall.homevpn.output='ACCEPT'
    uci set firewall.homevpn.forward='REJECT'
    uci set firewall.homevpn.network='HomeNetworkVPN'
    
    uci add firewall rule
    uci set firewall.@rule[-1]=rule
    uci set firewall.@rule[-1].name='Allow-WireGuard-Inbound'
    uci set firewall.@rule[-1].src='wan'
    uci set firewall.@rule[-1].dest_port='51820'
    uci set firewall.@rule[-1].proto='udp'
    uci set firewall.@rule[-1].target='ACCEPT'
    
    # Для исходящего трафика через удаленный VPN
    uci set firewall.remotewvpn=zone
    uci set firewall.remotewvpn.name='remotewvpn'
    uci set firewall.remotewvpn.input='REJECT'
    uci set firewall.remotewvpn.output='ACCEPT'
    uci set firewall.remotewvpn.forward='REJECT'
    uci set firewall.remotewvpn.network='remote_network'
    
    uci add firewall forwarding
    uci set firewall.@forwarding[-1].src='lan'
    uci set firewall.@forwarding[-1].dest='remotewvpn'
    
    uci commit firewall
    service firewall restart
  2. Настройка интерфейсов WireGuard:

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

    uci set network.HomeNetworkVPN=interface
    uci set network.HomeNetworkVPN.proto='wireguard'
    uci set network.HomeNetworkVPN.private_key='<private_key>'
    uci set network.HomeNetworkVPN.listen_port='51820'
    uci set network.HomeNetworkVPN.addresses='192.168.9.1/24'
    
    uci set network.remote_network=interface
    uci set network.remote_network.proto='wireguard'
    uci set network.remote_network.private_key='<private_key>'
    uci set network.remote_network.listen_port='51000'
    uci set network.remote_network.addresses='10.10.10.11/32'
    
    # Настройка пиров для remote_network
    uci set network.@wireguard_remote_network[0]=interface
    uci set network.@wireguard_remote_network[0].public_key='<peer_public_key>'
    uci set network.@wireguard_remote_network[0].endpoint_host='<endpoint_host>'
    uci set network.@wireguard_remote_network[0].endpoint_port='51000'
    uci set network.@wireguard_remote_network[0].allowed_ips='10.10.10.10/32'
    uci set network.@wireguard_remote_network[0].route_allowed_ips='1'
    uci set network.@wireguard_remote_network[0].persistent_keepalive='25'
    
    # Настройка пиров для HomeNetworkVPN
    uci set network.wgclient=wireguard_HomeNetworkVPN
    uci set network.wgclient.public_key='<client_public_key>'
    uci set network.wgclient.preshared_key='<preshared_key>'
    uci set network.wgclient.allowed_ips='192.168.9.2/32'
    
    uci commit network
    service network restart
  3. Маршрутизация и дополнительные настройки:

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

  4. Проверка работы:

    После настройки перезагрузите маршрутизатор и выполните команду logread, чтобы убедиться, что служба WireGuard работает корректно. Используйте wg show для проверки состояния туннелей и активности пиров.

  5. Диагностика возможных проблем:

    • Если туннели все еще не работают одновременно, попробуйте отключить "маскарадинг" для зоны RemoteVPN, если это не требуется.
    • Убедитесь, что каждая конфигурация используется на различной подсети, чтобы избежать конфликтов между IP-адресами.

Эти шаги должны позволить добиться работоспособности обеих настроек туннелей WireGuard на OpenWRT с правильной маршрутизацией и подходящими параметрами.

Оцените материал
Добавить комментарий

Капча загружается...