Рейтинг:0

Как добавить постоянные IP-маршруты на сервер Ubuntu 20.04

флаг cn

Возможно, на этот вопрос где-то уже был дан ответ, но я пока не могу его понять. В последнее время у меня возникли проблемы с моим сервером Ubuntu 20.04. Я установил OpenVPN и могу успешно создать VPN-туннель с помощью NordVPN. Проблема в том, что при создании туннеля соединение обрывается, и я не могу вернуться по ssh к серверу, если не добавлю несколько IP-маршрутов. Я нашел решение для этого: Предполагая, что реальный IP-адрес сервера 185.230.125.107, я вручную добавил маршруты следующим образом:

sudo ip правило добавить из 185.230.125.107 таблица 128
sudo ip route добавить таблицу 128 185.230.125.107/32 dev eno0
sudo ip route добавить таблицу 128 по умолчанию через 185.230.125.254

Это работает нормально до перезагрузки. После перезагрузки машины мне нужно снова добавить эти правила. Мой вопрос таков: Как мне добавить эти правила, сделав их постоянными, чтобы при перезагрузке они оставались на месте!? Где и как мне их добавить!? Я где-то читал, что мне нужно создать какой-то скрипт в /etc/network/if-up.d, но я понятия не имею, как сделать такой скрипт. Пожалуйста, кто-нибудь готов помочь!? Я был бы очень признателен этим ребятам. Большое спасибо Ник

raj avatar
флаг cn
raj
Я почти уверен, что вы можете добавить это где-нибудь в конфигурации Netplan, однако я не знаю Netplan, потому что Ubuntu Desktop использует Network Manager, а не Netplan. В Network Manager вы можете добавлять постоянные маршруты, поэтому я уверен, что это возможно и в Netplan. Надеюсь, кто-нибудь ответит, как это сделать.
Nicola avatar
флаг cn
Спасибо в любом случае дружище
Рейтинг:1
флаг us
  1. Привет, приятель, я не могу комментировать, поэтому я попытаюсь ответить здесь.
  2. Есть несколько вариантов создания запланированного процесса для решения этой проблемы.
  3. Вот два варианта:
    • crontab - что меньше подходит для вашей проблемы.
    • сделать услугу - которая идеально подходит для вашей проблемы.
    • может быть больше и лучшие способы решить эту проблему.
  4. О кронтаб:
    • crontab — это список команд, которые вы хотите запускать по расписанию.
    • Чтобы добавить команду, которую вы хотите запустить по расписанию, вам нужно отредактировать файл crontab с помощью команды кронтаб -е.
    • вы можете использовать этот сайт, чтобы помочь вам рассчитать интервал, который вы хотите выполнить определенную команду crontabКалькулятор
    • вы можете использовать это руководство, чтобы создать свой собственный файл crontab. crontabGuide
  5. На мой взгляд, лучший вариант — создать свой собственный сервис.
    • когда вы создаете службу, вы можете запускать ее так же, как и все другие службы, это означает, что вы можете включать, отключать, перезапускать, запускать и все другие параметры, которые идут с systemctl команда.
    • вам нужно создать свой сервис в виде текстового файла и назвать его myServiceName.service.
    • то вам нужно найти эту службу в /etc/системд/система/.
    • используйте это руководство, чтобы иметь шаблон службы HowToMakeAServiceGuide.
    • после создания службы и размещения ее в определенном каталоге вы можете включить и запустить ее с помощью следующих команд: systemctl включить имя_службы.service и systemctl запустить serviceName.service.
    • служба должна запускаться при любой перезагрузке, чтобы решить вашу проблему.
  6. Отредактировано после комментариев.
    • создать скрипт с sudo nano /usr/local/sbin/SCRIPT_NAME.sh
    • пример скрипта с вашими командами:
    • #/бен/баш!
    • ip правило добавить из таблицы 185.230.125.107 128
    • ip route добавить таблицу 128 185.230.125.107/32 dev eno0
    • ip route добавить таблицу 128 по умолчанию через 185.230.125.254
    • теперь дайте скрипту права на выполнение с помощью chmod a+x SCRIPT_NAME.sh
    • теперь создайте службу с sudo nano /systemd/system/ИМЯ_СЛУЖБЫ.service
    • используйте этот шаблон: в поле ExecStart выполнить свой скрипт
Описание=демонстрационный сервис ROT13
После=network.target
Стартлимитинтервалсек=0
[Оказание услуг]
Тип=простой
Перезапустить = всегда
Рестартсек=1
Пользователь=центос
ExecStart=/usr/local/sbin/./SCRIPT_NAME.sh

[Установить]
WantedBy=многопользовательская.цель
  1. Отредактировано после комментариев два:
  2. Чтобы убедиться, что ваша служба настроена правильно, выполните следующие действия:
    • найти сервис в /etc/systemd/system/LOCATE_HERE.service
    • дайте вашему сценарию, запущенному службой, разрешение на выполнение с помощью sudo chmod a+x yourscript.sh
    • выполнить команду sudo systemctl демон-перезагрузка перезагрузить новую услугу.
    • выполнить команду sudo systemctl включить имя_службы.service
    • выполнить команду sudo systemctl запустить serviceName.service
    • выполнить команду sudo systemctl статус serviceName.service
    • если служба запущена, перезагрузите систему.
    • после перезагрузки выполнить команду sudo systemctl статус serviceName.service чтобы проверить, работает ли служба.
    • картинки:
    • сервисExampleThatWorksForMe
    • какToStartTheServiceCommands
    • если все это решение не работает, может быть проблема с типом файла - проверьте решение здесь решениеForFileTypeError
Nicola avatar
флаг cn
Большое спасибо, мой друг. Вы сделали мою жизнь намного проще. Это идеальное решение.
CrazyTux avatar
флаг us
добро пожаловать, опять же, я думаю, что есть больше решений, которые могут быть лучше, но это должно сработать, если оно работает, вы можете принять ответ, нажав V рядом с полем моего ответа.
CrazyTux avatar
флаг us
я только что нашел эту тему, которая может быть полезной и, возможно, лучше, чем мой ответ https://askubuntu.com/questions/168033/how-to-set-static-routes-in-ubuntu-server?rq=1
Nicola avatar
флаг cn
Итак, я снова здесь. Сценарий, который я сделал, как вы предложили, работает отлично. Единственная проблема в том, что при загрузке служба не запускается. Через Journalctl я узнал, что systemd не удалось запустить службу, потому что «Назначение вне раздела. Игнорирование». Я не знаю, что пошло не так. Сценарий, который я создал, изменил владельца на root. Если я запускаю его вручную, он работает, но systemd не запускает его как службу.
CrazyTux avatar
флаг us
Есть два возможных решения: рекомендуемое — исправить сервис. (Вы можете отправить сервис, который вы сделали, чтобы я мог взглянуть на него, пожалуйста, удалите ваши личные данные), другой предварительный, но работающий, - это использовать crontab для запуска скрипта.
Nicola avatar
флаг cn
Привет и спасибо, что вернулись ко мне. Вот как выглядит сервисный файл: ------------------------------------------------------------ Описание=iprules_service После=network.target Стартлимитинтервалсек=0 [Оказание услуг] Тип=простой Перезапустить = всегда Рестартсек=1 Пользователь=ник ExecStart=/usr/local/sbin/iprules.sh [Установить] WantedBy=многопользовательская.цель ------------------------------------ Файл *.sh работает просто отлично, потому что я могу запустить его вручную с помощью sudo без проблем. Я предпочитаю это решение, потому что оно более элегантно, чем crontab. Хоп, как-нибудь разберусь. Ты очень много
CrazyTux avatar
флаг us
теперь я отредактирую свой ответ и надеюсь, что это сработает для вас, я просто запускаю службу на своем vps, и она работает отлично.
Nicola avatar
флаг cn
ЭТО СРАБОТАЛО!! Большое спасибо за ваше терпение. Я твой должник.
Рейтинг:0
флаг cn

Вы определенно можете сделать это в Netplan. Я только что сделал это и подтвердил сохранение после перезагрузки. Официальный сайт Netplan Страница примеров показывает множество примеров этого.

Пример:

  1. Отредактируйте файл конфигурации вашего netplan (находится в /etc/netplan/)

  2. Найдите интерфейс, где вы хотите маршрут (например, eth0)

  3. Найдите раздел адресов

  4. Добавьте ключевое слово маршрута и сведения о маршруте в разделе адресов.

    маршруты:
       - по умолчанию
         через: 1.1.1.254
    
  5. Сохранить и закрыть

  6. Введите: sudo netplan generate (и нажмите Enter)

  7. Введите: sudo netplan apply (и нажмите Enter)

  8. Проверьте свой маршрут, пропинговав известный IP-адрес в целевой сети.

Zanna avatar
флаг kr
Было бы неплохо, если бы вы добавили более конкретные инструкции.

Ответить или комментировать

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