Псевдоним IP потерян при изменении основного IP

Никто. Заставьте их использовать sudo таким образом, все команды корневого уровня зарегистрированы и относятся к определенному человеку.

0
задан 6 November 2013 в 16:47
1 ответ

Решение простое: прекратите использовать доисторический ifconfig . Он устарел и использует устаревшие API ioctl. Вы попадаете на уровень совместимости ядра, который пытается получить информацию, которую ifconfig и route не предоставляет.

Используйте ip из ] iproute2 пакет. Это то, что в любом случае делает современный ifupdown (см. ifup -v eth0 , чтобы понять, о чем я говорю).

ip и rtnetlink имеют встроенные возможности для добавления несколько IP-адресов для интерфейса, без использования огромных устаревших хаков, таких как псевдонимы интерфейсов, которые не являются ни интерфейсами, ни псевдонимами.

Да, и между прочим: современные ifupdown должны поддерживать это:

auto eth0
iface eth0 inet static
    address 192.168.3.75
    netmask 255.255.255.0
    gateway 192.168.3.0
iface eth0 inet static
    address 192.168.3.111
    netmask 255.255.255.0

И он должен поступать правильно. Чтобы убедиться в этом, проверьте с помощью ifup -v eth0 .


Почему уровень совместимости нарушается? Все просто. Подумайте, что пользователь ожидает от системы при запуске ifconfig eth0 192.0.2.42 :

  • Хочет ли пользователь добавить IP-адрес 192.0.2.42 в список доступных адресов?
  • пользователь хочет сбросить существующий адрес (а) интерфейса, чтобы он имел только адрес 192.0.2.42?

Иногда пользователю нужен первый вариант. Иногда требуется второй вариант (например, при полном изменении конфигурации). Но нет определенной семантики для SIOCSIFADDR ioctl.

С rtnetlink нет двусмысленности: вы управляете списком адресов с разными типами (IPv4, IPv6 ...) и используете RTM_NEWADDR для добавления адреса, RTM_DELADDR для удаления существующего адреса (если вы указываете один) или всех адресов интерфейса.

И ip - тонкая оболочка для API rtnetlink:

  • Используйте ip addr add 192.168 .3.111 / 24 dev eth0 для добавления адреса.
  • Используйте ip addr del 192.168.3.111/24 dev eth0 для удаления адреса. Операция завершится неудачно, если адрес не существует.
  • Используйте ip -4 addr flush dev eth0 , чтобы удалить все адреса ipv4.

Таким же образом можно управлять адресами IPv6. Это довольно удобно, учитывая, что наличие нескольких адресов IPv6 на интерфейсе - нормальное явление.

111/24 dev eth0 для добавления адреса.
  • Используйте ip addr del 192.168.3.111/24 dev eth0 для удаления адреса. Операция завершится неудачно, если адрес не существует.
  • Используйте ip -4 addr flush dev eth0 , чтобы удалить все адреса ipv4.
  • Таким же образом можно управлять адресами IPv6. Это довольно удобно, учитывая, что наличие нескольких адресов IPv6 на интерфейсе - нормальное поведение.

    111/24 dev eth0 для добавления адреса.
  • Используйте ip addr del 192.168.3.111/24 dev eth0 для удаления адреса. Операция завершится неудачно, если адрес не существует.
  • Используйте ip -4 addr flush dev eth0 , чтобы удалить все адреса ipv4.
  • Таким же образом можно управлять адресами IPv6. Это довольно удобно, учитывая, что наличие нескольких адресов IPv6 на интерфейсе - нормальное поведение.

    5
    ответ дан 4 December 2019 в 11:29

    Теги

    Похожие вопросы