Как-то для нужд учебы понадобилось мне настроить статический ip на виртуалке Linux. “No problemo” – подумала я, уже привыкшая решать все проблемы с помощью гугла, мата и смекалки.

Так задача ощущалась в начале
Так задача ощущалась в начале

Интернет полон инструкций о том, как настроить статический ip на CentOS 7 (да, в рамках задания мне пришлось использовать конкретно этот дистрибутив, хоть он и вышел из моды) и я, не чуя подвоха, открыла nmtui и отредактировала нужные поля в соединении в точности, как указано в инструкции:

Вариант, указанный почти во всех мануалах
Вариант, указанный почти во всех мануалах

Возможно, опытные пользователи уже на этом шаге поняли, что пошло не так, но я-то новичок и еще не познала всех прелестей Linux, развернутого на виртуалке.

Сохранив установленные параметры, я вышла из nmtui, выполнила команду systemctl restart network и проверила пинги.

Сеть пропала. Не пинговалось вообще ничего и никак. Я полезла в гугл за вопросом «как чинить», но нашла комментарии в духе «надо проверить шлюз». Хорошо, шлюз, а как?

В тот момент мне, измотанной борьбой с соединением, не пришло в голову ничего лучше, чем откатить все изменения и через команду ip route show посмотреть, какой шлюз поставит NetworkManager при автоматической настройке. И бинго! - там был указан совершенно другой шлюз

Попавсь!
Попавсь!

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

В тот момент я узнала адрес шлюза, радостно воткнула его в nmtui и снова перезапустила сеть:

Все ближе к разгадке
Все ближе к разгадке

Теперь команда ping 8.8.8.8 выполнялась и пинг шел. Но при попытке пингануть что-то дальше 8.8.8.8, например google.com, вылазила ошибка «ping: google.com: Имя или служба не известны».

Смешанные чувства: с одной стороны, теперь работает хоть что-то, с другой – соединение до сих пор не работает.

Далее были много часов отладки и проверки всех возможных проблем, была подключена нейросеть:

  • Я проверила содержимое /etc/resolv.conf с помощью

    cat /etc/resolv.conf, но так как там был прописан nameserver 8.8.8.8 – на этом я успокоилась и подумала, что все хорошо (как же сильно я ошибалась…)

  • Проверила, какие DNS использует система с помощью

    systemd-resolve --status 2>/dev/null || nmcli dev show enp0s3 | grep DNS – и в выводе был прописанный мною 8.8.8.8

  • Проверила настройки хоста

    cat /etc/hosts - чисто

    grep hosts /etc/nsswitch.conf – все верно

    sudo iptables -L -n | grep 53 – порт 53 не заблокирован

  • Попинговала 8.8.8.8 (пингуется, зараза) и google (Имя или служба не известны)

  • При проверке DNS ручным запросом через

    nslookup google.com 8.8.8.8 - ошибка

    dig @8.8.8.8 google.com +short - ошибка

  • Слазила в firewalld (так делать не надо, вот вообще, только в самом крайнем случае). Сначала попыталась добавить разрешение для DNS

    sudo firewall-cmd --state

    sudo firewall-cmd --permanent --add-service=dns

    sudo firewall-cmd --reload

    Потом просто отключила

    sudo systemctl stop firewalld

    Перезагрузила соединение, после чего еще раз попробовала попинговать google. Не пингуется.

  • Отключила автоматический DNS от DHCP с помощью nmcli: sudo nmcli connection modify enp0s3 ipv4.ignore-auto-dns yes и перезагрузила соединение sudo nmcli connection down enp0s3 && sudo nmcli connection up enp0s3

    Снова попробовала попинговать гугл. Не пингуется.

  • На всякий случай добавила адресу все разрешения в iptables.

    sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT

    sudo iptables -A OUTPUT -s 192.168.1.100 -j ACCEPT

    И снова перезагрузка соединения и пинг гугл.

    Не пингуется.

    Итог: пинг 8.8.8.8 есть, а гугл все еще не пингуется. Круг замкнулся.

    Я поставила, а затем удалила system-resolved (использовав рабочее соединение, которое настроилось автоматически), обновила resolv.conf, снова и снова обновляла параметры соединения и перезагружала его. Я понимала, что проблема в почему-то неработающем DNS, но не могла ее локализовать.

    Смеркалось... На часах пробила полночь.

    В этот момент я сдалась и решив, что утро вечера мудренее, отправилась спать, намереваясь утром сдаться и отправиться к знакомому девопсу с покаянной.

Ну вы поняли, да?)
Ну вы поняли, да?)

Утро действительно оказалось мудренее вечера – в голове крутилось несколько фактов: команда nmcli dev show показывала полные настройки соединения, DNS не работает, но рабочий DNS наверно можно посмотреть в выводе этой команды, когда соединение настроено автоматически.

Уже при написании текста я попыталась нагуглить команду, которая покажет рабочие адреса DNS в Linux и не смогла. Можно посмотреть актуальные, настроенные в соединении. Если кто-то знает – буду очень признательна за апдейт.

Теория была незамедлительно проверена, были найдены расхождения:

Рабочие настройки (домен был замазан)
Рабочие настройки (домен был замазан)
Настройки при самостоятельной установке статического ip
Настройки при самостоятельной установке статического ip

Очевидно, что в работающей версии добавился указанный домен, а также указаны совершенно другие DNS-адреса. При добавлении к настроенному статическому ip указанных в рабочей версии DNS и домена – сеть заработала.

Итоговый путь от проблемы к решению занял 3 дня, отнял некоторое количество нервных клеток (теперь они спокойны навеки) и принес чувство глубокого удовлетворения от решенной проблемы.

Ну а у меня появился повод поделиться информацией с теми, кому она может оказаться полезна. Буду рада, если кому-то мой опыт сбережет нервы, силы и время.