06 июля 2014

VPN клиент на роутере с USB-модем

Приветствую, дорогой читатель! Сегодня мы затронем одну очень интересную тему. Думаю ни для кого не секрет, что при выходе в Интернет через 3G-модем, вам назначается "серый" ip-адрес и вы находитесь за NAT. Поэтому, если вам вдруг понадобилось развернуть какой то мобильный сервер, то доступ к нему будет закрыт. Получение "белых" адресов у всех операторов-провайдеров услуга платная.

Выходом из этой ситуации будет туннелирование трафика до "белого" сервера. И уже через него получать доступ к вашему мобильному серверу. Первое, что сразу приходит в голову - это VPN-сеть. Есть несколько вариантов реализации, но все зависит от ваших потребностей, возможностей и убеждений. Мы будем реализовывать самый простой PPTP.  Если этот вариант по каким то причинам вам не подходит, смотрите в сторону OpenVPN и обратного ssh-туннеля.

Так же по теме как организовать VPN-сервер на базе FreeBSD у меня есть отдельная статья.

Я решал задачу, как получить доступ к ip-камере за роутером с USB-модемом. Хочу сразу уточнить, что я возился с D-link dir-620 версии C1, поскольку все дальнейшие настройки крайне специфичны и целиком зависят от модели вашего роутера и используемого на нем программного обеспечения.
Существует несколько модификаций этого роутера A,C,D,G,F. Их основные отличия в процессорах и объеме памяти. С1 оказался наиболее удачной моделью, здесь мощный процессор Broadcom BCM5357 с частотой 530MHz и в два раза больше ОЗУ - 64 МБ. Описания есть на wikidevi.
Что бы узнать какая у вас, посмотрите на наклейку с обратной стороны.

Сначала все эксперименты я проводил на родной прошивке. Только обновил ее до последней стабильной версии 1.0.8. Брал ее с ftp-сервера производителя и устанавливал через web-интерфес роутера.

Настройки VPN-подключения на родной прошивке D-link
Чтобы организовать VPN соединение по протоколу pptp через 3G нужно создать два подключения: первое 3G, как основа для выхода в Internet и второе "PPTP+Статический IP".  Здесь подразумевается, что вы подключаетесь к VPN через провод и имеете статический адрес. Но в нашем случае это не имеет никакого значения, поэтому мы зададим его произвольным.

Для этого заходим в web-интерфейс роутера по адресу 192.168.0.1 через браузер (логин и пароль по умолчанию admin) и  переходим в режим Расширенные настройки>Сеть>WAN. Удаляем там все лишнее и добавляем новые подключения.  Первым добавим 3G-соединение, лучше конкретно задать режим 3G, а не авто, настройки PPP в зависимости от вашего оператора.

Далее подключение "PPTP+Статический IP", обратите внимание, что Интерфейс задан как Internet, а не static.  Далее придумайте имя. 

В секции IP назначте произольный адрес 1.1.1.1, маску 255.255.255.255, шлюз 1.1.1.1, DNS 8.8.8.8. Включите NAT, сетевой экран и пинг. 

В секции VPN  поставить галочку соединяться автоматически, ввести логин, пароль, адрес vpn-сервера, шифрование выбрать MPPE 40/128 бит, поставить галочку ping, а все остальное оставить по умолчанию. Не забудьте сохранить.

Теперь после перезагрузки и получения адреса в 3G сети роутер автоматически подключится к VPN-серверу. А в случае обрыва связи так же будет делать это сам. Откройте Статус>Сетевая статистика и проверьте, что вы получили ip-адрес vpn-сети.

Подключились, это хорошо! Но поскольку в качестве шлюза у нас по умолчанию используется 3G-модем, то наше vpn-соединение ни как не участвует в сетевом процессе. Что бы его задействовать нужно настроить маршрутизацию.

Добавим такое правило: пусть все запросы из vpn-сети направляются через подключение PPTP. Для этого идем на вкладку Дополнительно>Маршрутизация, нажимаем Добаваить. Сеть назначения указываем такую, какую определяет vpn-сервер, в нашем случае это 192.168.10.0 (ее вы уже видели раньше в Сетевой статистике). Маска подсети подбирается автоматически, метрику ставим 1, а интерфейс - это имя вашего VPN-подключения. 

Метрика определяет порядок применения правил маршрутизации сверху вниз, поэтому, что бы правило срабатывало первым в списке его нужно расположить вверху, присвоив метрику с наименьшим номером.  Откройте Статус>Таблица маршрутизации и посмотрите в каком порядке располагаются правила. 

Последнее правило означает, что если для пакетов не сработало ни одно из предыдущих правил, они отправляются через соединение 3G-модема. Оно добавляется автоматически, когда ставите галочку использовать 3G-модем в качестве шлюза по умолчанию на квладке Расширенные настройки>Сеть>WAN. Наше правило с метрикой 1 располагается выше, таким образом оно сработает раньше и все общение с vpn-сетью будет происходить через PPTP интерфейс.

Теперь можно пропинговать любой компьютер из vpn-сети и получить доступ к ресурсам локальной сети, как в прямом, так и в обратном направлении.

Вышеописанная последовательность действий - это единственная возможность настроить VPN-соединение через 3g модем на родных прошивках D-link.
Но к сожалению такая настройка не позволяет полностью спрятать вас в VPN-сети и не даст выхода в интернет через нее. А этого бы очень хотелось.

Еще один неприятный момент, со стандартной D-link-ой прошивкой не заработал LTE на 4G-модеме от МТС. Хотя он определился без проблем, но работал только в 3G.

Поэтому дальше я решил перейти на какую-нибудь неофициальную прошивку, например,  Tomato или Vampik. OpenWRT тоже хорошая, но текущей ревизией данного роутера не поддерживается.

Если потребуется откатиться с бета-версии d-link 2.0.9 на более старую прошивку нужно зажать кнопку reset в момент включения питания и не отпускать ее в течении 10 секунд. Роутер переходит в режим восстановления. Обязательно через IE (через firefox почему то файлы не заливались) заходите на 192.168.0.1, там будет доступна форма для загрузки файла прошивки. Заливайте, ждете когда роутер моргнет всеми лампочками и перезагрузится. Предварительно в настройках сетевой карты вашего компьютера нужно убрать автоматическое получение ip-адреса и поставить вручную 192.168.0.2 и маску 255.255.255.0.

Таким же способом через режим восстановления прошиваются и все другие неофициальные прошивки. Откатится с tomato обратно на d-link можно просто через веб-интерфейс Tomato в разделе upgrade. Только имейте в виду, что после прошивки Tomato web-интерфейс консоли восстановления будет доступн по адресу 192.168.1.1, а не 192.168.0.1 как до этого.  В этом нет ничего страшного, дело в том, что в Tomato LAN настроена на подсеть 192.168.1.1/24.

Прошивки Tomato by Shibby доступны на официальном сайте в разделе download. D-link dir-620 c1 очень похож по начинке на Asus RT-N15U, хотя и не является его полным близнецом. Поэтому нам подойдут все прошивки сборок RT-N. Берете здесь самую последнюю версию Big-VPN для ASUS RT-Nxx. Я закачивал tomato-K26USB-1.28.RT-N5x-MIPSR2-120-Big-VPN.trx. И обновляете через режим восстановления.

После этого вы получаете полностью рабочий роутер, который сразу определяется как dir-620 c1 и все работает из коробки, в том числе порты LAN и Wi-Fi.

Поддержка 3g-модемов так же имеется. Только проследите, чтобы она была включена на вкладке USB and NAS >USB Support USB 3G Modem support.
К сожалению точного списка модемов, поддерживаемых Tomato нет, но если вы найдете свою модель в этом списке, то скорее всего она будет работать. Поиск там весьма не удобен, но если присмотреться, то увидите, что модели роутеров располагаются группами. Например, Huawei начинается с 12d1, ZTE - c 19d2 и т.д. Оба мои модема Huawei E3272 (это новый 4G модем от МТС) и 3G модем ZTE MF652 заработали сразу без каких-либо танцев с бубнами!

Настройки VPN-подключения на прошивке Tomato by Shibby  
Вставляете модем, включаете роутер. Заходите в web-интерфейс по адресу http://192.168.1.1 и идете в Basic>Network. В секции WAN/Internet настраиваете тип соединения 3g Modem. В поле Modem device выбираете /dev/ttyACM0, если помимо самого модема у вас определяется еще и флешка или /dev/ttyUSB0, если режим "только модем". Далее настройки оператора: номер дозвона, точка APN, имя и пароль. Все остальное по умолчанию. Не забудьте сохранить!

Теперь настроим VPN-соединение. Здесь есть специальный раздел VPN Tunneling, заходим в него, дальше PPTP Client. Прописываем адрес вашего VPN-сервера, имя, пароль, отмечаем все галочки, получать DNS - да, и задаем вручную MTU 1456. Сохраняем и перезагружаемся.

После ребута, модем автоматически подключится к сети. Это вы поймете, когда на нем загорится синий светодиод. А так же увидите в настройках Status>Overview в секции WAN, что получен ip-адрес.

Затем произойдет автоматическое подключение к VPN-серверу. Проверить это вы сможете на вкладке QoS>View Details. Там будет запись с адресом вашего vpn и 1723 портом.

Благодаря тому, что при настройке VPN-подключения мы поставили галочки Redirect Internet Trafic и Create NAT on tunnel  весь наш трафик теперь отправляется в туннель и поэтому мы выходим в Интернет через VPN-сеть. Проверьте свой ip на сайте 2ip.ru.

У нас осталась еще одна не решенная задача - это доступ к ip-камере за роутером Для этого настроим перенаправление портов. Очередная проблема в том, что при задании портов через веб-интерфейс в разделе Port Forwarding>Basic правила применяются только для WAN и LAN и не работают для VPN. А нам то надо между TUN и LAN.

Но в Tomato есть возможность гибкой настройки firewall'a через команды терминала. Они вводятся  либо через telnet или ssh, либо в разделе Administration>Scripts на вкладке Firewall.  Для конфигурирования используется iptables, поэтому вам не составит особого труда разобраться с его синтаксисом.

К примеру для проброса 80 порта ip-камеры с адресом 192.168.1.5 к произвольному порту 12345 роутера добавьте следующую  строчку
iptables -t nat -A PREROUTING -i ppp1 -p tcp --dport 12345 -j DNAT --to 192.168.1.5:80
где  -i ppp1 - это интерфейс вашего vpn-туннеля. Его можно узнать с помощью ifconfig. И еще обратите внимание на ip-адрес, который вам присвоен в vpn-сети.

По аналогии пробросим веб-интерфейс роутера на порт 23456.
iptables -t nat -A PREROUTING -i ppp1 -p tcp --dport 23456 -j DNAT --to 192.168.1.1:80
Командой iptables -t nat -vL убедитесь, что правила применились.

Для проверки доступа, зайдите с любого компьютера из VPN-сети на ваш адрес, с помощью браузера, используя порт 23456. Должны увидеть форму приветствия.

Или просто просканпруйте nmap'ом на предмет открытости порта.

Поздравляю! Доступ получен! Слава VPN!

В заключение хочу добавить сопутствующей информации, как управлять модемами Huawei с помощью гипертерминала. Скачиваете My Huawei Terminal. В диспетчере устройств windows смотрите какой USB-порт используется модемом и подключаетесь к нему с помощью терминала. После этого введите команду AT, модем должен ответить Recieve: OK. После этого введите команду AT^SETPORT="FF;61,62". Она включит режим "только модем" и принудительно заставит его работать в режиме 4g. По умолчанию на модеме установлена команда AT^SETPORT="A1,A2;62,61,76,A1,A2".

Еще после прошивки tomato роутер стал греться. Поэтому я решил снизить частоту процессора. Для этого заходим через ssh на роутер, или в Tools>System Commands и вводим команду  
nvram show | grep clkfreq
Увидите текущие настройки. У меня были  clkfreq=530,176,88. Частоты cpu, ddr и axi.
Меняем
nvram set clkfreq=440,220,110
nvram commit
reboot
Или можете в большую сторону nvram set clkfreq=532,266,133

 

12 комментариев:

  1. Добрый день. Отличный мануал! спасибо. вспомнил о вашей статье когда уже прошил и дошло дело до настойки pptp. только исправьте пожалуйста у Вас команда неправильная: вместо ipconfig нужно в putty ifconfig команду

    ОтветитьУдалить
    Ответы
    1. Спасибо, что нашли неточность, все исправлено!

      Удалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. Подскажите пожалуйста.
    В кратце: у меня pptp сервер(микротик) и pptp клиент(томато).
    проблема внутр подсеть микротика не видет внутр подсеть томато.
    я так понял проблемы с доступом подсетей друг к другу.
    так понял нужно /admin-scripts.asp написать правило:
    iptables -I ... а что куда разрешить я не нашел ответа
    br0-у меня внутр подсеть томато. ppp1-ip vpn сети.

    ОтветитьУдалить
    Ответы
    1. Как вы могли заметить, в данной статье мы не затрагивали вопрос с доступом к локальным сетям клиента и сервера. Мы лишь ограничились пробросом портов для одной локальной машины на роутере с томато.

      Локальные сети клиента и сервера действительно не имеют доступа друг к другу. Это связано с тем, что сервер ничего не знает о локальной сети клиента. Вам нужно вручную прописать на сервере маршрут до лок сети клиента.
      Что-нибудь вроде такого: # route add -net 192.168.20.0/24 192.168.10.2, первое - это сеть клиента, второе - адрес, полученный от сервера.

      Удалить
  5. добрый день! если Вы знаете, подскажите пжлста:
    у меня 620 с1 выступает в роли pptp сервера, к нему конектится клиентом zyxel keenetic. Коннект есть. Но вот что прописать и куда чтоб организовать локалку посредством vpn между 620с1 и zyxel keenetic?
    На других роутерах такая связка пашет: в настоящий момент в роли pptp сервака выступает keenetic giga к которому конектится zyxel keenetic - перебросил порты - доступ имею. В линуксе почти нуб.

    ОтветитьУдалить
    Ответы
    1. Здравствуйте! Ваша проблема аналогичная, как и у предыдущего человека. На сервере у вас не настроены маршруты до сетей клиента. Команда route в помощь! Где это настраивается на стандартной прошивке d-link не подскажу, а на томато в разделе Administration>Scripts.

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
    3. Приятно слышать! Можете здесь поделиться своими результатами, я думаю кому-нибудь еще пригодится!

      Удалить
    4. В связи с тем, что картинки не вставляются - опишу текстом.
      На даче имеется dir412 - этакий мамонт с openwrt + e3131, стоящий в углу, где ловится 3Ж сигнал, который дает интернет для zyxel keenetic. К кинетику подрублена камера китайская nnm, датчик температуры на esp8266, ip телефон от zadarma, и по приезду на дачу с него шарится инет на все привозимые устройства. Keenetic также по pptp конектится к квартирному dir620c1 с tomato v.131, и офисному Giga. Бился долго с маршрутами - потому как сам накосячил из-за невнимательности. На кинетике перекинул порты, прописал маршруты, и разрешил доступ с "внешних локальных сетей". Везде все заработало. Настраивал все через gui прошивок. Осталось одна проблема, незначительная - на dir620c1 (в квартире)перекинуть порты от pptp клиента в локальную зону роутера, и оттуда уже в wan. В gui tomato в dhcp не цепляется жесткая привязка ip pptp клиента к его mac, и не работает port forwarding wan-to-ppp+ Могу зайти в порты ppp+ только находясь в локалке роутера.

      Удалить