Eth0, eth1, lo, wlan0 и ppp0


#1

Добрый день!
У меня WB6 с wi-fi и gsm 3g модемом. Попробую описать какая у меня проблема (скорее всего просто что-то не понимаю в настройках…не ругайтесь:)))). Планирую я и итоге сделать удаленное управление через Iridium и основной канал будет gprs.
Итак для начала я попробовал работу через CloudMQTT. Подключался как через wi-fi так и gsm. Файл /mnt/data/etc/network/interfaces у меня выглядит вот так:
#/etc/network/interfaces – configuration file for ifup(8), ifdown(8)
#The loopback interface
auto lo
iface lo inet loopback
#Wireless interfaces
allow-hotplug wlan0

auto wlan0
iface wlan0 inet dhcp
wpa-ssid LIMITE
wpa-psk :slight_smile:

#iface wlan0 inet static
#address 192.168.42.1
#netmask 255.255.255.0

auto eth0
iface eth0 inet dhcp
pre-up wb-set-mac
hostname WirenBoard

allow-hotplug eth1
iface eth1 inet dhcp
pre-up wb-set-mac
hostname WirenBoard

#The gsm pptp interface
#vvv uncomment block to enable

auto ppp0
iface ppp0 inet ppp
provider mts
pre-up wb-gsm restart_if_broken
pre-up sleep 10

Файл /mnt/data/etc/mosquitto/conf.d/bridge.conf у меня выглядит вот так:

connection cloudmqtt
address m24.cloudmqtt.com:14751
remote_username laxkwlvs
remote_password :slight_smile:
clientid dima_limite
try_private false
start_type automatic
topic # both

В общем-то всё это работало и передавало данные на Iridium панель через CloudMQTT. А так же в локальной сети wi-fi по адресу 192.168.0.38 (который присваивает роутер по wlan0) можно смотреть просто через MQTT драйвер на Iridium панели.
Дальше я прочитал на https://dev.iridi.com/Remote_Control_Pro про Iridium cloud gate и меня заинтересовало, но он работает только с Iridium server. Здесь на форуме прочитал описание как его установить и установил без особых проблем.
Далее в Iridium server нужно настроить драйвер MQTT и вот тут у меня возник вопрос, а какой IP адрес ставить ведь сервер стоит на этом же устройстве? В итоге поставил тот же 192.168.0.38, т.к. порты разные 1883 и 30464 и вроде должно быть всё ок. После этого загрузил проекты на облако Iridium и через вебсервер 192.168.0.38:8888 загрузил. Сразу у меня этого сделать не получилось и я подумал, что облако подглючивает и параллельно “играл” с SMS-ками (включал и отключал gprs, делал route del default и route add default dev ppp0) и в какой-то момент файл на Iridium server синхронизировался с облаком. Я загрузил проект панели на планшет и СРАЗУ всё пошло, то есть работа была через Iridium cloud gate. Обрадовался, что всё ок и перед выключение WB6 закомментировал файл bridge.conf, т.к. CloudMQTT более был не нужен.
Утром включаю - не работает! Захожу в вебсервер 192.168.0.38:8888 и оттуда управляющие команды проходят и всё ок, а с планшета ни как. Обратился в техподдержку Iridium, делал и показывал всё что просили - вроде всё должно работать, но не работает. В итоге ко мне подключились по TeamViewer. Получается, что банально нет сетевого подключения. По дефолту у меня подключается wlan0, но если пингануть не 8.8.8.8 (пингуется, но это похоже просто роутер отвечает), а google.com, то пинга НЕТ. Если выполняем route del default и route add default dev ppp0, то переключаемся на gprs и пинг появляется.Вот как это выглядит у меня:


Сказали, что нужно как-то иначе подключаться и проконсультироваться с вами. В итоге так тоже не пошло и я предложил вернуть как было днём ранее и раскомментировать bridge.conf. Раскомментировали, перегрузили, опять route del default и route add default dev ppp0 и ПОШЛО. Потом я выключал контроллер на какое-то время и по включению не смотря на все эти манипуляции больше не работает…Как сделать по default ppp0 я уже прочитал на форуме, но тут видимо вообще не в этом дело.
Что я ещё попробовал - изменил настройки eth0 на статические:
auto eth0
iface eth0 inet static
address 192.168.0.39
netmask 255.255.255.0
Появился вебсервер на этом адресе. И я его использовал для настройки драйвера MQTT в Iridium server - без результата.
Вопросы:

  1. Какой адрес корректно использовать для Iridium server? Может какой-то внутренний есть канал?
  2. Как правильно настраивать wlan0 чтобы было соединение с интернетом?
  3. Играет ли в этом процессе какую-то ключевую роль bridge.conf? Может там надо что-то прописывать по аналогии с CloudMQTT? Хотя через вебсервер Iridium server команды проходят без проблем.
  4. eth0, eth1, lo, wlan0 и ppp0 могут “жить” одновременно?
    Понимаю что как-то должно быть всё просто и ответ где-то внизу https://wirenboard.com/wiki/index.php/GSM/GPRS в разделе про DNS.
    Объясните пожалуйста.

#2

Сейчас ещё разок изменил немного на Iridium server для MQTT 192.168.0.39 (eth0) , а для самого сервера 192.168.0.38 (wlan0). Опять route del default и route add default dev ppp0 и ПОШЛО.
Решил перегрузить и ещё разок проверить и всё…((((((((((((
Туплю.


#3

Смотрите после манипуляций с каналами связи вывод

route -n

ifconfig

В них видно какие каналы “поднялись” и какие им параметры присвоены.
Для default ppp0 напишите скрипт, как рекомендовалось ранее


#4

Это я всё уже знаю и понимаю :slight_smile:
Проблема в том как заставить eth0, eth1 и wlan0 выйти в интернет. Они реально “не видят” интернет. Всё это работает только за счёт bridge.conf. Можете проверить.
А по вопросам моим можете что-то посоветовать?


#5

dimalimite, добрый день!
Спасибо за подробное описание проблемы! Очень много сетевых подключений и в них легко запутаться.
Смотрите, в текущий момент времени канал выхода в интернет может быть только один, сколько бы интерфейсов у вас ни было активно. Настройки bridge.conf напрямую никак не могут влиять на сетевую доступность.
Сеть несколько ключевых моментов.

  1. Какой шлюз по умолчанию используется в вашей конфигурации и к какому интерфейсу он относится? (выбор шлюза по умолчанию часто определяется порядком ifup интерфейсов --см. сообщение Flagman)
  2. Какие DNS-серверы активны и доступны в текущий момент (их адреса вы получаете по DHCP, скорее всего, от одного из маршрутизаторов)?

Для отладки я бы исключил максимальное количество интерфейсов, оставив, например, локальное подключение через eth0 к маршрутизатору локальной сети, и настроил бы работу с ним. Потом добавлял бы остальные интерфейсы по мере необходимости.

Могу порекомендовать вам прочесть нашу статью https://wirenboard.com/wiki/index.php/Wirenboard6:InstallingOnTheRemoteSite

Возможно, она внесет дополнительную ясность.


#6

Статью сейчас почитаю!
А по 1-му вопросу моему что-нибудь можете посоветовать?


#7

Я подключен к роутеру по wi-fi. Нет возможности тянуть провод до него.
Добавил в файл /mnt/data/etc/resolv.conf
nameserver 8.8.8.8 - ВОТ ЭТУ СТРОЧКУ ДОБАВИЛ
nameserver 213.87.1.1
nameserver 213.87.0.1
domain Dlink
search Dlink
Появился ping google.com


Связи с iridium панели нет.
После перезагрузки питания строчка nameserver 8.8.8.8 из /mnt/data/etc/resolv.conf стирается!!!


#8

Похоже я начал “догонять” в чём причина.
defoult подключение определяется /etc/default/hostapd?
Там демон DAEMON_CONF="/etc/hostapd.conf" запускает hostapd.conf
В hostapd.conf указано wlan0, НО т.к. у меня работает всё через wi-fi я закомментировал демона в /etc/default/hostapd (см. рекомендации https://wirenboard.com/wiki/index.php/Wi-Fi). Вот так у меня выглядит #DAEMON_CONF="/etc/hostapd.conf".
Получается, что как бы при запуске вообще типо ни кто и не выбирается.
Делаю сейчас ifdown wlan0, а потом ifup wlan0.
И панель iridium ВИДИТ!!!
Вот DNS:


google.com при этом не пингуется и не открывается вебсервер по адресу 192.168.0.38.
После перезагрузки естественно iridium пропадает и вебсервер появляется.


#9

Перепробовал различные вариации /etc/default/hostapd: убирал #,
менял /etc/hostapd.conf (ставил # в разных строках в итоге вот так
interface=wlan0
#driver=nl80211
#ssid=WirenBoard-AYBOKRLC
channel=1
менял /etc/network/interfaces довавлял # перед auto wlan0
Всё в пустую.
В итоге решил вернуть как было (#DAEMON_CONF="/etc/hostapd.conf" и auto wlan0) и у вас ещё уточнить. И ЗАРАБОТАЛО как я хотел почему-то. То есть есть и все вебинтерфейсы и iridium панель работает и при перезагрузке всё так и остаётся.


Может один раз выполнилось/etc/hostapd.conf:
interface=wlan0
#driver=nl80211
#ssid=WirenBoard-AYBOKRLC
channel=1 (ВОТ ЭТОТ КАНАЛ ОТКРЫЛСЯ???)
Не понимаю! Объясните пожалуйста. И первый вопрос ещё из моего первого сообщения.

И еще получается (по идее) если работать предполагается только через ppp0, то не надо ни каких скриптов делать чтобы его по дефолту ставить, а просто прописать его в /etc/hostapd.conf и убрать # от DAEMON_CONF="/etc/hostapd.conf" ?


#10

Добрый день!
Смотрите, есть разные варианты настройки Wi-Fi: как клиент беспроводной сети, как точка доступа, и одновременно клиент и точка доступа. Про это, в том числе и про hostapd.conf мы подробно написали вот в этой статье:
https://wirenboard.com/wiki/index.php/Wi-Fi

channel – это номер Wi-Fi-канала (2.4 GHz), на котором работает контроллер как точка доступа.

Протокол ppp0 не используется в Wi-Fi, это скорее необходимая опция для GPRS-соединения,
Сошлюсь опять-таки на статью https://wirenboard.com/wiki/index.php/Wirenboard6:InstallingOnTheRemoteSite.

А про первый вопрос попрошу вас уточнить, какой вы имеете в виду. К сетевому сервису, работающему га той же машине проще всего обращаться по адресу localhost: 127.0.0.1


#11

День добрый!
Про Wi-fi я понимаю. У меня как клиент настроен он. Посмотрите пожалуйста 8 пост этой ветки. Я настроил его в рекомендациях. И похоже, что если так сделать, то не устанавливается ни какое дефолтное подключение к интернету. Это так???
Прочитал я обе эти статьи (без них бы не работал у меня wi-fi как клиент).
По 1 вопросу я про Iridium server, который установлен на WB6. Когда настраивается драйвер MQTT Iridium server, то требуется установить IP, с которого будут идти данные, а так же IP самого Iridium server в локальной сети. И вот я спрашиваю, как наиболее корректно это сделать. Получается и там и там 127.0.0.1 просто разные порты?


#12

А вам удается подключиться к точке доступа ведь по Wi-Fi: посмотрите, какие настройки контроллер получает от маршрутизатора по DHCP.

К MQTT-брокеру на том же сервере можно подключаться по адресу 127.0.0.1
А где вы и для чего указываете адрес Iridium-сервера в локальной сети?

Задайте контроллеру статический адрес, везде его указывайте, так, кажется, будет проще.


#13

Так я в первом своё посту пишу:

Вот содержимое файла resolv.conf
nameserver 213.87.1.1
nameserver 213.87.0.1
domain Dlink
search Dlink

Когда настраивается соединение Iridium-сервера и Iridium-панели нужно указать адрес в локальной сети https://dev.iridi.com/Remote_Control_Pro

Так я прав про, то что если сделать настройку wi-fi в режиме клиента, как вот тут написано https://wirenboard.com/wiki/index.php/Wi-Fi , то получается нет подключения по дефолту???

Я просто пытаюсь суть понять, как живут все эти интерфейсы между собой.


#14

А вы подключаетесь же через Wi-Fi к маршрутизатору локальной сети и интернету?
А как вы используете eth0?


#15

Ну вот пытаюсь подключится. Прочитайте мой первый длинный пост и после несколько.
eth0 - а вот его IP-шник я указал в Iridium-сервере, как адрес брокера WB6 откуда данные читать.
Вот я с этого и начал вопросы - как живут между собой все эти eth0, eth1, lo, wlan0 и ppp0. Имеют ли доступ к одинаковым данным и т.п.


#16

Вы знаете, ну никакой особенной специфики у сетевых интерфейсов контрроллера нет: все как на любом компьютере с Debian. К сожалению, объяснить все тонкости нетворкинга в формате портала техподдержки Wiren Board невозможно.

Очень грубо говоря, есть интерфейсы. У интерфейсов есть IP-адреса в разных подсетях, что определяется конфигурацией. Есть правила маршрутизации, которые направляют трафик в зависимости от подсети адреса-получателя через тот или иной интерфейс. Если адрес получателя не в одной из известных подсетей, то он отправляется на интерфейс, который настроен как шлюз по умолчанию (default gateway) 0.0.0.0 (route -n покажет, какой именно интерфейс сейчас используется как шлюз по умолчанию в системе).

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

Домашний маршрутизатор пр подключении к нему устройства, запрашивающего сетевые настройки по DHCP, обычно выдает ему адрес в подсети, общей между маршрутизатором и устройством), маску подсети, адрес шлюза по умолчанию (через который запрашивающий будет выходить в интернет), адреса DNS-серверов.

Система, получившая ответ на интерфейс, через который она запрашивала данные, присваивает этому интерфейсу полученные настройки. Подключились к маршрутизатору по Wi-Fi – ваш wlan0 интерфейс получил адрес, стал интерфейсом для выхода в интернет.

Сетевые сервисы контроллера открывают сокеты (интерфейс:порт), чтобы к ним можно было обратиться по сети (команда netstat -tulpn показывает, на каких адресах/интерфейсах и портах слушают какие сервисы, 0.0.0.0 – на всех адресах/интерфейсах).


#17

Ок. :slight_smile:
defoult подключение изначально (из коробки) определяется /etc/default/hostapd ? В route -n оно обозначается флагом UG?
Надо ли делать ifup хотябы 1 раз? Или надо добавлять скрипт вида:
#!/bin/sh -e
route del default
route add default dev (нужное подставить)
?
Как сохранить изменения в файл /mnt/data/etc/resolv.conf ? Он перезаписывается при перезагрузки контроллера, а все мои проблемы решаются добавлением туда строки nameserver 8.8.8.8?


#18

dimalimite, добрый день!

Смотрите, hostapd из коробки создает на контроллере точку беспроводного доступа, в этом основная задача этого демона (нашел хорошую статью: https://habr.com/ru/post/188274/ описывающую, как это примерно сделано на контроллере).

Подчеркнул красным, то что относится к интерфейсу беспроводной точки доступа:
image
Зеленым подчеркнул шлюз по умолчанию: на контроллере на иллюстрации он подключен к маршрутизатору локальной сети через интерфейс eth0.

Когда контроллер получает по DHCP сетевые настройки, он заодно получает от маршрутизатора и адреса DNS-серверов.

Задание адресов вручную, когда используется DHCP, описано в моей любимой статье: https://wirenboard.com/wiki/index.php/Wirenboard6:InstallingOnTheRemoteSite

Там рассмотрено два случая – выход в интернет через локальную сеть (на примере eth0):

Из файла /etc/dhcp/dhclient.conf из параметра request удаляем параметр domain-name-servers , а после параметра request указываем открытые DNS-сервера Google и OpenDNS:

prepend domain-name-servers 8.8.4.4, 8.8.8.8, 208.67.222.222, 208.67.220.220;

И выход в интернет через сеть мобильного оператора, когда используется ppp:

В директории /etc/ppp/ip-up.d создаем скрипт (и даем ему права на выполнение), который добавит DNS-сервера Google и OpenDNS в файл resolv.conf при поднятии интерфейса.

Дальше там скрипт, здесь приводить не буду.
Вот примерно так.


#19

День добрый!
Сломал себе уже всю голову с этими сетевыми интерфейсами.
Я ВСЁ уже сделал (как мне кажется), что мне советовали. Прочитал все статьи на эту тему. Но не получается!!! То есть получается, но “не автоматически”…после перезагрузки всё по новой…
Помогите пожалуйста разобраться.
Что я хочу получить:

  • подключение к интернету через gsm-модем ppp0;
  • точку доступа wi-fi к контроллеру для возможности локального подключения и местной работы иридиум панели wlan0 (то есть когда панель панель в одной сети с контроллером, то обмен идёт по нему, а не через ppp0…это всё настраивается в иридиуме и работает).
    Что сделано:
  1. Точка доступа wifi по умолчанию. Всё кроме ppp0 закомментировано (не копирую сюда):
    auto lo
    iface lo inet loopback

allow-hotplug wlan0

iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0

auto ppp0
iface ppp0 inet ppp
provider mts
pre-up wb-gsm restart_if_broken
pre-up sleep 10

  1. Из файла /etc/dhcp/dhclient.conf из параметра request удаляем параметр domain-name-servers, а после параметра request указываем открытые DNS-сервера Google и OpenDNS:
    prepend domain-name-servers 8.8.4.4, 8.8.8.8, 208.67.222.222, 208.67.220.220;

  2. Создан файл runppp (права выставлены chmod 755 /etc/ppp/ip-up.d/runppp):
    #!/bin/sh
    route del default dev ppp0 2>/dev/null
    route add default dev ppp0 metric 100 2>/dev/null
    (как по статье https://wirenboard.com/wiki/index.php/Wirenboard6:InstallingOnTheRemoteSite на всякий случай с другой метрикой)

  3. Создан файл dnsppp (права выставлены chmod 755 /etc/ppp/ip-up.d/dnsppp):
    if [ ! -e /etc/resolv.conf ]; then
    : > /etc/resolv.conf
    fi
    #OpenDNS
    printf ‘%s\n%s\n’ “nameserver 208.67.222.222” “$(cat /etc/resolv/conf)” >/etc/resolv.conf
    printf ‘%s\n%s\n’ “nameserver 208.67.220.220” “$(cat /etc/resolv.conf)” >/etc/resolv.conf
    #Google DNS
    printf ‘%s\n%s\n’ “nameserver 8.8.8.8” “$(cat /etc/resolv.conf)” >/etc/resolv.conf
    printf ‘%s\n%s\n’ “nameserver 8.8.4.4” “$(cat /etc/resolv.conf)” >/etc/resolv.conf

В итоге в файле /etc/resolv.conf получается:
nameserver 213.87.0.1
nameserver 213.87.1.1
(это МТС на сколько я понимаю, то есть вроде как всё ок, но почему нет OpenDNS и Google DNS???)

НО иридиум панель (планшет) не видит иридиум сервер при работе через интернет. Если подключаем панель к wi-fi WB6, то всё ок.
Далее я захожу на вебинтерфейс иридиум сервера и несколько раз нажимаю синхронизировать с облаком иридиума (что делается вообще только для загрузки нового проекта) и вот после этого всё начинает работать, как я хочу - панель видит через интернет и если переключиться, то и wi-fi WB6.
После вкл/выкл, перезагрузки и т.п. всё по новой…
В чём может быть проблема???


#20

Добрый день, dimalimite!

  1. Скажите, а как выглядит таблица маршрутизации после перезагрузки?
  2. Проверьте, выполняется ли фактически скрипт dnsppp после перезагрузки.
  3. Вы можете разрешать доменные имена с контроллера после рестарта?
  4. К какому адресу сервера обращается панель?