Как стать автором
Поиск
Написать публикацию
Обновить

Xray, OpenWRT, Ubuntu

Уровень сложностиСредний

Содержание

  1. Введение

  2. Глава 1. Настройка сервера

  3. Глава 2. Настройка роутера

  4. Конец


Введение

В этой статье я расскажу, как настроить VPN (прокси) на роутере с помощью Xray, OpenWrt и Ubuntu.

Все ключи в статье приведены только для примера. Используйте свои уникальные значения и храните приватные ключи в безопасности.

Убедитесь, что у вас есть в запасе минимум 50 MB свободного места (желательно больше).
Рекомендую сразу настроить overlay на USB-накопитель (через extroot).


Глава первая. Настройка сервера

1. Создадим где-нибудь заметку:

Private key: 
Public key: 
Router UUID: 
iPhone UUID:

2. Устанавливем Xray:

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

3. Генерируем пару ключей, используемых в Reality (аналог TLS):

xray x25519

Записываем в заметку.

Private key: UIj6upSASQbWR3mZOmFIIWWzI3kvbDwNdak8oLqy8HQ
Public key: kogDzz9m4h0_m9KM5UTru8n5s79E-oIwUWnrOt2W8mw

4. Генерируем уникальные идентификаторы клиентов, используемые в протоколе VLESS:

xray uuid

Записываем в заметку.

iPhone UUID: 5d282517-68f5-47dd-9dec-bc2360817124
Router UUID: 7cff71b6-d5cf-47dd-ae4d-244166f5fae7

5. Настраиваем конфиг:

Путь к конфигу: /usr/local/etc/xray/config.json

У меня получилось примерно так:

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "_comment": "aSel1x's iPhone",
            "id": "5d282517-68f5-47dd-9dec-bc2360817124",
            "flow": "xtls-rprx-vision"
          },
          {
            "_comment": "aSel1x's Router",
            "id": "7cff71b6-d5cf-47dd-ae4d-244166f5fae7",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "dest": "www.microsoft.com:443",
          "xver": 0,
          "serverNames": [
            "www.microsoft.com",
            "www.google.com",
            "www.youtube.com",
            "www.apple.com"
          ],
          "privateKey": "UIj6upSASQbWR3mZOmFIIWWzI3kvbDwNdak8oLqy8HQ",
          "shortIds": [
            "5d282517",
            "7cff71b6"
          ]
        }
      },
      "udp": true
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    }
  ]
}

Что в конфиге?

  • listen, port — Слушаем все адреса на порту 443

  • protocol — Используем VLESS

  • clients — Перечисляем клиентов, добавляйте сколько нужно, используя UUID'ы из заметки, поле _comment можно удалить

  • network — Указываем тип сети — TCP

  • security — Используем Reality, чтобы не возиться с сертификатами

  • dest — Делаем вид, что обращаемся к www.microsoft.com:443

  • xver — Отключаем версионирование Reality для пущей совместимости

  • serverNames — Указываем список доменов для маскировки

  • privateKey — Приватный ключ, берем из заметки (privateKey)

  • shortIds — Указываем любые (по идее) короткие идентификаторы для клиентов (связывают Vless и Reality), я указал первые 8 символов из UUID'ов

  • udp — Включаем

  • outbounds — Направляем трафик напрямую в интернет без фильтрации

Не забудьте проверить открыт порт на сервере для Xray.

Глава вторая. Настройка роутера

Я сначала настроил клиент на iPhone в приложении Shadowrocket (платное), чтобы протестировать работу прокси. И потом оформил его возврат :). Можно посмотреть другие графические клиенты по ссылке. От себя добавлю бесплатное приложение для iOS.
Настройка там проста, перейдем к роутеру.

1. Установливаем полуобязательные пакеты:

opkg update
opkg install v2ray-geoip v2ray-geosite

Эти библиотеки облегчат настройку фильтрации адресов.

Далее заменяем dnsmasq на dnsmasq-full, во время чего интернет отваливается, поэтому скачать пакет нужно заранее:

cd /tmp/ && opkg download dnsmasq-full
opkg remove dnsmasq && opkg install dnsmasq-full --cache /tmp/
mv /etc/config/dhcp-opkg /etc/config/dhcp

2. Установка UI интерфейса и самого Xray.

Существует много разных вариантов, которые я не попробовал, потому что решил использовать этот. Про него и пойдет речь далее.
В документации проекта описано два варианта установки интерфейса, следовать будем второму, где для получения заветного пакета нужно форкнуть репозиторий, создать тег и релиз, дождаться завершения работы github action. У меня сия счастье заняло 29m 46s. Можете проделать тоже самое, можете скачать у меня, можете поискать другие форки.
И так, нашли .ipk файлики (для примера - у меня), далее:

cd /tmp
wget https://github.com/aSel1x/luci-app-xray/releases/download/v1.0/luci-app-xray_3.6.0-1_all.ipk
wget https://github.com/aSel1x/luci-app-xray/releases/download/v1.0/luci-app-xray-status_3.6.0-1_all.ipk
opkg install luci-app-xray_3.6.0-1_all.ipk
opkg install luci-app-xray-status_3.6.0-1_all.ipk

Пакет xray-core эта штуковина подтянет сама.

Чтобы UI подтянул интерфейс выполняем перезагрузку роутера. (reboot)

3. Настройка клиента с помощью графического интерфейса:

Не забываем кликать Save, проверять на всякий случай вносимые изменения в unsaved changes и собственно жмякать Save & Apply

Новенькая менюшка ждет по пути Services -> Xray.

- General settings.

Находим внизу Xray Servers, жмем Add. Настройка по данным из примера:

general_settings.add.general_settings
general_settings.add.general_settings
general_settings.add.protocol_settings
general_settings.add.protocol_settings

Выбираем добавленный сервер в TCP Server.

Страница General settings по итогу должна выглядеть похожим образом:

general_settings
general_settings

- Lan hosts.

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

lan_hosts
lan_hosts

- DNS

Прописываем те DNS сервера, к которым привыкли. У меня 77.88.8.8 — Яндекс, 1.1.1.1 — Cloudflare:

dns
dns

- FakeDNS

Здесь укажем домены, трафик которых будет принудительно направлен через прокси. Работает это в связке с geosite — готовыми списками доменов, которые можно просто выбрать, например geosite:google (обещанное удобство). Находим кнопку Add под FakeDNS Rouiting, заполняем:

fakedns.add.geosite
fakedns.add.geosite
fakedns.add.domain
fakedns.add.domain

Страница FakeDNS по итогу должна выглядеть похожим образом:

fakedns
fakedns

- Outbound

Здесь настраиваем порты, которые будут проходить через Xray:

outbound
outbound

- Extra (Только для OpenWRT >= 24.10)

Включаем preview опции:

extra
extra

Перезагружаем роутер, чтобы новое меню появилось.

Настраиваем интеграцию с dnsmasq:

preview
preview

Конец!

Все должно работать, удачи.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.