Каждый компьютер в сети интернет нужно определённым образом идентифицировать. Раньше, каждый компьютер, подключённый к интернету, имел уникальный IP адрес, с помощью которого можно было к нему подключиться, сейчас же большинство домашних компьютеров спрятаны за NAT, а белые IP адреса есть только у серверов.
Все взаимодействие между компьютерами в сети выполняется по IP адресам. Это более актуально для серверов, но может быть полезно и для домашних компьютеров, и локальных сетей. В этой небольшой статье мы рассмотрим, как узнать IP Linux разными способами. Поговорим о том, как узнать внешний IP, выданный провайдером, и внутренний IP в вашей локальной сети.
Содержание статьи
- Немного теории
- Как узнать внутренний IP Linux
- Как узнать IP в локальной сети в Linux
- Как узнать внешний IP-адрес в Linux
- Выводы
Немного теории
Сначала давайте попытаемся понять, что такое IP-адрес, и как всё работает. Мы можем выделить три типа IP-адресов, с которыми вам придётся сталкиваться:
- Внутренний адрес (IP-адрес компьютера);
- Адрес в локальной сети;
- Внешний IP доступный во всём интернете.
Внутренний IP-адрес нужен для того, чтобы программы могли взаимодействовать между собой в пределах этого компьютера, используя сетевые протоколы. Например, так браузер может получить доступ к локальному web-серверу. Внутренний IP довольно часто используется в системных утилитах, и узнать его очень просто - он всегда одинаковый - 127.0.0.1.
С локальной сетью всё немного сложнее. Интернет, это не одноранговая сеть, где все компьютеры соединены между собой на одном уровне, а множество отдельных сетей, соединённых между собой с помощью маршрутизаторов. Если ваш компьютер подключен к интернету по проводу, то здесь у вас есть марштуризатор, к которому можно подключить несколько устройств. Например, компьютер, ноутбук и смартфон. Сеть роутера называется локальной и в этой сети у компьютера есть IP адрес, который вы можете использовать для доступа к нему из других устройств в этой сети. Но для провайдера и внешнего интернета у всех этих устройств будет один IP адрес - адрес роутера.
Теперь давайте разберемся с внешним IP адресом. Точно так же как вы подключаете несколько своих устройств в локальной сети, так и провайдер объединяет своих клиентов в локальную сеть и для внешнего интернета у них на всех один IP адрес. Так было сделано потому что с ростом популярности этой технологии свободные адреса скоро начали заканчиваться, и теперь уникальные IP имеют только серверы, а обычные пользователи размещаются провайдерами по несколько сотен на одном IP с помощью NAT. Этот IP адрес считается внешним.
Одно время, провайдеры раздавали пользователям динамические IP, которые были уникальными и менялись при перезагрузке роутера. По ним можно было получить доступ к компьютеру из интернета после небольшой настройки роутера, но потом начали использовать технологию NAT для того чтобы разместить много пользователей на одном адресе. Но это не большая проблема. Так компьютеры домашних пользователей находятся в большей безопасности, а если к ним нужно получить доступ то существуют такие сервисы как Ngrok, а также можно использовать VPN.
Технология NAT позволяет компьютеру подключиться к любому серверу в интернете и получить от него ответ, но инициировать подключение из интернет к такому компьютеру невозможно, поскольку фактически один IP принадлежит сотне компьютеров, и система просто не знает, к какому из них обращаются.
Как вы поняли, ваш домашний компьютер мог бы иметь внешний IP-адрес доступный всем, но это нецелесообразно как минимум по двум причинам. Во-первых, дорого, во-вторых, очень небезопасно. Поэтому подключение компьютера к интернету сейчас выглядит приблизительно так:
- Внешний и доступный всем IP, который принадлежит провайдеру и используется для выхода в интернет сотен пользователей;
- IP-адрес вашего роутера в локальной сети провайдера, той самой, с IP-адресом которой вы выходите в интернет. Он не доступен из интернета и, скорее всего, вам не понадобится;
- IP-адрес вашего компьютера в локальной (домашней) сети, созданной роутером, к которой вы можете подключать свои устройства. Именно он используется для взаимодействия между устройствами в локальной сети и отображается в информации о сетевом интерфейсе;
- Внутренний IP-адрес компьютера, недоступный извне и используемый только для внутренних коммуникаций в системе.
Теперь, когда вы немного начали ориентироваться в вопросе, давайте рассмотрим способы узнать свой IP Linux.
Как узнать внутренний IP Linux
Как я уже сказал, внутренний IP всегда одинаковый для каждого компьютера - 127.0.0.1, что справедливо не только для Linux, но и для Windows и других операционных систем. Вообще, все IP адреса от 127.0.0.1 до 127.255.255.255 привязаны к локальному сетевому интерфейсу и используются для взаимодействия с текущим компьютером.
Также к своему компьютеру можно обратиться по домену localhost. Вы можете убедится в этом, выполнив команду ping:
ping -c 3 localhost
Как узнать IP в локальной сети в Linux
Узнать IP компьютера в локальной сети тоже не очень сложно. Для этого вам не нужны никакие сервисы, вы можете просто посмотреть информацию о сетевых подключениях с помощью команды ip. Вот самый удобный способ это сделать:
ip -br a
Опция -br включает сокращенный режим вывода, а a - это сокращение от address, команды которая позволяет управлять сетевыми адресами. По синтаксису туда ещё желательно добавить команду show, но она и так используется по умолчанию. Вот так будет выглядеть полная команда:
ip --brief address show
Здесь выводится только список сетевых интерфейсов их состояние и IP адрес. Вот их описание:
- lo - локальный сетевой интерфейс, который всегда указывает на текущий компьютер;
- enp* - проводной сетевой интерфейс, расшифровывается как Enthernet PCI. Также может использоваться имя eth*.
- wlp* - беспроводной сетевой интерфейс WiFi, расшифровывается как Wireless PCI. Также может использоваться имя wlan*.
В данном случае проводной интерфейс называется enp3s0 и вы можете видеть его IP адрес в третьей колонке. Вы также можете получить IP для конкретного сетевого интерфейса. Например для enp0s3:
ip --brief address show enp0s3
Также можно отфильтровать только IP адрес с помощью awk:
ip --brief address show enp0s3 | awk '{print $3}' | cut -d'/' -f1
IP адреса в локальной сети должны находится в таких диапазонах:
- От 192.168.0.0 до 192.168.255.255
- От 10.0.0.0 до 10.255.255.255
- От 172.16.0.0 до 172.31.255.255
- От 100.64.0.0 до 100.127.255.255
Эти адреса зарезервированы для локальных сетей и в качестве публичных адресов использоваться не могут.
Вы также можете использовать устаревшую команду ifconfig. Но прежде её надо установить:
sudo apt install net-tools
Здесь отображается довольно много информации: MAC-адрес, маску сети и небольшую статистику по работе интерфейса. Сам IP адрес отображается после слова inet:
sudo ifconfig
Вы можете отфильтровать лишнюю информацию и вывести только IP-адреса:
sudo ifconfig | grep "inet"
Как узнать внешний IP-адрес в Linux
Для того чтобы узнать внешний IP адресе вы можете открыть специальный сайт, который посмотрит, с какого IP вы его открыли, и скажет его вам. Есть довольно много таких сайтов. Проще всего сделать это с помощью браузера, например, откройте сайт ifconfig.me:
Но это не всегда удобно. Лучше сделать это с помощью терминала. Просто используйте команду curl или wget. Сразу рассмотрим несколько таких сайтов, чтобы вы могли использовать любой понравившийся из них:
wget -qO- ifconfig.me
curl ifconfig.me
curl ipinfo.io/ip
curl ipecho.net/plain
curl icanhazip.com
curl https://ipecho.net/plain
curl ident.me
curl api.ipify.org
Чтобы не набирать длинную команду каждый раз, вы можетесоздать удобный алиас:
alias getip="curl ifconfig.me"
Хочу заметить, что если вы хотите узнать не внешний IP компьютера, а именно адрес роутера в сети провайдера, то такой способ не поможет. Вам нужно посмотреть в настройках роутера или попытаться сделать это через командный интерфейс роутера, так как это описано в предыдущем варианте.
Выводы
Теперь вы знаете, как узнать IP-адрес Linux, оказывается, это не так сложно, как могло показаться сразу. Вы ещё можете использовать утилиту hostname с опцией -I для получения всех сетевых адресов привязанных к вашему компьютеру, а также можете найти адрес IP адрес в графическом интерфейсе NetworkManager или с помощью его консольной утилиты nmcli. Но описанные в статье способы более универсальны и просты. А какой способ используете вы? Напишите в комментариях!
sudo то зачем для ifconfig?
В opensuse без sudo не работает.
Добрый день! А как насчёт команды curl ifconfig.me
curl ifconfig.co отвечает быстрей чем curl ifconfig.me
Вот еще варианты
curl icanhazip.com
curl myip.dnsomatic.com
curl ifconfig.me/ip
dig +short myip.opendns.com @resolver1.opendns.com
http://ifconfig.me/
Александр а что значить конечная часть конструкции в dig +short myip.opendns.com @resolver1.opendns.com. Он показывает неправильный айпишник, подозреваю ip днс сервера
Да, эта инструкция перестала работать. можно вычеркнуть
ifconfig | grep Bcast | awk '{print $2}'
результат addr:192.168.1.35
Я пытаюсь наладить связь между двумя одноплатниками с убунту. Перепробовал кучу примеров (Python Opencv) из интеренета и учебников - связи нет. Никак нет. До это с Ethernet дел не имел где-то туплю. Если я ставлю локальные адреса - это же внутри компьютера - он судя по всему внутрь к себе и лезет и говорит connection refused (если я отключаю сетку тоже самое говорит - значит даже не стучится на второй(сервер)...компы одинаковые...убунта одинаковая - адреса одинаковые...Может одному из них как-то забить оригинальный адрес? Как они друг-друга различают?
Для связи двух компьютеров друг с другом следует использовать кабель с так называемой "перекрёстной" разводкой (cross-over).
Только что столкнулся с весёлой проблемкой - unifi тарелка висит на моем контроллере а внешний ip я забыл. Unifi на Debian но apt не работает и вот что я придумал - временно открыл на своем микротике 22 порт и попробовал с консоли тарелки подключится к себе с неправильным паролем - и сразу в логах увидел попытку подключения с внешним IP 🙂 Такое проканает, если получится через веб морду открыть терминал на тарелке, костыль наверное, но задачу решило )
Это давно устарело, лет так 10 назад. Современные адаптеры используют прямую разводку, а 7 лет назад адаптеры умели распознавать прямое и перекрестное подключение. Из-за непоняток сейчас возникают проблемы.
Отличная статья, искал способ посмотреть внешиний адрес, еще и подсмотрел как alias сделать
Проблема такая.
Есть локальная сеть. ПК в локальной сети под ОС Debian 12 (Bookworm).
Роутер (TL-WR1042ND) имеет статический адрес и для локальной сети используется DHCP.
nmcli device status
DEVICE TYPE STATE CONNECTION
enp3s0 ethernet подключено Wired connection 1
lo loopback подключено (внешнее) lo
wlp6s0 wifi подключено DIP Bldg7 room 314
p2p-dev-wlp6s0 wifi-p2p отключено --
====================================================================
ip route list default
default via 192.168.0.1 dev enp3s0 proto dhcp src 192.168.0.110 metric 100
default via 192.168.0.1 dev wlp6s0 proto dhcp src 192.168.0.107 metric 600
====================================================================
Метрику задал, так как хоть приоритет должен задаваться при загрузке
(проводное первое), но соединение в браузере не происходило :
Хмм. Нам не удаётся найти этот сайт.
Мы не можем подключиться к серверу linux-faq.ru.
Если вы ввели правильный адрес, вы можете:
Повторить попытку позже
Проверить подключение к сети
Проверить, что Firefox имеет разрешение на доступ в Интернет (возможно, вы
подключены, но находитесь за межсетевым экраном).
Если отключаю один из сетевых интерфейсов, то все ОК. Почему не работает - не
пойму.
Также не работает передача файла по scp.
Интересно также, что не могу из внешней сети подключиться по проводному интерфейсу по ssh. А если отключаю "провод", то по wlan соединяюсь. Хоть переадресация сделана в роутере абсолютно одинаково для обоих интерфейсов:
ID Порт сервиса Внутренний порт IP-Адрес Протокол Состояние Изменить
7 2110 22 192.168.0.110 Все Включено Редактировать/Удалить
9 2107 22 192.168.0.107 Все Включено Редактировать/Удалить
Заранее благодарен за помощь. Дмитрий.
hostname -I
(i заглавная)
Доброго времени суток! В статье говорилось про два внешних ip в итоге. Один получается провайдера через которого выходят в интернет сотни пользователей и я так понял ip которого мы можем увидеть на предоставленных в статье сайтах и ip роутера. Поправьте если не прав.
И все бы понятно. Но в конце статьи в абзаце перед Выводом такая сбивающая формулировка "если вы хотите узнать не внешний IP компьютера" . Как будто внешний компьютера мы уже узнали, хотя в статье все время говорилось что сейчас ip компьютера внешнего как такогого для использования нет. Тут подразумевался ip провайдера?