Как настроить статический IP-адрес и почему
Обратите внимание! Я не говорю о других способах настройки сети, таких как NetworkManager. Любое устройство, упомянутое в /etc/network/interfaces
, не затронуто NM
Чтобы иметь возможность общаться через IP-сеть (IPv4 и IPv6), компьютер должен знать, какой у него IP-адрес. Поэтому для address
того, чтобы сообщить компьютеру, нужна директива.
Когда компьютер затем хочет поговорить с другим компьютером, он использует IP-адрес этих компьютеров, чтобы проверить, находится ли этот компьютер в той же сети, локальной сети. Если это так, компьютер может напрямую связываться с другим компьютером.
Так как же компьютер узнает, когда он общается с компьютером в той же локальной сети? При использовании сетей netmask
, где сетевая часть адреса установлена на единицы, а часть хоста установлена на нули. Таким образом, выполняя побитовую операцию И между каждым битом в IP-адресе и маской сети, мы получим сетевой адрес IP-адреса, где часть узла равна нулю. Поэтому, если мы сделаем это на IP-адресе компьютеров и IP-адресах других компьютеров, мы получим каждый сетевой адрес. Если они равны, это означает, что компьютеры находятся в одной сети и могут напрямую общаться друг с другом.
Если сетевые адреса не равны, они находятся в разных локальных сетях и не могут напрямую взаимодействовать друг с другом. Затем компьютер должен использовать специальный компьютер, который подключен к другим локальным сетям. Этот компьютер является маршрутизатором (который также может иметь брандмауэр и NAT). Поэтому, когда компьютер хочет общаться с другими компьютерами за пределами локальной сети, ему нужно знать адрес этого компьютера, который установлен с помощью gateway
директивы. Если другой интерфейс уже установил gateway
значение, вы не должны и не должны устанавливать другую директиву шлюза для этого интерфейса. В gateway
директиве устанавливает маршрут по умолчанию для компьютера, так что вам нужно только один для IPv4 и только один для IPv6 на каждой машине. Этот сетевой адрес может быть установлен вручную с помощью network
директивы.
Иногда компьютер хочет общаться со всеми компьютерами в локальной сети, и он использует широковещательный адрес. Этот адрес прослушивается всеми компьютерами в одной локальной сети. По сути, это то же самое, что и сетевой адрес, за исключением того, что часть хоста - это не все нули, а все единицы. Этот широковещательный адрес устанавливается директивой broadcast
в интерфейсе.
network
Адрес интерфейса требуется рассчитывать только один раз и обычно рассчитывается правильно из этого address
и netmask
директив. То же самое с broadcast
адресом. Так что вам не нужно их устанавливать. Фактически, если вы установите одно или оба неправильных значения, вы можете потерять соединение с Интернетом и другими компьютерами в вашей локальной сети. Поэтому, если у вас нет странных значений, позвольте компьютеру рассчитать их для вас.
Таким образом, минимальные статические настройки или раздел /etc/network/interfaces
могут выглядеть следующим образом для устройства eth1
в частной сети:
iface eth1 static inet
address 192.168.44.10
netmask 255.255.255.0
gateway 192.168.44.1
Как работает разрешение имен и как оно связано с DNS.
Доменные имена используются для преобразования между легко читаемыми и запоминающимися доменными именами и компьютерами, которые не так легко запомнить IP-адрес, упомянутый выше. Это называется разрешением имени .
Обычно это контролируется файлом /etc/nsswitc.conf
и строкой, начинающейся с hosts:
. Если вы попросите компьютер подключиться к компьютеру my.example.com
, он изучит этот файл и попытается определить IP-адрес по имени my.example.com
. Этот файл на самом деле не отвечает на вопрос «какой IP-адрес у my.example.com», он просто сообщает компьютеру, где он может найти ответ.
Обычно он пытается /etc/hosts
сначала файл для статических локальных имен, затем avahi mDNS
для динамических локальных имен, а затем ресовлер DNS-имени домена, чтобы получить имя из Интернета.
Если некоторые из них не отвечают на ваши вопросы, это может показаться, что компьютер застрял на некоторое время. Так что, если вы получите это, сначала проверьте разрешение имени.
Таким образом, добавив статические адреса, вы можете просто добавить его в свой /etc/hosts
файл. Кстати, если у вас есть статический адрес, вам, вероятно, следует изменить IP-адрес вашей машины на ваш IP-адрес, а не по умолчанию 127.0.1.1
(который находится в локальной сети, где находится localhost, 127.0.0.1
). Это работает нормально только для клиентов, а не для серверов.
Динамические адреса, которые вы получаете от машин Linux с avahi
пакетом и от машин Apple (и MS Windows с iTunes?). Это обрабатывается «магией», и вам не нужно это исправлять.
DNS используется для доступа в Интернет, и вам нужно сообщить компьютеру, где находятся те DNS-серверы, которые вы хотите использовать, какой IP-адрес использовать и какой у вас DNS-домен по умолчанию.
Это делается в файле /etc/resolv.conf
и может быть статически настроено. Это не очень хорошо работает в нашем не столь статичном мире, поэтому обычно у вас есть пакет с именем resolvconf
install. Это позволит вам настроить эти параметры в /e/n/interfaces
файле.
Поэтому, если мы предполагаем, что мы хотим добавить один из DNS-серверов Googles, 8.8.8.8
а также DNS-сервер вашего интернет-провайдера 192.0.2.1
и домен вашего my.example.org
домена по умолчанию, вы просто отредактируете /etc/network/interfaces
файл и добавите эти две строки в раздел для статического устройства.
dns-nameservers 8.8.8.8 192.0.2.10
dns-search my.example.org
Вы также можете заметить, что DNS-распознаватель будет использовать не более трех DNS-серверов. Пожалуйста, посмотрите это на man
странице resolv.conf
. Как обычно, вы можете использовать команду man nsswitch.conf
, man resolv.conf
и man resolvconf
для получения дополнительной информации.
Также обратите внимание, что я использую домен example.com и example.org и IP-сеть 192.0.2.0/24 для DNS-сервера ISP. Они явно определены для использования в примерах. См http://example.com/ или http://tools.ietf.org/html/rfc2606 и rfc5735
Как вы тогда проверяете, что это работает?
Вы можете сделать это разными способами, но я обычно использую
getent hosts my.test.com
проверить всю настройку для разрешения имен. Если я просто хочу проверить, работает ли DNS, я использую одну из следующих команд:
host my.test.com
dig my.test.com
Но помните, что те только проверяют DNS через настройки в /etc/resolv.conf
файле, а не /etc/nsswitch.conf
часть. Это может быть то, что вы хотите, или нет.