2

У меня есть linux box, настроенный как мой интернет-маршрутизатор. У меня есть интерфейс eth0 подключенный к локальной сети, и интерфейс eth1 подключенный к модему pppoa и настроенный с помощью dhcp для моего публичного ip. Из-за проблем с ARP я должен подключиться к Интернету, используя сам модем (который имеет IP 172.16.0.1) в качестве следующего перехода. Для этого я использую следующие 2 строки:

route add -host 172.16.0.1 dev eth1
route add default gw 172.16.0.1

Обычно это выполняется после того, как интерфейс был настроен с помощью dhcp, и все хорошо. Проблема возникает, когда модем отключается, подключается заново и ему назначается новый IP-адрес. Когда демон dhcpc перенастроил интерфейс eth1 для нового ip, моя таблица маршрутизации теряет записи, необходимые для доступа в Интернет, что означает необходимость повторного ввода двух команд route . Есть ли способ заставить linux сохранять маршруты или, возможно, добавить их автоматически, когда dhcpcd сделает это?

Поиск в Google "постоянных маршрутов" предлагает способы сохранить маршруты между ботинками, но это не то, что мне нужно.

2 ответа2

3

Опция 1

Обычно вы можете настроить шлюз по умолчанию на вашем DHCP-сервере, поэтому всякий раз, когда он назначает IP-адреса, он также предоставляет шлюз по умолчанию для использования клиентами. Обратитесь к конфигурации вашего DHCP-сервера, чтобы узнать, как это сделать.

Вариант 2

Другой способ сделать это на клиенте - создать хук dhcpcd в /usr/lib/dhcpcd/dhcpcd-hooks (каталог может быть другим на slackware, но я в этом сильно сомневаюсь). Создайте новый файл с именем 40-route с содержимым:

route add -host 172.16.0.1 dev eth1
route add default gw 172.16.0.1

Или, в качестве альтернативы, это также должно работать:

ip route add 172.16.0.0/24 via 172.16.0.1

Это должно выполнить эту команду после того, как dhcpcd получит новый IP. Вы должны изменить 192.168.0.0/24 на то, что использует ваша сеть.

0

Для потомков вот что сработало для меня.

# /lib/dhcpcd/dhcpcd-hooks/40-route
if [ "$reason" = "BOUND" ] && [ "$interface" = "eth1" ]; then
  route add -host 172.16.0.1 dev eth1
  route add default gw 172.16.0.1
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .