В данном гайде будем собирать OpenWRT на базе стабильной 22.03.5 с дополнительными репозиториями Passwall и badvpn (badvpn-tun2socks). Рекомендуется роутер минимум с 128 МБ RAM (256 предпочтительно) и памятью более 16 МБ, минимальная сборка для mt7621 у меня занимает 17Мб. (Можно использовать внешнюю память, например usb флэшку, об этом в конце статьи)
luci-app-passwall2 это пакет позволяющий настроить в Luci прокси, поддерживающий протоколы v2ray, xray, vless, vmess, hysteria, naiveproxy, shadowsocks, trojan и др.
badvpn-tun2socks это пакет позволяющий направлять трафик в прокси при помощи kmod-tun и использовать традиционные настройки маршрутизации.
Руководство будет включать:
Способ самый простой, но требует много памяти, у меня при свободных 20 Мб выдал ошибку по нехватки памяти.
Далее в этом разделе процитирую источник:
в консоли ввести команду:
Далее установка luci-app-passwall и badvpn
При успешном завершении переходим в пункт 2, при неуспешном в пункт 1.2.
Моя среда сборки это виртуальная машина Debian 11 в VirtualBox, рекомендуется не менее 10 Гб свободного места на диске и не менее 4 Гб RAM
Устанавливаем необходимые для сборки пакеты:
Далее скачиваем исходный код OpenWRT версии 22.03.5
Добавляем репозитории и обновляем списки:
Далее OpenWrt проверит отсутствующие пакеты в вашей системе сборки и предложит выбрать архитектуру вашего устройства и модель, а также пакеты для сборки.
В меню необходимо выбрать ваше устройство и сохранить конфигурацию (кнопка Save).
В сборку необходимо добавить пакеты:
Это можно сделать при помощи конфигуратора либо следующей командой:
Так же для последующего использования BGP для получения маршрутов от antifilter.download, antifilter.network добавим пакеты bird2 и bird2c
после чего повторно запустить проверку:
Убедиться что устройство выбрано правильно и настройки не потеряны и сохранить конфигурацию повторно (Save).
На этом этапе сборка не включает дополнительных пакетов как OpenVPN, Wireguard, UPnP, QoS. Их добавление увеличит размер образа. Для их добавление введите команду:
После чего повторно запустите проверку и сохраните конфигурацию:
После чего запускаем сборку образа:
Команда запускает сборку на 8 потоках (ядрах) (8+1) с трассировкой каталогов (путей).
Ждём окончания сборки (около 1 часа), после чего скачиваем файлы из папки ~/openwrt/bin/targets/$платформа/$архитектура/
Для обновления существующей прошивки OpenWRT понадобится файл оканчивающийся на *-sysupgrade.bin
После чего заходим в интерфейс вашего роутера, переходим в Система - Восстановление/обновление
И загружаем собранный образ, галку сохранить настройки убрать (можно настройки сохранить, но возможно проблемы, не рекомендую).
В случае вашего роутера могут быть отличия по способу прошивки, рекомендую посетить тему по вашему устройству на сайте OpenWRT [OpenWrt Wiki] Table of Hardware дабы случайно не получить кирпич вместо роутера.
Ждём окончания обновления роутера.
Далее потребуется первичная настройка роутера, необходимо обеспечить подключение к интернету согласно настройкам вашего провайдера.
Разобравшись с интернетом, переходим к пункту 2.
Далее Node List
Здесь добавляем свою конфигурацию в виде ссылки через Add the node via the link
Passwall распознаёт ссылки почти всех форматов
Ссылки из Outline VPN так же работают (shadowsocks), его настройку разбирал тут.
При добавлении нескольких нодов можно настроить резервирование во вкладке Auto Switch
How often to test определяет периодичность проверки доступности прокси в минутах.
В List of backup nodes вносятся резервные прокси в порядке очереди перебора.
Галка Restore Switch определяет будет ли происходить обратное переключение при восстановлении доступа к главному прокси.
Переходим в Basic Settings
Здесь выбираем главный нод (прокси) и активируем подключение галкой Main Switch.
Так же активируем Localhost Proxy и при необходимости меняем Node Socks порт для входящих соединений (он понадобится для настройки tun2socks).
Проверяем соединение нажатием на кнопки: Baidu Connection, Google и Github
Далее переходим к настройке tun2socks.
Запустится туннель с логированием:
Где tun0 наименование туннеля (если у вас запущен OpenVPN или другой туннель использующий kmod-tun, измените значение на tun1, tun2 и т.д.).
Для проверки работоспособности можно временно добавить маршрут к сайту 2ip.ru (не закрывая badvpn-tun2socks, в параллельной вкладке).
Подробная документация на badvpn-tun2socks есть на сайте проекта
Обращаемся к сайту и смотрим логи:
Если всё работает, команда вернёт IP вашего прокси.
Можно закрывать badvpn-tun2socks и удалить маршрут:
Теперь настроим службу, чтобы интерфейс начинал работать при загрузке роутера.
Здесь хочу выразить огромную благодарность пользователю itdog за информацию по настройке службы tun2socks (и за обзор темы впринципе).
В файл /etc/init.d/tun2socks вносим следующее содержание, например при помощи vi:
Где IF - интерфейс, в данном примере tun2 (вместо tun0) чтобы избежать конфликтов с существующими туннелями.
Делаем файлы исполняемым:
Делаем автозапуск:
Запускаем:
Проверяем что интерфейс появился:
Если заработал, выдаст подобный результат:
Если нет, ответ будет пустым.
Далее необходимо настроить маршруты к которым роутер будет обращаться через прокси.
Здесь я дам ссылки на известные мне способы настройки таких маршрутов:
Точечный обход блокировок на роутере OpenWrt c помощью BGP / Хабр (habr.com) С помощью BGP (bird2).
Точечный обход блокировок PKH на роутере с OpenWrt с помощью WireGuard и DNSCrypt / Хабр (habr.com) (путём скачивания списков и настройкой маршрутов в iptables, nftables).
Для роутеров с малым количеством постоянной памяти (ROM) и портом USB можно воспользоваться инструкцией [OpenWrt Wiki] Корневая файловая система на внешнем устройстве (extroot) , после чего попробовать установку из пункта 1.1.
Автор @Andrevich
Источник habr.com
luci-app-passwall2 это пакет позволяющий настроить в Luci прокси, поддерживающий протоколы v2ray, xray, vless, vmess, hysteria, naiveproxy, shadowsocks, trojan и др.
badvpn-tun2socks это пакет позволяющий направлять трафик в прокси при помощи kmod-tun и использовать традиционные настройки маршрутизации.
Руководство будет включать:
- 1.1 Установку из репозитория (требует много свободной памяти) или 1.2 Сборку прошивки под ваш роутер с необходимыми пакетами
- Настройку Passwall
- Настройку tun2socks
1.1 Установка пакетов на текущую прошивку
ИсточникСпособ самый простой, но требует много памяти, у меня при свободных 20 Мб выдал ошибку по нехватки памяти.
Далее в этом разделе процитирую источник:
в консоли ввести команду:
Код:
sed -i 's/option check_signature/# option check_signature/g' /etc/opkg.conf
echo "src/gz custom_generic https://raw.githubusercontent.com/lrdrdn/my-opkg-repo/main/generic" >> /etc/opkg/customfeeds.conf
echo "src/gz custom_arch https://raw.githubusercontent.com/lrdrdn/my-opkg-repo/main/$(grep "OPENWRT_ARCH" /etc/os-release | awk -F '"' '{print $2}')" >> /etc/opkg/customfeeds.conf
Код:
opkg update
Код:
opkg install luci-app-passwall badvpn kmod-tun
1.2 Сборка прошивки
Подробно сборка описана в wiki проекта openwrt.org, я опишу только необходимые шаги для сборки.Моя среда сборки это виртуальная машина Debian 11 в VirtualBox, рекомендуется не менее 10 Гб свободного места на диске и не менее 4 Гб RAM
Устанавливаем необходимые для сборки пакеты:
Код:
sudo apt install binutils bzip2 diffutils flex libc-dev libz-dev perl python3.7 rsync subversion unzip ncurses-dev git-core build-essential libssl-dev libncurses5-dev gawk zlib1g-dev subversion mercurial
Код:
git clone https://github.com/openwrt/openwrt.git -b v22.03.5
Код:
cd openwrt
Код:
echo -e "src-git passwall https://github.com/xiaorouji/openwrt-passwall.git \nsrc-git passwall2 https://github.com/xiaorouji/openwrt-passwall2.git \nsrc-git helmiwrt https://github.com/helmiau/helmiwrt-packages.git" >> feeds.conf.default
Код:
./scripts/feeds update -a
./scripts/feeds install -a
Код:
make menuconfig
В сборку необходимо добавить пакеты:
- luci
- luci-app-passwall2
- badvpn
- kmod-tun
Это можно сделать при помощи конфигуратора либо следующей командой:
Код:
echo -e "CONFIG_PACKAGE_dnsmasq=n \nCONFIG_PACKAGE_luci=y \nCONFIG_PACKAGE_luci-app-passwall2=y \nCONFIG_PACKAGE_luci-app-passwall2_INCLUDE_Shadowsocks_Rust_Client=y \nCONFIG_PACKAGE_kmod-tun=y \nCONFIG_PACKAGE_badvpn=y" >> .config
Код:
echo -e "CONFIG_PACKAGE_bird2=y \nCONFIG_PACKAGE_bird2c=y" >> .config
Код:
make menuconfig
На этом этапе сборка не включает дополнительных пакетов как OpenVPN, Wireguard, UPnP, QoS. Их добавление увеличит размер образа. Для их добавление введите команду:
Код:
echo -e "CONFIG_PACKAGE_luci-app-openvpn=y \nCONFIG_PACKAGE_luci-app-wireguard=y \nCONFIG_PACKAGE_openvpn-openssl=y \nCONFIG_PACKAGE_luci-app-qos=y \nCONFIG_PACKAGE_luci-app-upnp=y " >> .config
Код:
make menuconfig
Код:
make -j9 V=s
Ждём окончания сборки (около 1 часа), после чего скачиваем файлы из папки ~/openwrt/bin/targets/$платформа/$архитектура/
Для обновления существующей прошивки OpenWRT понадобится файл оканчивающийся на *-sysupgrade.bin
После чего заходим в интерфейс вашего роутера, переходим в Система - Восстановление/обновление
И загружаем собранный образ, галку сохранить настройки убрать (можно настройки сохранить, но возможно проблемы, не рекомендую).
В случае вашего роутера могут быть отличия по способу прошивки, рекомендую посетить тему по вашему устройству на сайте OpenWRT [OpenWrt Wiki] Table of Hardware дабы случайно не получить кирпич вместо роутера.
Ждём окончания обновления роутера.
Далее потребуется первичная настройка роутера, необходимо обеспечить подключение к интернету согласно настройкам вашего провайдера.
Разобравшись с интернетом, переходим к пункту 2.
2. Настройка Passwall
Переходим в пункт Службы (Services) - PassWall 2 (Passwall)
Далее Node List
Здесь добавляем свою конфигурацию в виде ссылки через Add the node via the link
Passwall распознаёт ссылки почти всех форматов
Ссылки из Outline VPN так же работают (shadowsocks), его настройку разбирал тут.
При добавлении нескольких нодов можно настроить резервирование во вкладке Auto Switch
How often to test определяет периодичность проверки доступности прокси в минутах.
В List of backup nodes вносятся резервные прокси в порядке очереди перебора.
Галка Restore Switch определяет будет ли происходить обратное переключение при восстановлении доступа к главному прокси.
Переходим в Basic Settings
Здесь выбираем главный нод (прокси) и активируем подключение галкой Main Switch.
Так же активируем Localhost Proxy и при необходимости меняем Node Socks порт для входящих соединений (он понадобится для настройки tun2socks).
Проверяем соединение нажатием на кнопки: Baidu Connection, Google и Github
Далее переходим к настройке tun2socks.
3.Настройка tun2socks
Для проверки работы туннеля введём команду:
Код:
badvpn-tun2socks --tundev tun0 --netif-ipaddr 10.0.0.2 --netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:1070
Где tun0 наименование туннеля (если у вас запущен OpenVPN или другой туннель использующий kmod-tun, измените значение на tun1, tun2 и т.д.).
netif-ipaddr - адрес интерфейса (не должен совпадать с диапазоном адресов локальной сети).netif-netmask - сетевая маска /24.socks-server-addr - адрес socks указывающий на Passwall на порту 1070 (если вы меняли порт в п.2 укажите свой).Для проверки работоспособности можно временно добавить маршрут к сайту 2ip.ru (не закрывая badvpn-tun2socks, в параллельной вкладке).
Подробная документация на badvpn-tun2socks есть на сайте проекта
Код:
ip route add 195.201.201.0/24 dev tun0
Код:
wget -qO- http://ipecho.net/plain | xargs echo
Можно закрывать badvpn-tun2socks и удалить маршрут:
Код:
ip route del 195.201.201.0/24
Здесь хочу выразить огромную благодарность пользователю itdog за информацию по настройке службы tun2socks (и за обзор темы впринципе).
В файл /etc/init.d/tun2socks вносим следующее содержание, например при помощи vi:
Код:
#!/bin/sh /etc/rc.common
USE_PROCD=1
# starts after network starts
START=40
# stops before networking stops
STOP=89
PROG=/usr/bin/badvpn-tun2socks
IF="tun2"
HOST="127.0.0.1"
PORT="1070"
IPADDR="10.0.0.2"
NETMASK="255.255.255.0"
start_service() {
procd_open_instance
procd_set_param command "$PROG" --tundev "$IF" --netif-ipaddr "$IPADDR" --netif-netmask "$NETMASK" --socks-server-addr "$HOST":"$PORT"
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
procd_close_instance
}
Port - порт Socks Passwall из п.2.Делаем файлы исполняемым:
Код:
chmod +x /etc/init.d/tun2socks
Код:
ln -s /etc/init.d/tun2socks /etc/rc.d/S90tun2socks
Код:
/etc/init.d/tun2socks start
Код:
ip a | grep 'tun2'
Код:
tun2: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
Далее необходимо настроить маршруты к которым роутер будет обращаться через прокси.
Здесь я дам ссылки на известные мне способы настройки таких маршрутов:
Точечный обход блокировок на роутере OpenWrt c помощью BGP / Хабр (habr.com) С помощью BGP (bird2).
Точечный обход блокировок PKH на роутере с OpenWrt с помощью WireGuard и DNSCrypt / Хабр (habr.com) (путём скачивания списков и настройкой маршрутов в iptables, nftables).
Для роутеров с малым количеством постоянной памяти (ROM) и портом USB можно воспользоваться инструкцией [OpenWrt Wiki] Корневая файловая система на внешнем устройстве (extroot) , после чего попробовать установку из пункта 1.1.
Автор @Andrevich
Источник habr.com