Яндекс.Метрика

    Песочница

    Настройка прокси на прошивке Tomato

    Начну, пожалуй, с главного — для чего, собственно, нужен мне лично прокси-сервер. У нашего провайдера (думаю как и у всех прочих) есть внутренние ресурсы, доступ на которые возможен только с компьютера, подключенного к этому самому провайдеру. Ранее, я использовал схему: белый IP у компьютера, прокси-сервер (CCProxy) и не выключал компьютер. Идея о том, что на роутере можно поставить прокси-сервер витала давно, так как на роутерах стоит Linux, вопрос был лишь в реализации. Squid слишком тяжел для данно задачи, ведь мне нужно простое и практичное решение и вот недавно, я наткнулся на одну программу — srelay, которая осуществояет «проброс» трафика через HTTP и SOCKS прокси.
    Итак, теперь приступим к настройке роутера, в моем случае это NETGEAR WNR-3500L-RUS и прошивка Tomato (модификация прошивки не имеет значения). Данная статья рассчитана на продвинутого пользователя и считается. что человек уже умеет обращаться с командной строкой, putty и знает что делает.

    Сперва, необходимо сделать так, чтобы прокси работал всегда и не зависил ни от флешек ни от чего-либо ещё, то есть будем размещать программу в памяти роутера, для этого в разделе Администрирования включаем опцию JFFS — это небольшой раздел, в моем случае 320 кб, на программу для прокси хватит.

    Итак, идем в Administration / JFFS, включаем галочку Enable и нажмаем Format / Erase, ждем некотрое время, и нажимаем Save.
    Когда раздел JFFS отформатирован и смонтирован, то появится доступ к папке /jffs, сюда то и поместим программу srelay.

    Чтобы скачать программу (файл расположен мной на моем же сайте гугла для удобства, уже скомпиленный из optware), выполняем следующий скрипт, можно в разделе Tools / System:

    wget "http://sites.google.com/site/denserru/Home/srelay/srelay?attredirects=0&d=1" -O "/jffs/srelay"
    chmod +x /jffs/srelay


    Теперь у нас есть программа srelay в разделе jffs, который находится в памяти роутера, остается настроить порты, автозапуск программы и её параметры.
    Параметры программы можно увидеть по команде:

    root@denser-router:/tmp/home/root# /jffs/srelay -h
    srelay 0.4.6 2003/04/13 (Tomo.M)
    usage: srelay [options]
    options:
    -c file config file
    -i i/f listen interface IP[:PORT]
    -m num max child/thread
    -o min idle timeout minutes
    -p file pid file
    -a np auth methods n: no, p:pass
    -u file srelay password file
    -f run into foreground
    -r resolve client name in log
    -s force logging to syslog
    -t disable threading
    -b avoid BIND port restriction
    -v show version and exit
    -h show this help and exit


    Нам понадобится следующие из них:

    /jffs/srelay -i :9999 -t -a pP@ssW0rD

    Где 9999 — порт, который будет использоваться для подключения, используйте какой угодно, кроме стандартных. P@ssW0rD замените на пароль, который будет использоваться для авторизации(обратите внимание на букву р перед паролем), имя пользователя при доступе к прокси — root. Добавляем эту строку в поле Execute When Mounted, чтобы программа запускалась при инициализации раздела JFFS с заданными параметрами, а именно:
    • работа по протоколам HTTP, SOCKS4 и SOCKS5
    • авторизация на порту 9999 пользователь: root, пароль: P@ssW0rD.

    Приблизительно так должно выглядеть в итоге:



    Теперь, добавим правило в Firewall на открытие порта 9999, для этого переключаемся в раздел Administration / Scripts, вкладка Firewall, туда добавляем через перенос строки следующее:

    iptables -I INPUT -p tcp --dport 9999 -j ACCEPT

    Выглядеть это будет приблизительно вот так:



    Теперь перезагружаем роутер и проверяем работу программы любым доступным методом, например, браузером. Надеюсь вам пригодится эта инструкция как и мне.

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

    Используемые материалы:

    1. Исходники самой программы — socks-relay.sourceforge.net/
    2. Очерк одного из пльзователей — www.linksysinfo.org/index.php?threads/a-socks-proxy-server-for-tomato.23898/