Outline VPN config: настройка клиента на роутере OpenWRT

Подробное руководство по настройке Outline VPN на роутерах OpenWRT: установка пакетов, импорт ключа, конфигурация shadowsocks-libev, решение проблем с firewall4, использование tun2socks и списков исключений.

Что такое Outline VPN и как он работает

Outline VPN — это проект компании Jigsaw, дочерней структуры Google, созданный для обеспечения свободного доступа к интернету. В основе Outline лежит протокол Shadowsocks, который изначально разрабатывался как лёгкий и обфусцированный прокси-протокол. Трафик между клиентом и сервером шифруется с помощью шифра IETF ChaCha20 и аутентифицируется с помощью IETF Poly1305. Такая связка обеспечивает высокую производительность и устойчивость к глубокому анализу трафика.

Главное преимущество Outline — простота развёртывания. Сервер можно поднять на собственном VDS или арендованном сервере за несколько минут, используя официальный скрипт установки. Клиентские приложения доступны для Windows, macOS, Linux, Android и iOS. Однако для роутеров на OpenWRT официального клиента нет, поэтому приходится использовать пакеты Shadowsocks-libev, которые полностью совместимы с Outline.

Ключ доступа Outline выглядит как строка формата ss://[зашифрованный пароль]@IP:Port/?outline=1. В этой строке закодированы адрес сервера, порт и пароль. Пароль зашифрован в Base64, и его можно расшифровать онлайн-декодером. Метод шифрования по умолчанию — chacha20-ietf-poly1305. Понимание структуры ключа необходимо для ручной настройки на роутере, особенно если вы используете старые версии OpenWRT, где нет функции автоматического импорта.

Подготовка роутера и установка пакетов

Перед началом настройки убедитесь, что роутер работает под управлением OpenWRT и имеет доступ к интернету. Для установки пакетов потребуется SSH-доступ и веб-интерфейс LuCI. Минимальные требования к оборудованию: не менее 64 МБ оперативной памяти и 8 МБ постоянной памяти. Если объём ПЗУ меньше, возможно, придётся использовать внешнее хранилище или более лёгкие пакеты.

Обновите список пакетов и установите необходимые компоненты:

opkg update
opkg install shadowsocks-libev-ss-local shadowsocks-libev-ss-redir shadowsocks-libev-ss-rules shadowsocks-libev-ss-tunnel
opkg install luci-app-shadowsocks-libev

Пакет ss-local поднимает SOCKS5-прокси на заданном порту, ss-redir перенаправляет трафик согласно правилам, ss-rules управляет маршрутизацией, а ss-tunnel позволяет организовать туннель до конкретного узла, например DNS-сервера. Пакет luci-app-shadowsocks-libev добавляет графический интерфейс для управления всеми этими компонентами.

После установки проверьте, что все пакеты корректно установлены, командой opkg list-installed | grep shadowsocks. Если какой-то пакет отсутствует, повторите установку. Также убедитесь, что в прошивке включена поддержка TUN-интерфейсов, если планируете использовать tun2socks.

Получение ключа доступа Outline

Ключ доступа можно получить в Outline Manager — приложении для управления сервером. Запустите Outline Manager, добавьте новый ключ или используйте существующий. Скопируйте строку ключа, которая выглядит примерно так: ss://YWVzLTI1Ni1nY206cGFzc3dvcmQ@192.168.1.1:8080/?outline=1.

В этой строке:

  • YWVzLTI1Ni1nY206cGFzc3dvcmQ — зашифрованный пароль в Base64.
  • 192.168.1.1 — IP-адрес сервера.
  • 8080 — порт подключения.
  • ?outline=1 — метка, указывающая, что это ключ Outline.

Для ручной настройки на роутере вам понадобится расшифровать пароль. Используйте любой онлайн-декодер Base64, например Base64 Decode and Encode. Вставьте зашифрованную часть в декодер и получите пароль в открытом виде. Метод шифрования указан в ключе или в Outline Manager — обычно это chacha20-ietf-poly1305.

Если вы используете OpenWRT версии 21.02 и выше, в разделе Remote Servers есть опция «Ссылка на импорт», куда можно вставить ключ целиком, и все параметры будут заполнены автоматически. Это самый простой и надёжный способ, так как исключает ошибки при ручном вводе.

Настройка shadowsocks-libev через LuCI

После установки пакетов и получения ключа переходим к настройке. Откройте веб-интерфейс LuCI, перейдите в раздел «Службы» → «Shadowsocks-libev». На вкладке «Remote Servers» (Удаленные серверы) добавьте новый сервер. Если у вас OpenWRT 21.02 и выше, просто вставьте ключ в поле «Ссылка на импорт» и нажмите «Импорт». В более старых версиях придётся заполнить поля вручную: IP-адрес сервера, порт, метод шифрования и пароль (расшифрованный). Уберите галочку «Отключить» и сохраните изменения.

Далее переходим на вкладку «Local Instances» (Локальные экземпляры). Здесь перечислены шаблоны: ss_redir, ss_local, ss_server, ss_tunnel. Для перенаправления трафика нужен ss_redir. Откройте шаблон ss_redir.hj (или создайте новый), проверьте, что в поле «Remote Server» выбран ваш сервер Outline, и снимите галочку «Отключить».

На вкладке «Redir Rules» (Правила Redir) выберите, какой трафик будет идти через прокси. Если нужен весь трафик, оставьте ss-redir for TCP и ss-redir for UDP с вашим шаблоном. Если нужно проксировать только TCP (например, для веб-сёрфинга), а UDP оставить напрямую, выберите только TCP. По умолчанию политика forward означает, что весь трафик идёт через прокси. Убедитесь, что нет галочки «Отключить».

На вкладке «Source Settings» (Настройки источника) можно настроить исключения для локальных IP-адресов. Например, Src ip/net bypass позволяет указанным устройствам ходить в интернет напрямую, минуя прокси. Это полезно, если вы хотите, чтобы только определённые устройства использовали VPN. Политика Src default определяет поведение для всех остальных адресов: forward — через прокси, bypass — напрямую, checkdst — сверяться со списком назначений.

На вкладке «Destination Settings» (Настройки назначения) настраиваются правила для адресов назначения. Dst ip/net bypass — список адресов, которые будут доступны напрямую (например, IP российского сегмента). Dst ip/net forward — список адресов, которые будут идти через прокси. Также можно указать файлы со списками. Для полного проксирования установите Dst default в forward.

Пример конфигурации для полного проксирования

Если вы хотите, чтобы весь трафик с роутера шёл через Outline VPN, настройте Dst default на forward. После применения изменений проверьте работу, выполнив команду:

wget -qO- http://ipecho.net/plain | xargs echo

Эта команда выведет ваш внешний IP-адрес. Если он совпадает с IP-адресом сервера Outline, значит, всё работает.

Пример конфигурационного файла /etc/config/shadowsocks-libev для полного проксирования:

config server 'sss0'
    option server 'ВАШ_IP'
    option server_port 'ВАШ_ПОРТ'
    option method 'chacha20-ietf-poly1305'
    option password 'ВАШ_ПАРОЛЬ'

config ss_redir 'hj'
    option server 'sss0'
    option local_address '0.0.0.0'
    option local_port '1100'
    option mode 'tcp_and_udp'
    option timeout '60'
    option fast_open '1'
    option reuse_port '1'

config ss_rules 'ss_rules'
    option src_default 'checkdst'
    option dst_forward_recentrst '0'
    option redir_tcp 'hj'
    option redir_udp 'hj'
    option local_default 'forward'
    option dst_default 'forward'

Обратите внимание, что в этом примере src_default установлен в checkdst, что означает, что трафик от локальных устройств будет направляться через прокси только для адресов из списка назначения. Если вы хотите, чтобы весь трафик шёл через прокси, установите src_default в forward.

Использование списков исключений для выборочного проксирования

Часто возникает необходимость проксировать только заблокированные ресурсы, оставляя остальной трафик напрямую. Для этого можно использовать списки IP-адресов, например, от antifilter.download. Скачайте файл ipsum.lst, содержащий список заблокированных подсетей:

wget https://antifilter.download/list/ipsum.lst -O /etc/shadowsocks-libev/ipsum.lst

Затем в настройках Shadowsocks-libev измените политику Dst default на bypass, а в поле Dst ip/net forward file укажите путь к файлу /etc/shadowsocks-libev/ipsum.lst. В новых версиях OpenWRT вместо указания пути можно загрузить файл через веб-интерфейс.

Такой подход позволяет экономить трафик и снижать задержки для сайтов, которые не заблокированы. Однако учтите, что списки могут содержать IP-адреса, которые не являются заблокированными, поэтому возможны ложные срабатывания. Регулярно обновляйте списки, чтобы они оставались актуальными.

Также можно настроить исключения для конкретных устройств в локальной сети. Например, если вы хотите, чтобы только ваш компьютер использовал VPN, а остальные устройства ходили напрямую, установите Src default в bypass, а в Src ip/net forward добавьте IP-адрес вашего компьютера.

Исправление ошибок на OpenWRT 22.03 и выше

Начиная с OpenWRT 22.03, используется firewall4 на основе nftables, что может вызывать конфликты с Shadowsocks-libev. Типичная ошибка: daemon.err /usr/bin/ss-redir[7401]: accept: No file descriptors available. Это приводит к утечке памяти и зависанию роутера.

Для исправления необходимо заполнить поля Extra tcp expression и Extra udp expression в разделе «Redir Rules» → «Основные настройки». В поле Extra tcp expression укажите диапазон TCP-портов, которые будут направляться через прокси. Важно исключить порт вашего Outline-сервера, иначе возникнет ошибка. Например, если порт сервера 17215, укажите:

tcp dport { 80-17214, 17216-65535 }

Если вы хотите проксировать только веб-трафик, можно указать tcp dport { 80, 443 }. В поле Extra udp expression укажите диапазон UDP-портов, например udp dport { 53-65535 }. Порт сервера исключать не нужно, так как Shadowsocks работает через TCP.

После заполнения сохраните и примените изменения. Это должно устранить проблему. Если ошибка сохраняется, проверьте, что порт сервера правильно исключён из диапазона TCP.

Настройка tun2socks для более простой маршрутизации

Альтернативный способ настройки — использование tun2socks, который создаёт виртуальный TUN-интерфейс и направляет весь трафик через SOCKS5-прокси. Это упрощает маршрутизацию, делая её похожей на OpenVPN или WireGuard. Для этого потребуется около 9 МБ свободной памяти на роутере.

Сначала определите архитектуру вашего устройства и скачайте подходящий бинарник tun2socks:

ARCH=$(grep "OPENWRT_ARCH" /etc/os-release | awk -F '"' '{print $2}')
wget https://github.com/1andrevich/outline-install-wrt/releases/download/v2.5.1/tun2socks-linux-$ARCH -O /tmp/tun2socks

Проверьте, что файл работает:

chmod +x /tmp/tun2socks
/tmp/tun2socks --help

Если выводится справка, всё в порядке. Затем в LuCI перейдите в «Local Instances» и добавьте новый ss-local экземпляр, указав порт, например 1080. Сохраните и примените изменения. Отключите ss-redir, чтобы избежать конфликтов.

Далее настройте сетевой интерфейс. В файле /etc/config/network добавьте:

config interface 'tunnel'
    option device 'tun2'
    option proto 'static'
    option ipaddr '172.16.10.1'
    option netmask '255.255.255.252'

Затем создайте зону и правило в /etc/config/firewall:

config zone
    option name 'proxy'
    option forward 'REJECT'
    option output 'ACCEPT'
    option input 'REJECT'
    option masq '1'
    option mtu_fix '1'
    option device 'tun2'
    option family 'ipv4'

config forwarding
    option name 'lan-proxy'
    option dest 'proxy'
    option src 'lan'
    option family 'ipv4'

Перезагрузите сеть командой /etc/init.d/network restart. После этого весь трафик с LAN будет идти через tun2socks, который перенаправляет его в SOCKS5-прокси ss-local, а тот — на сервер Outline.

Проверка работы и диагностика

После настройки важно убедиться, что VPN работает корректно. Основные проверки:

  1. Проверка внешнего IP: выполните wget -qO- http://ipecho.net/plain | xargs echo. Если выводится IP сервера Outline, значит, трафик идёт через VPN.
  2. Проверка DNS: убедитесь, что DNS-запросы не утекают. Можно использовать nslookup google.com и сравнить ответы с ожидаемыми.
  3. Проверка стабильности: понаблюдайте за роутером в течение нескольких часов. Если он зависает или перезагружается, проверьте логи на наличие ошибок ss-redir.
  4. Проверка скорости: используйте сервисы для измерения скорости, чтобы убедиться, что производительность приемлема.

Если что-то не работает, проверьте:

  • Правильность введённых данных (IP, порт, пароль).
  • Наличие галочек «Отключить» в настройках.
  • Правильность заполнения Extra tcp expression и Extra udp expression на OpenWRT 22.03+.
  • Наличие конфликтов с другими прокси-сервисами.

Также можно просмотреть логи Shadowsocks-libev в LuCI или через SSH, чтобы выявить ошибки.

Ограничения и рекомендации

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

Рекомендации:

  • Регулярно обновляйте прошивку OpenWRT и пакеты.
  • Используйте надёжный пароль и не передавайте ключи доступа третьим лицам.
  • Настройте резервное копирование конфигурации.
  • Если роутер не справляется с нагрузкой, рассмотрите возможность использования отдельного устройства в качестве VPN-шлюза.
  • Для повышения безопасности включите файрвол и ограничьте доступ к SSH.

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

Вопросы и ответы

Что делать, если ss-redir выдаёт ошибку 'No file descriptors available'?

Эта ошибка возникает на OpenWRT 22.03 и выше из-за конфликта с firewall4. Исправление: в разделе «Redir Rules» → «Основные настройки» заполните поля Extra tcp expression и Extra udp expression. В TCP-выражении укажите диапазон портов, исключив порт вашего Outline-сервера, например tcp dport { 80-17214, 17216-65535 }. Для UDP укажите udp dport { 53-65535 }. После сохранения и применения изменений ошибка должна исчезнуть.

Можно ли использовать Outline VPN на роутере с OpenWRT без официального клиента?

Да, можно. Outline VPN основан на протоколе Shadowsocks, поэтому для настройки на OpenWRT используются пакеты shadowsocks-libev. Официального клиента для OpenWRT нет, но пакеты полностью совместимы. Установите shadowsocks-libev-ss-local, ss-redir, ss-rules, ss-tunnel и luci-app-shadowsocks-libev, затем настройте их через LuCI или вручную.

Как импортировать ключ Outline в OpenWRT автоматически?

В OpenWRT версии 21.02 и выше в разделе «Службы» → «Shadowsocks-libev» → «Remote Servers» есть опция «Ссылка на импорт». Вставьте туда ключ доступа Outline (строку вида ss://...?outline=1) и нажмите «Импорт». Все параметры (IP, порт, метод шифрования, пароль) будут заполнены автоматически.

Как настроить Outline VPN только для определённых сайтов?

Используйте списки исключений. Скачайте список заблокированных IP-адресов, например ipsum.lst с antifilter.download, и укажите его в поле Dst ip/net forward file в настройках Shadowsocks-libev. При этом установите Dst default в bypass, чтобы остальной трафик шёл напрямую. Также можно настроить исключения для конкретных устройств через Src ip/net forward.

Какие минимальные требования к роутеру для работы Outline VPN?

Для работы с пакетами shadowsocks-libev достаточно 64 МБ оперативной памяти и 8 МБ постоянной памяти. Однако для комфортной работы и использования tun2socks рекомендуется больше ресурсов — около 9 МБ свободной памяти для tun2socks. На слабых роутерах скорость может быть ограничена.

Чем отличается настройка через ss-redir от tun2socks?

ss-redir перенаправляет трафик на уровне пакетов, используя правила iptables/nftables, и требует тонкой настройки правил. tun2socks создаёт виртуальный TUN-интерфейс, через который проходит весь трафик, что упрощает маршрутизацию и делает её похожей на OpenVPN. tun2socks требует больше памяти и ресурсов, но проще в настройке.

Как проверить, что Outline VPN работает на роутере?

Выполните команду wget -qO- http://ipecho.net/plain | xargs echo. Если выводится IP-адрес вашего Outline-сервера, значит, трафик идёт через VPN. Также можно проверить DNS-запросы и скорость соединения. Если возникают проблемы, просмотрите логи Shadowsocks-libev в LuCI или через SSH.