Xray, OpenWRT, Ubuntu
Содержание
Введение
В этой статье я расскажу, как настроить 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
— Слушаем все адреса на порту 443protocol
— Используем VLESSclients
— Перечисляем клиентов, добавляйте сколько нужно, используя UUID'ы из заметки, поле_comment
можно удалитьnetwork
— Указываем тип сети — TCPsecurity
— Используем Reality, чтобы не возиться с сертификатамиdest
— Делаем вид, что обращаемся к www.microsoft.com:443xver
— Отключаем версионирование 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
. Настройка по данным из примера:


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

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

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

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


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

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

- Extra (Только для OpenWRT >= 24.10)
Включаем preview опции:

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

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