У меня есть Raspberry Pi 2, и я хотел бы использовать его дома и на работе. Дома это могло получить адрес DHCP или статический адрес 192.168.2.x, но на работе это должно получить статический IP-адрес 10.10.34.122.
Я знаю, как присвоить статический IP-адрес вручную путем редактирования /etc/network/interfaces
но после того как я делаю это, я не могу больше достигать устройства, если я нахожусь в другой сети, таким образом, этому нужно автоматическое обнаружение.
Моя идея состояла в том, чтобы создать два файла (/etc/network/home.if
и /etc/network/work.if
) и скопируйте их по мере необходимости. Я запустил бы с этих 192 адресов и попытки проверить с помощью ping-запросов мой маршрутизатор DSL. Если это отвечает, это должно использовать home.if
, в противном случае используйте work.if
.
До сих пор я думаю, что этот сценарий должен достигнуть того, что я хочу:
#!/bin/bash
# Start with my home setting
cp /etc/network/home.if /etc/network/interfaces
sudo /etc/init.d/networking restart
# If I can ping my router, I'm at home
ping=$(ping 192.168.2.1 -c 1)
#echo $ping
if [[ "$ping" =~ "1 received" ]]; then
echo "home"
cp /etc/network/home.if /etc/network/interfaces
else
echo "work"
cp /etc/network/work.if /etc/network/interfaces
fi
# Apply the detected settings
sudo /etc/init.d/networking restart
Куда я должен поместить этот сценарий, что он выполняется в корректном месте во время последовательности запуска?
Можно назвать его из файла/etc/rc.local. Можно или добавить строки к тому файлу или назвать сценарий там. Независимо от того, что Вы выбираете, необходимо добавить, что это выше строки 'выходит 0'.
BTW: Я предлагаю, чтобы Вы добавили команду ожидания после первого сетевого перезапуска, потому что может потребоваться несколько секунд для сети для запуска. Если ping прибывает в ранний, можно получить неправильный результат.