Я использую встроенный компьютер BeagleBone под управлением Debian.
У меня есть два сетевых интерфейса:
Соединение с сотовым модемом через USB, которое использует ppp и соединяется с внешним миром. Получает динамический IP-адрес от провайдера
Интерфейс Ethernet, который подключен только к другому локальному устройству. Я назначил этому интерфейсу статический IP-адрес 192.168.1.40. Я устанавливаю это внутри rc.local с помощью команды
ifconfig eth0 192.168.1.40 netmask 255.255.255.0
Только когда два интерфейса активны, возникает проблема подключения через модем. Я понял, что для решения этой проблемы я должен установить шлюз по умолчанию на адрес, который модем получает, запустив скрипт с моими приведенными ниже командами.
#!/bin/sh
IPADD=&(/sbin/ifconfig ppp0 | grep 'inet' | cut -d: -f2 | awk '{ print $2}')
route add default gw $IPADD
Это прекрасно работает, когда я выполняю скрипт вручную после входа в систему. Затем я могу общаться через два интерфейса.
Однако я не могу заставить этот скрипт правильно запускаться при загрузке и автоматически назначать адрес шлюза по умолчанию.
Я попробовал все, запустив его из rc.local, поместив скрипт в /etc/rc5.d или /etc/rc3.d, запустив его из /root/.bashrc или /user/.bashrc Используя crontab, пытаемся поспать 1 минуту перед запуском скрипта, запустив его в цикле. Ничего не работает
Похоже, что после входа в систему шлюз по умолчанию каким-то образом перезаписывается из-за наличия интерфейса Ethernet.
У кого-нибудь есть идеи, как это решить? Мне нужно, чтобы этот адрес шлюза по умолчанию назначался при загрузке автоматически. Я пытался уже несколько дней.
Если у меня не подключен кабель Ethernet или я отключил интерфейс Ethernet, проблем не возникает вообще. У меня проблема только с двумя активными интерфейсами.
ip route add default via $IPADD
это обычная версия со шлюзом, ip route add default dev ppp0
версия только для устройства. Немного упрощает ваш скрипт. (Интерфейсы точка-точка не имеют уровня MAC, поэтому адрес шлюза на самом деле не используемый в любом случае.)