четвер, 25 лютого 2016 р.

Деякі примітки до рутера на базі OpenWRT і 3G/4G модему

1. Отримуючи інтернет-зв'язок із світом через зв'язку рутера і 3G/4G модему, позбавляємося доступу ззовні до ресурсів у локальній мережі і рутера. Причина банальна - модем нібито отримує зовнішню адресу, але це нічого не означає, всі порти ззовні закриті. Так насправді, модем-інтерфейс, чи то wwan0, чи ppp0 отримують дві адреси - внутрішню в мережі провайдера і зовнішню на світ. Наприклад, мій модем зараз має адресу 10.181.18.180 в мережі провайдера:

wwan0     Link encap:Ethernet  HWaddr FA:63:B9:81:12:7C 
          inet addr:10.181.18.180  Bcast:10.181.18.183  Mask:255.255.255.252
          inet6 addr: fe80::f860:b9ff:fe81:127c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:281553 errors:239 dropped:0 overruns:0 frame:0
          TX packets:230960 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:282998444 (269.8 MiB)  TX bytes:49976507 (47.6 MiB)


а зовнішню адресу можна перевірити по checkip.dyndns.org, і вона зараз є 94.254.145.5. Ну але хоч би як ви не відкривали порти в рутері, до рутера ззовні вам зась. Можливо, якийсь провайдер і не блокує зовнішніх портів, але, судячи по форумах, це величезна рідкість.
Вихід є, можна докупити статичну ip-адресу, але це мене найменше цікавить. Інший логічний вихід - організувати vpn-мережу. Ну і виявилося, що, в принципі, робиться все досить просто на базі n2n. Причому для OpenWRT все робиться досить елементарно. Перш за все треба додати додаткові сховища пакунків від eko:

    # cd /tmp
    # wget http://dl.eko.one.pl/chaos_calmer/eko1.pub
    # opkg-key add eko1.pub
    # echo 'src/gz eko1 http://dl.eko.one.pl/chaos_calmer/ARCH/packages/' >> /etc/opkg/customfeeds.conf"
    # opkg update
 
Далі встановити пакунок n2n-v2,
# opkg install n2n-v2
і відповідно його сконфігурувати:

# vi /etc/config/n2n 

 config edge
    option ipaddr        '10.90.70.1(ip адреса вашої ноди)'
    option netmask        '255.255.255.0'
    option supernode    'ip-адреса сервера супермоди'
    option port        'порт сервера супермоди'
    option community    'назва спільноти'
    option key        'пароль доступу до спільноти'
    option route        '0'
 

#config supernode
#    option port        '86'


і запустити


# uci commit n2n
# /etc/init.d/n2n enable
#/etc/init.d/n2n start


Опції для створення суперноди закоментовані, вона нам на рутері і так ні до чого, бо доступу до неї немає. А в конфігурації моєї ноди, яка працює на рутері з модемом, ноді надано адресу 10.90.70.1 з маскою 255.255.255.0. Ця нода буде з'єднуватися з портом зовнішньої суперноди, яка запущена десь на сервері, який має відкритий якийсь порт (порт сервера суперноди). Можна знайти такі відкриті сервера, але вони довго не живуть. Простіше самому на якомусь сервері, до якого маємо доступ, скомпілювати або встановити пакунок n2n з супернодою і запустити її, прав суперкористувача для цього не потрібно.
Отже, скажімо, що маємо доступ до якоїсь суперноди, і у нас на рутері запущена нода. Треба тепер з'єднатися ззовні до неї. Це досить просто: на будь-якому компі встановлюємо пакунок n2n, і запускаємо ноду

# edge -a 10.90.70.2 -c назва_спільноти -k пароль_доступу_до_спільноти -l ip_адреса_сервера_суперноди:порт_сервера_суперноди -f

Тобто запускаємо ноду з тими ж параметрами, що й на рутері, тільки міняємо адрес ip в спільній мережі, на рутері 10.90.70.1, а на зовнішньому компі 10.90.70.2, наприклад. Ну все тепер, спільна vpn мережа створена, є супернода, є дві ноди, які комунікуються за допомогою суперноди. Щоб, наприклад, з'єднатися з рутером, достатньо на тому зовнішньому компі запустити переглядач інтернету і перейти на адресу http://10.90.70.1, має відкритися веб-інтерфейс рутера OpenWRT. На будь-якому компі в локальній мережі рутера можна запустити ноди з тими параметрами (міняючи тільки ip) і мати таким чином доступ до них.

2. На даний момент в чистому інтерфейсі luci для OpenWRT не реалізована підтримка висвітлення сили сигналу в модемі. В принципі, це можна побачити з рівня командного рядка, але постійно лазити на рутер, щоб тільки запустити команду типу

# uqmi -d /dev/cdc-wdm0 --get-signal-info

не зовсім зручно, бажано мати якусь звичну візуальну інфу. В сховищах eko я знайшов пакунок, який сяк-так це реалізує. Отже, встановлюємо пакунок 3ginfo:

# opkg update
# opkg install 3ginfo

Налаштовуємо:

# vi  /etc/config/3ginfo

config 3ginfo
    option http_port '81'
    option language 'en'
    option device '/dev/ttyUSB2'


# uci commit 3ginfo
# /etc/init.d/3ginfo enable
#/etc/init.d/3ginfo start

В мене ядро створює 4 пристрої для модему, /dev/ttyUSB1, /dev/ttyUSB2, /dev/ttyUSB3 і модуль qmi_wwan створює свій /dev/cdc_wdm0. Останній зайнятий під зв'язок, тому 3ginfo мусить використовувати інший пристрій, в даному випадку це /dev/ttyUSB2 для отримання інфо про сигнал. Далі відкриваємо сторіночку http://адреса_рутера:81 і бачимо картинку.

3. Часом, якщо ніхто не користується зв'язком, модем "засинає". Ніби зв'язок є, адреса ip є, але модем мовчить, жодна адреса не відкривається. Думаю, це дійсно модем засинає. Я додав до крона рядок, щоб через кожну хвилину пінгувався сервер гугла, це мало б підтримувати модем у збудженому стані:

*/1 * * * * ping -c 1 8.8.8.8

Ось уже два дні на модемі ще ні разу не пропав зв'язок. Ніби працює.


Немає коментарів:

Google Analytics