VPN туннель через роутер с 3G модемом

Это статья о том, как с помощью роутера, поддерживающего 3G модемы, подключаемые в порт USB, организовать VPN туннель для устройств в локальной сети. На самом деле это всё понадобилось по одной простой причине – как оказалось, у провайдера “Интертелеком”, так называемые “коробочные решения”, т.е. модемы, продваемые с вшитым номером и готовым подключением, при выходе в интернет получают ip-адреса из “серого” диапазона. Из-за этого такое подключение становится непригодным для использования его снаружи – подключиться к видеонаблюдению, например, или еще какому-нибудь сервису внутри локальной сети из интернета невозможно.

На сегодняшний день описанная тут прошивка устарела, а с новой её версией не всё гладко – для поддержки всех описанных возможностей в роутере нехватает памяти. Проблему решает кастомная прошивка, подробности по ссылке: Прошивка OpenWRT для роутера TP-link TL-MR3220.

В моем случае ситуация была такой: есть офис с сервером, на удаленной точке устанавливался кассовый аппарат, сервер из офиса должен делать запрос на кассовый аппарат и получать с него данные продаж. Т.е. необходимо организовать связь так, чтобы сервер видел кассу. Самый простой вариант – установить на точке роутер, в котором есть поддержка служб вроде Noip или DynDNS, подключить роутер к интернету, открыть нужный порт на кассовый аппарат. И вот тут получилась загвоздка. Выходом в интернет был 3G-модем и он при соединении с провайдером получал “серый” ip. Тогда необходим вариант посложнее, нужен vpn-сервер, нужен роутер, который сможет работать как vpn-клиент и будет делать это автоматически, без лишнего вмешательства. Идеальным вариантом мне кажется использование с обеих сторон роутеров Mikrotik, например RB751. Но есть еще одно препятствие.

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

Я составил список модемов, которые были в наличии у нас в магазинах и список роутеров, которые доступны, ну и соотвественно выписал списки поддерживаемых модемов для каждого роутера. У меня получилась всего одна подходящая парочка: роутер TP-link TL-MR3220 и модем Huawei EC306. Еще одно важное свойство этого роутера – для него есть прошивка OpenWrt, в которой, собственно, и есть нужные функции по поднятию vpn-туннеля.

Прошивка
Первое, что нужно будет сделать – прошить роутер. Прошивки для роутеров TP-Link лежат тут: Wiki OpenWrt

Прошивка которую использовал я: r42625, это вариант прошивки с веб-интерфейсом Luci.

На сегодняшний день актуальная версия прошивки r46767, в указанной выше уже не работают функции загрузки пакетов, вернее не работают ссылки, вшитые в прошивку.

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

Чтобы добавить пакеты нужно подключить роутер к интрнету. Проще всего – вставить в wan порт кабель от другого роутера, по которому наш подопытный получит настройки по dhcp и выйдет в интернет. Можно использовать для выхода в интернет и wifi.

После того как интернет подключен заходим в раздел System – Software
openwrt-system-software
Сначала нужно нажать Update lists, будет получен список доступных пакетов, в разделе Available packages выбрать необходимые:

comgt
kmod-usb2
kmod-usb-serial
kmod-usb-serial-option
kmod-usb-serial-wwan
kmod-usb-acm
usb-modeswitch
luci-proto-3g

После установки пакетов нужно вставить модем, в разделе System – Startup нужно проверить чтобы все опции запуска были включены (Enabled), и перезагрузить роутер.
После того как поддержка usb и протокол установлены нужно добавить новый сетевой интерфейс: в разделе Network – Interfaces. При создании нового интерфейса в поле выбора протокола должен быть доступен пункт UMTS/GPRS/EV-DO, после его выбора появятся поля для ввода параметров подключения: APN, username, password.
openwrt-network-3g
В настройках 3G интерфейса, на закладке Firewall settings нужно выбрать зону wan.
Теперь можно отключить те настройки, которые были сделаны для подключения роутера к интрнету (кабель или wifi) и перезагрузить роутер – должна установиться связь через модем.

Настройка VPN
Для vpn-подключения я использовал протокол pptp. По тому же принципу, что и при настройке модема, нужно в сетевых интерфейсах добавить новый, с использованием протокола pptp. Если такого варианта при выборе протоколов нет, нужно добавить пакеты с поддержкой этого протокола. В свойствах интерфейса нужно будет указать адрес сервера vpn, логин и пароль. На вкладке Firewall settings нужно добавить новую зону с произвольным именем, например ‘vpn’. Если всё настроено верно, после сохранения настроек роутер сразу установит связь с сервером.
Теперь нужно добавить правило для трафика между локальной сетью и vpn. В разделе Network – Firewall – Traffic rules создаем New forward rule, источник (Source zone) – lan, назначение (Destination zone) – vpn, действие (Action) – Accept. В том же разделе, на вкладке General settings для зоны VPN нужно убрать блокировку входящего и исходящего трафика и включить Masquerading.
openwrt-firewall-zones

на последней версии прошивки наблюдались проблемы при установке соединения по pptp протоколу, для устранения проблем необходимо проверить наличие и доустановить пакеты:
gre
kmod-gre
kmod-nf-nathelper-extra

Для проверки прохождения трафика через vpn можно зайти в браузере на любой сервис проверки “моего ip”, должен определиться ip адрес vpn-сервера к которому мы установили подключение.

Примерно так выглядит страница со списком сетевых интерфейсов после настройки всех нужных соединений:
openwrt-network-interfaces

Открываем порты
Последний этап настройки – открываем порты по которым можно будет обратиться к устройствам снаружи через созданный туннель.
Раздел Network – Firewall – Port Forwards. У меня почему-то сразу не выбирались нужные зоны, по этому я вписал нужные порты, добавил правило и уже потом отредактировал его как надо. А надо из зоны “vpn” с порта “нужный нам внешний порт” на адрес “указываем адрес устройства в локальной сети” на порт “нужный порт на устройстве” в зоне “lan”. Т.е. зона vpn это в нашем случае внешняя зона (External) а локальная сеть – внутренняя (Internal).

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