Настройка статического ip на CentOS 7 для чайников
Как-то для нужд учебы понадобилось мне настроить статический 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 ручным запросом через
nslookupgoogle.com8.8.8.8- ошибкаdig @8.8.8.8google.com+short- ошибкаСлазила в firewalld (так делать не надо, вот вообще, только в самом крайнем случае). Сначала попыталась добавить разрешение для DNS
sudo firewall-cmd --statesudo firewall-cmd --permanent --add-service=dnssudo 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 ACCEPTsudo 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 и не смогла. Можно посмотреть актуальные, настроенные в соединении. Если кто-то знает – буду очень признательна за апдейт.
Теория была незамедлительно проверена, были найдены расхождения:


Очевидно, что в работающей версии добавился указанный домен, а также указаны совершенно другие DNS-адреса. При добавлении к настроенному статическому ip указанных в рабочей версии DNS и домена – сеть заработала.
Итоговый путь от проблемы к решению занял 3 дня, отнял некоторое количество нервных клеток (теперь они спокойны навеки) и принес чувство глубокого удовлетворения от решенной проблемы.
Ну а у меня появился повод поделиться информацией с теми, кому она может оказаться полезна. Буду рада, если кому-то мой опыт сбережет нервы, силы и время.