LINUX.ORG.RU
ФорумAdmin

Как в скрипте настроить IP и DNS по DHCP без NetWorkManager

 ,


0

3

Как-то вроде тривиально, но напрочь забыл за несколько лет.

Сейчас интернет на одной из машин поднимается вручную через команды, явно прописывающие адреса. Примерно так (два IP на один порт)

ip addr add 10.1.2.3/24 dev enp5s0
ip addr add 1.2.3.4/255.255.255.240 dev enp5s0 label enp5s0:1


ip route del 0/0
ip route add default via 1.2.3.77 dev enp5s0

Что с dhcp будет? Что-то вроде

dhclient enp5s0 -v

Или как? Откуда адрес шлюза брать для route? А как DNS получить, они тоже сейчас явно пихаются, может и неправильно, но так вышло и работает вроде:

mkdir /var/run/NetworkManager
chmod a+r /var/run/NetworkManager
cp -f /home/homeuser/save/resolv.conf.1 /var/run/NetworkManager/resolv.conf
chmod a+r /var/run/NetworkManager/resolv.conf
ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

Вот все это когда-то уже чуть не 10 лет назад настраивал и сейчас как всегда быстро надо, чтобы тоже самое, но через dhcp.

★★★★★

Или как? Откуда адрес шлюза брать для route?

Ну ты хоть основы почитай… default gw отдаётся в 99% dhcp-сервером, как и dns, т.е. dhclient его отрабатывает и прописывает сам.

resolv.conf тоже формируется dhclient (либо напрямую, либо через resolvconf, либо через systemd-resolved)

Dimez ★★★★★
()
Ответ на: комментарий от Dimez

Ну ты хоть основы почитай… default gw отдаётся в 99% dhcp-сервером, как и dns,

Это я знаю, мне не совсем понятно куда он его прописывает, в общем что мне надо в скрипте записать, чтобы заработало через dhcp

praseodim ★★★★★
() автор топика
Ответ на: комментарий от Dimez

Что-то не могу разобраться. Может в трех соснах запутался :))

Нет ли такой опции, чтобы dhclient просто сбрасывал в указанный файл имена DNS, а в другой файл IP-адрес и шлюз? Или как-то еще, чтобы просто тупо без мутных настроек systemd-resolved или чего подобного вставить его выхлоп в ip addr add и ip route add

praseodim ★★★★★
() автор топика
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от Dimez

А нельзя ли как-то сделать, чтобы сам не вызывал?

Мне надо на один сетевой интерфейс повесить два IP-адреса. Один по dhcp для одной сетки, другой - статический для другой сетки.

praseodim ★★★★★
() автор топика

нормальный dhcp-клиент (isc dhclient) умеет править /etc/resolv.cof и добавлять DGW.

Там есть скрипт (/sbin/dhclient-script) в котором можно добавить все что хочешь через хуки.

exit_with_hooks выполняется в самом начале и конце каждого вызова

exit_with_hooks() {
    exit_status=$1

    # Source the documented exit-hook script, if it exists
    if ! run_hook /etc/dhclient-exit-hooks; then
        exit_status=$?
    fi

    # Now run scripts in the Debian-specific directory.
    if ! run_hookdir /etc/dhclient-exit-hooks.d; then
        exit_status=$?
    fi

    exit $exit_status
}

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 2)
Ответ на: комментарий от Dimez

А как? Реально я давно настроил подключение через сначала ifconfig, потом ip add addr и забыл об этом. А там где не забыл, был просто NetworkManager и его конфигуратор.

В идеале бы пара простых команд с dhclient, которые просто выдают нужные данные, которые можно куда-то пристроить. Неужели нельзя настолько просто?

praseodim ★★★★★
() автор топика
Ответ на: комментарий от praseodim

Открой dhclient-script и все поймёшь.

https://kb.isc.org/docs/isc-dhcp-443-manual-pages-dhclient-script в помощь.

https://kb.isc.org/docs/isc-dhcp-41-manual-pages-dhclientconf

там есть про алиасы

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 2)
Ответ на: комментарий от praseodim

Реально я давно настроил подключение через сначала ifconfig, потом ip add addr и забыл об этом.

Какой дистр?

В идеале бы пара простых команд с dhclient, которые просто выдают нужные данные, которые можно куда-то пристроить.

Это плохой вариант, костылевелосипедный. Просто заполни правильно /etc/network/interfaces (согласно докам и ману), вариант «динамика+алиас со статикой» ЕМНИП нормально работает. Посмотреть мне никак, в отпуске, с телефона.

Dimez ★★★★★
()
Ответ на: комментарий от praseodim

Вредный совет:

Делаем бридж из enp5s0 и veth

ip li add br0 type bridge forward_delay 1 vlan_filtering 0
ip li set dev enp5s0 master br0
ip li set dev enp5s0 up
ip li set dev br0 up

ip li add benp5s0 type veth peer name cenp5s0
ip li set dev benp5s0 up
ip li set dev benp5s0 master br0
ip li set dev cenp5s0 up

На бридже (br0) запускаем dhcp клиента, на cenp5s0 ставим статику

Можно 2 интерфейса типа macvlan прицепить к enp5s0 и на них разными способами задать ip.

ip link add vlan1 link enp5s0 type macvlan mode bridge
ip link add vlan2 link enp5s0 type macvlan mode bridge

Но лучше прочитать man dhclient.conf там в конце есть пример для alias

vel ★★★★★
()
Ответ на: комментарий от Dimez

Какой дистр?

Debian

Это плохой вариант, костылевелосипедный. Просто заполни правильно /etc/network/interfaces (согласно докам и ману), вариант «динамика+алиас со статикой» ЕМНИП нормально работает.

Ok. Надо будет разобраться все же, хотя неохота =)

Я еще как-то настолько глубоко прибил NetworkManager, что даже sysctl enable NetworkManager не привел к его нормальной работе - не появляется конфигурилка, хотя значок в трее есть, но при щелчке по нем маленькое пустое окошко без ничего.

praseodim ★★★★★
() автор топика
Ответ на: комментарий от vel

Спасибо. Пока dhcp не пробовал (его поднимут на днях), но заработало взамен текущей конфигурации.

Еще вопрос, dhcp сообщает только динамику, статику надо отдельно прописывать будет?

praseodim ★★★★★
() автор топика
Ответ на: комментарий от praseodim

dhcp сообщает только динамику, статику надо отдельно прописывать будет?

Еще раз медленно: man dhclient.conf в конце есть пример

request subnet-mask, broadcast-address,  routers,
        domain-name, domain-name-servers, host-name;
require subnet-mask, domain-name-servers;

alias {
        interface "enp5s0";
        fixed-address 1.2.3.4;
        option subnet-mask 255.255.255.240;
}

Запускать «dhclient enp5s0»

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 3)