Как установить dns-серверы имен в ubuntu 18.04

Зачем устанавливать vpn на Linux

Для пользователей Linux, желающих скрыть IP-адрес, у нас есть отдельная статья, где мы пошагово рассказываем, как установить впн на Linux. Скажем сразу – мы считаем установку vpn обязательным условием безопасности вашего компьютера. Каждый день вы посещаете десятки сайтов, оставляя на них ваши данные, которые становятся доступными администраторам. Имея на руках ваш IP, вам могут как запретить доступ к ресурсам, так и использовать его для проникновения уже на ваш компьютер, если вы чем-то заинтересуете злоумышленников. Большую опасность несет в себе и работа с устройства Linux в незащищенных wi-fi сетях. Никогда не решайте важные финансовые и рабочие вопросы, подключившись к публичному wi-fi без защиты впн-программы!

Интернет-провайдеру тоже ни к чему знать, где вы бываете и что там делаете. Vpn для Linux поможет зашифровать данные и скроет от глаз провайдера посещаемые вами сайты. Таким образом, соединяясь через впн-серверы, вы сможете без проблем заходить даже заблокированные вашим провайдером (к примеру, по запросу Роскомнадзора) интернет-ресурсы. То же и с блокировкой по географическому положению – youtube, Netflix, другие подобные ресурсы очень любят прятать самые интересный контент от неугодных им стран. Но с впн на Linux эти запреты не для вас.

Про установку vpn на Linux читайте здесь, а мы лишь напомним, как включить openvpn на Linux, если он уже установлен, и как отключить, если вы готовы вернуться к своему реальному IP.

Подключаемся к выбранному конфигу openvpn, указав в –config путь до файла конфигурации необходимого сервера:

n

Чтобы проверить, что IP-адрес сменился, введите:

Вы также можете зайти на сайт whoer.net и проверить ваш IP-адрес и другие параметры безопасности в сети.

Чтобы отключить vpn в Linux:

Обратите внимание на то, что vpn-подключение может идти по TCP или UDP-протоколу. О разнице между ними и том, какой выбрать в каком случае, вы можете подробно прочесть здесь, скажем лишь, что UDP немного более быстрый, хоть и не такой надежный

А как отредактировать ваши openvpn-конфиги для Linux и сменить протокол, мы показываем в видео-ролике на ютьюб Меняем TCP на UDP в OpenVPN. Также вы можете при редактировании конфигов отключить некоторые из IP-адресов страны, оставив только необходимые вам. Как это сделать, упоминается в видео Как использовать Whoer VPN в клиенте OpenVPN.

Возможно, вам удобнее будет подключать vpn на Linux через графическое приложение GNOME. Как установить его смотрите в видео Как установить графическое приложение VPN на Linux.

Как установить статический IP

Чтобы подлкючиться к другому компьютеру через Ethernet нужно в Windows выставить
параметры адаптера через контольную панель. То же самое нужно было сделать и
в Linux.

Для этого нужно выполнить команду

sudo vi /etc/network/interfaces

И добавить туда

Обратите внимание, что gateway не указан.

И перезапустить сеть

/etc/init.d/networking restart

или

sudo service networking restart

Второй вариант проще запомнить, но, чтобы он заработал
нужно наличие service

Теперь если у Вас установлен SSH можно зайти на компьютер с Linux по ssh с помощью

или

Если нужно установить SSH выполните

sudo apt install openssh-server

sudo apt-get install openssh-client

Как подготовиться к переходу на Linux

1. Создайте загрузочную флешку с понравившейся сборкой операционной системы по инструкции выше.

2. Поищите в перечне приложений Linux аналоги нужных программ. Одним из лучших видеоплееров для платформы считается VLC, самый всеядный аудиоплеер Audacious, а графический редактор – GIMP. Офисный пакет может заменить LibreOffice, а роль основного браузера займет Chromium или Firefox.

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

3. Будьте готовы к тому, что какой-то из компонентов компьютера не будет распознан операционной системой. Все решается поиском и установкой необходимых драйверов. “Нагуглить” способ решения проблемы просто, если есть интернет.

Иногда после установки Linux отказывается работать Wi-Fi, что делает затруднительным поиск решения. Вот, например, инструкция по установке драйверов для сетевых кар Broadcom.

Придется использовать второй компьютер или подключать ноутбук к роутеру через патч-корд, если заранее не загрузите нужные пакеты.

4. Определитесь с разбивкой накопителя на разделы. Лучше оставить физический или логический диск с операционной системой Windows. Возможно, вы захотите выделить место для хранения файлов и данных или раскроить пространство по своему усмотрению.

Разбить накопитель можно как из Windows, так и во время установки Linux.

5. Используйте имеющуюся флешку для установки полноценной операционной системы.

Тестирование клиентов

Используйте для проверки того, могут ли ваши клиенты отправлять запросы вашим серверам доменных имен. У вас должна быть возможность сделать это для всех клиентов, которые были настроены и находятся в доверенном ACL.

Для клиентов CentOS вам может потребоваться установка утилиты с помощью следующей команды:

Мы можем начать выполнять прямой просмотр.

Прямой просмотр

Например, мы можем выполнить прямой просмотр для получения IP-адреса host1.nyc3.example.com с помощью следующей команды:

Запрос “host1” расширяется до “host1.nyc3.example.com”, потому что опция задана для вашего частного субдомена, а запросы DNS будут пытаться просмотреть этот субдомен перед поиском по всему хосту. Результат описанной выше команды будет выглядеть следующим образом:

Теперь мы можем проверить обратный просмотр.

Обратный просмотр

Чтобы протестировать обратный просмотр, отправьте DNS-серверу запрос на частный IP-адрес host1:

Результат будет выглядеть следующим образом:

Если все имена и IP-адреса будут передавать правильные значения, это означает, что ваши файлы зоны настроены надлежащим образом. Если вы получите неожиданные значения, обязательно проверьте файлы зоны на вашем основном DNS-сервере (например, и ).

Поздравляем! Ваши внутренние DNS-серверы настроены надлежащим образом! Теперь мы перейдем к сохранению записей зоны.

Как узнать свой ip-адрес

Чтобы узнать ip-адрес системы можно выполнить следующие команды:

ifconfig | grep inet
    inet addr:93.170.169.118  Bcast:93.170.169.255  Mask:255.255.254.0
    inet6 addr: fe80::5054:ff:fe8b:f117/64 Scope:Link
    inet addr:127.0.0.1  Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host

ip addr | grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 93.170.169.118/23 brd 93.170.169.255 scope global ens3
    inet6 fe80::5054:ff:fe8b:f117/64 scope link 

На данный момент команда ifconfig является хоть и устаревшей, но еще работающей командой (В CentOS требуется установить пакет net-tools). Начиная с ядра версии 2.2 ей на смену пришел пакет iproute2, состоящий из утилит: ip, tc, ss.

Маршруты blackhole

С помощью маршрутов можно не только отправить пакеты на определенный шлюз, но и просто избавиться от ненужных пакетов. Маршрутизация срабатывает до межсетевого экрана, и проверка адреса выполняется быстрее.

Зараженные хосты шлют трафик к контроллеру ботнета по адресу 192.0.2.10? Просто добавьте такой маршрут:

1 $ip route add blackhole192.0.2.10/32

Теперь трафик к 192.0.2.10 ядро будет сразу отправлять в
/dev/null. Кроме blackhole, есть и другие виды маршрутов, которые отличаются действиями ядра. Их можно использовать, чтобы точнее сообщить клиенту, что происходит, или для эмуляции разных ситуаций в сети.

  • blackhole — уничтожить пакет и ничего не делать;
  • prohibit — уничтожить пакет и отправить клиенту ICMP host prohibited;
  • unreachable — уничтожить пакет и отправить клиенту ICMP host unreachable;
  • throw — уничтожить пакет и отправить клиенту ICMP net unreachable.

В маршрутизаторах BGP у маршрутов blackhole есть и более интересное применение, но это другая история.

DNS records types

The database files consist of record types like SOA, NS, A, PTR, MX, CNAME, and TXT.

So let’s start with each record type and see how we can configure it.

SOA: Start of Authority Record

The SOA record describes the site’s DNS entries with the following format:

example.com.      86400      IN      SOA      ns1.example.com.      mail.example.com.      (

2017012604 ;serial

86400 ;refresh, seconds

7200 ;retry, seconds

3600000 ;expire, seconds

86400 ;minimum, seconds

)

The first line starts with the domain example.com. and ends with a period. Which is the same as the zone definition in /etc/named.conf file.

Keep in mind that DNS configuration files are extremely picky.

The IN word means Internet record.

The SOA word means Start of Authority record.

The ns1. example.com. is the domain’s name server.

Line 2 is the serial number, we use it to tell the name server about the file update time, so if you make a change to the zone data, you have to increment this number. The serial number has the format YYYYMMDDxx where xx is starting from 00.

Line 3 is the refresh rate in seconds. How often secondary DNS servers should query the primary server to check for updates.

Line 4 is the retry rate in seconds. This is the time that the secondary DNS server takes for waiting after trying to connect to the primary DNS server and cannot reach it. The specified number of retry seconds.

Line 5 is the expire directive. If the secondary server cannot connect to the primary server for an update, it should discard the value after the specified number of seconds.

Line 6 tells the caching servers can’t connect to the primary DNS server; they wait before expiring an entry, this line defines the wait time.

NS: Name Server records

You can use the NS record to specify the name servers for a zone. The NS records are like this:

IN           NS         ns1.example.com.

IN           NS         ns2.example.com.

You don’t have to create two NS records, but we prefer to have backup name servers.

A and AAAA: address records

The A record maps the hostname to an IP address:

support IN          A             192.168.1.5

If you have a host at support.example.com on address 192.168.1.5, you can type like the above example.

Note: we wrote the host without a period.

PTR: pointer records

The PTR record is for doing the reverse name resolution, you give an IP address, and it returns the hostname.

This is the opposite of what A record does.

192.168.1.5        IN            PTR        support.example.com.

Here we type the full hostname with the trailing period.

The MX record tells about the mail server records.

example.com.   IN           MX         10           mail

CNAME: Canonical Name Records

CNAME records are like shortcuts for hostnames.

Suppose you have a site that has a hostname of whatever-bignameis.example.com, and since the system is a web server, an alias of www or CNAME record can be created for the host.

So you can create a CNAME record to make the name www.example.com:

whatever-bignameis      IN           A                    192.168.1.5

www                     IN           CNAME                whatever-bignameis

The first line tells the DNS server about the location of the alias; the second line creates the alias that points to www.

TXT records

You can put any text on TXT records like your contact information or any other information you want the people to know when they query your DNS server.

You can write TXT records like this:

example.com.   IN           TXT         " YOUR INFO GOES HERE"

Also, you can use the RP record to put the contact information.

example.com.   IN           RP           mail.example.com.         example.com.

Настройка службы systemd-resolved

В Ubuntu Server эта служба уже установлена и запущена сразу после установки операционной системы. Но если это не так, установить ее несложно:

# apt install systemd-resolved

Следующим шагом будет правка файла — находим строку, которая начинается с :

# nano /etc/nsswitch.conf
passwd:         compat systemd
group:          compat systemd
shadow:         compat
gshadow:        files

hosts:          files resolve dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis

Эта строка отвечает за последовательность обращений приложения к системным компонентам с целью резолвинга доменного имени. В данном случае сначала программа заглянет в файл , затем обратиться к демону , а потом — к DNS серверам.

Осталось сообщить ip-адреса DNS-серверов, к которым следует обращаться для резолвинга:

# nano /etc/systemd/resolved.conf
# сервера DNS от Cloudflare
DNS=1.1.1.1 1.0.0.1
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

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

# ln -svi /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

В файле указан один-единственный сервер :

$ cat /run/systemd/resolve/stub-resolv.conf
nameserver 127.0.0.53
option edns0

Кроме того, можно создать символическую ссылку на . Этот файл содержит DNS-сервера, полученные от DHCP-сервера и из файла конфигурации . В этом случае локальный кеширующий сервер не используется, что замедлит резолвинг.

# ln -svi /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ cat /run/systemd/resolve/stub-resolv.conf
nameserver 1.1.1.1 # из файла конфигурации /etc/systemd/resolved.conf
nameserver 1.0.0.1 # из файла конфигурации /etc/systemd/resolved.conf
nameserver 8.8.8.8 # этот DNS-сервер получен от DHCP-сервера сети
# Too many DNS servers configured, the following entries may be ignored.
nameserver 8.8.4.4 # этот DNS-сервер получен от DHCP-сервера сети

Как видите, у меня DNS-серверов получилось слишком много, так что последняя запись может быть проигнорирована. Все готово, остается только разрешить запуск службы при загрузке системы, если это еще не было сделано:

# systemdctl enable systemd-resolved
# reboot

Настройка сети с помощью Iproute2

Актуально для Debian 9 и выше.

Чтобы получить список интерфейсов нужно воспользоваться командой

ip a

На выходе будет что-то похожее на

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 30:f9:ed:d9:ea:d3 brd ff:ff:ff:ff:ff:ff
inet 192.0.2.131/24 brd 192.0.2.255 scope global enp3s0
valid_lft forever preferred_lft forever
inet6 fe80::32f9:edff:fed9:ead3/64 scope link
valid_lft forever preferred_lft forever
3: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether b8:76:3f:f5:c4:1f brd ff:ff:ff:ff:ff:ff
inet 192.168.43.4/24 brd 192.168.43.255 scope global dynamic noprefixroute wlp1s0
valid_lft 2800sec preferred_lft 2800sec
inet6 fe80::ba76:3fff:fef5:c41f/64 scope link noprefixroute
valid_lft forever preferred_lft forever

1: Первый интерфейс это
lo
он направлен на локальную машину и имеет IP
127.0.0.1/8
2: Второй интерфейс
enp3s0 это моё поключение к по Ethernet к другому ПК.

В этом примере компьютер с Debian (1) соединён с компьютером
с

Windows

(2) напрямую через Ethernet кабель

Через это подключение я захожу на комп номер 1 по SSH.

IP компьютера с Debian вы видите выше
192.0.2.131/24
, а у компа с Windows IP
192.0.2.130/24
его здесь, естественно не видно.

Как настроить этот IP читайте

3: Третий интефейс
wlp1s0
это подключение к местному Wi-Fi от мобильного телефона.
IP получен динамически
192.168.43.4/24

Раньше интерфейсы назывались

eth0

,

eth1

и так далее, сейчас у них более разнообразные названия.

enp0s31f6: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 54:05:db:cd:b2:af txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xef380000-ef3a0000

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2465 bytes 795656 (795.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2465 bytes 795656 (795.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

vboxnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.1 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::800:27ff:fe00:0 prefixlen 64 scopeid 0x20<link>
ether 0a:00:27:00:00:00 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 678 bytes 51442 (51.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlp0s20f3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.70.158 netmask 255.255.240.0 broadcast 10.1.79.255
inet6 fe80::9708:9f80:20b5:4777 prefixlen 64 scopeid 0x20<link>
ether 8c:8d:28:c5:a2:2e txqueuelen 1000 (Ethernet)
RX packets 1103516 bytes 1061399166 (1.0 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 320242 bytes 110222925 (110.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Logging

BIND9 has a wide variety of logging configuration options available, but the two main ones are channel and category, which configure where logs go, and what information gets logged, respectively.

If no logging options are configured the default configuration is:

Let’s instead configure BIND9 to send debug messages related to DNS queries to a separate file.

We need to configure a channel to specify which file to send the messages to, and a category. In this example, the category will log all queries. Edit and add the following:

  • Since the named daemon runs as the bind user the directory must be created and the ownership changed:

  • Now restart BIND9 for the changes to take effect:

You should see the file fill with query information. This is a simple example of the BIND9 logging options. For coverage of advanced options see .

Требования

Для работы вам понадобится следующая инфраструктура. Все серверы должны находиться в одном ЦОД с включенной поддержкой частной сети.

  • Свежий сервер Ubuntu 16.04 для настройки первичного DNS-сервера (в мануале он называется ns1).
  • Рекомендуется: сервер Ubuntu 16.04 для настройки вторичного DNS-сервера (в мануале он называется ns2).
  • Дополнительные серверы в том же центре обработки данных, которые будут использовать DNS-серверы.

На каждом из этих серверов настройте пользователя sudo и брандмауэр, следуя мануалу по начальной настройке сервера Ubuntu 16.04.

Пример инфраструктуры и цели

В мануале предполагается, что:

  • У вас есть два сервера, которые будут работать как DNS-серверы имен. Здесь мы будем ссылаться на них как на ns1 и ns2.
  • У вас есть два дополнительных клиента, которые будут использовать разрабатываемую вами инфраструктуру DNS. Здесь мы будем ссылаться на них как на host1 и host2. Вы можете добавить любое количество клиентов.
  • Все серверы находятся в одном ЦОД (в мануале он условно называется nyc3).
  • Все серверы поддерживают частную сеть (в мануале они находятся в подсети 10.128.0.0/16, вероятно, это значение вам нужно будет откорректировать).
  • Все серверы обслуживают проект, который работает на домене example.com. Поскольку наша система DNS будет полностью внутренней и частной, вам не нужно приобретать доменное имя. Однако использование домена может помочь избежать конфликтов.

Учитывая все вышесказанное, имеет смысл организовать схему именования, которая использует nyc3.example.com для обозначения частной подсети или зоны. Таким образом, FQDN хоста host1 будет host1.nyc3.example.com. Схема представлена в следующей таблице:

Хост Роль Частный FQDN Внутренний IP-адрес
ns1 Первичный DNS-сервер ns1.nyc3.example.com 10.128.10.11
ns2 Вторичный DNS-сервер ns2.nyc3.example.com 10.128.20.12
host1 Клиент Host 1 host1.nyc3.example.com 10.128.100.101
host2 Клиент Host 2 host2.nyc3.example.com 10.128.200.102

Примечание: Ваша ситуация будет отличаться, но условные имена и IP-адреса будут использоваться в этом мануале для демонстрации настройки DNS-сервера для обеспечения работы внутреннего DNS. Вы должны легко адаптировать эту настройку к своей собственной среде, заменив имена хостов и внутренние IP-адреса своими собственными данными. Использовать имя региона центра обработки данных в схеме именования нет необходимости, но мы используем его здесь, чтобы обозначить, что эти хосты принадлежат частной сети одного центра обработки данных. Если вы используете несколько центров обработки данных, вы можете настроить внутренний DNS в каждом соответствующем ЦОД.

В результате у вас будет первичный DNS-сервер ns1 и вторичный DNS-сервер ns2.

Зеркалирование трафика

Зеркалирование и перенаправление обычно организуют на коммутаторах. Но если нужно сделать это на сервере или маршрутизаторе с Linux, никто не запретит.

Правила зеркалирования создаются с помощью
tc. Мы рассмотрим только простейший случай: готовый рецепт для зеркалирования с
dum0 на
dum1 (интерфейсы можно подставить любые):

1
2
3
4
5

$tc qdisc add dev dum0 ingress

$tc filter add dev dum0 parentffffprotocol all u32 match u8action mirred egress mirror dev dum1

$tc qdisc add dev dum0 handle1root prio

$tc filter add dev dum0 parent1protocol all u32 match u8action mirred egress mirror dev dum1

Опция
mirred дает возможность как копировать, так и перенаправлять пакеты с одного интерфейса на другой. В сочетании с классификаторами трафика из
tc можно настроить самые разные сценарии, от зеркалирования только определенного трафика до отправки трафика сверх определенной полосы пропускания на другой интерфейс.

Вариант простейшей настройки «Кеширующий сервер DNS»

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

Для примера предположим, что у нас в сети уже есть настроенный сервер DNS с  IP-адресом 192.168.32.1, а новый сервер DNS установлен на сервере с IP-адресом 192.168.32.100. Для перенаправления запросов на ранее настроенный сервер (и, для примера, на серверы Google 8.8.8.8 и 4.4.4.4) следует раскомментировать в файле конфигурации  /etc/bind/named.conf.options внутри секции options строки

//  forwarders {
//      0.0.0.0;
//  };

и указать адреса серверов, которым нужно передавать запросы:

forwarders {
	192.168.32.1;
	8.8.8.8;
	8.8.4.4;
};

Можно , но не обязательно, ещё добавить список интерфейсов компьютера, через сервис DNS должен принимать запросы, а также запретить работу по IPv6:

listen-on {
	127.0.0.1;
	192.168.32.100;
};
listen-on-v6 {
    none;
};
  • сохраняем файл конфигурации
  • проверяем правильность конфигурации командой (если команда не выдаёт никаких сообщений — значит ошибок нет)

sudo named-checkconf

и перезапускаем сервис

sudo systemctl restart bind9

Посылаем первый запрос:

dig @localhost www.astralinux.ru | grep msec
dig @localhost www.astralinux.ru | grep msec

Шаги по изменению DNS в Linux

Если вы не следуете тенденциям и хотите продолжать использовать эту операционную систему, не волнуйтесь; Мы покажем вам, как вы можете изменить DNS в Linux.

Вот полные шаги:

  • Первоначально вы должны нажать на «Терминал» .
  • идти «Предпочтения» .
  • Доступ к «Сетевые соединения» .
  • Выберите соединение, которое вы хотите переключиться между проводным или беспроводным.
  • После выбора щелкните «Изменение» .
  • Cliquez-сюр- «Настройки IPV4» .
  • Проверить метод «Руководство по эксплуатации» .
  • В опции адреса вы можете добавить больше.
  • Нажимаем на кнопку и заполняем поля.
  • Для завершения нажмите на кнопку «Применять» .

Dummy interfaces

В отличие от Cisco IOS и систем семейства BSD, в Linux может быть только один loopback interface, который всегда называется
lo и несет на себе тот самый адрес 127.0.0.1/8. Если надо просто несколько адресов для разных демонов, можно присвоить их на тот же интерфейс
lo.

Но что делать, если требуется несколько независимых локальных интерфейсов?

Некоторые советуют решать эту проблему использованием не по назначению интерфейсов других типов, вроде мостов. Не слушайте их. Правильное решение — использовать интерфейсы типа dummy, которые аналогичны loopback во всем, кроме названия. Исторически так сложилось, что loopback — это уникальный интерфейс
lo, и для совместимости сделали отдельный тип.

1
2
3

$ip link add name dum0 type dummy

$ip link set dum0 up

$ip address add192.0.2.10/32dev dum0

А зачем мне несколько интерфейсов loopback?

На рабочих станциях и серверах обычно такой необходимости нет, но порой удобно иметь независимые интерфейсы для тестирования сетевых приложений. Например, когда нужно посмотреть, как приложение поведет себя, если интерфейс уйдет в down, но создавать ради этого виртуальную машину или отключать реальную сетевую карту не хочется.

Часто эта возможность применяется на маршрутизаторах. У каждого маршрутизатора обычно несколько адресов, в связи с чем возникает проблема выбора основного адреса для управления и для сессий протоколов вроде BGP, которые не используют multicast.

Какой выбрать? Любой интерфейс маршрутизатора потенциально может уйти в down, но сессии BGP и SSH должны работать. Поскольку loopback или dummy самопроизвольно не уйдет в down никогда, можно присвоить ему отдельный адрес и анонсировать его остальной сети через протокол OSPF (Open Shortest Path First), который использует multicast и не зависит от конкретных адресов интерфейсов. В этом случае адрес на loopback останется доступным, если у маршрутизатора есть хотя бы один живой канал в остальную сеть.

Проверяем работоспособность

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

named-checkzone example.com /var/lib/bind/example.com

Первый параметр — имя зоны, а второй — файл зоны.

Если же вы хотите посмотреть как выглядит ваш файл зоны после обработки bind и раскрытия всех сокращений, то выполните следующее:

dig +nocmd AXFR @localhost example.com

Это команда для пересылки зоны, которую, как вы помните, мы разрешили в декларации зоны для .

Также вы можете проверить как функционирует DNS-сервер с помощью нескольких команд. Если вы все сделали правильно, то

host -t NS example.com

должна вывести в консоль:

example.com name server ns.example.com.

а команда

host -t MX example.com

показать следующее:

example.com mail is handled by 10 mx.example.com.

Подводя итог можно сказать, что несмотря на объём статьи, вся настройка заключается в правке десятка строк в двух конфигурационных файлах и создания небольшого файла зоны. В результате чего наш VPS стал доступен в сети по имени домена. Мне кажется, что это не так уж и сложно.

Машиночитаемый вывод информации

Если вы все еще парсите вывод ifconfig в скриптах и при этом нецензурно ругаетесь, у меня для вас хорошие новости: у iproute2 имеются опции, которые позволят вам и вашим коллегам наконец взять детей на работу.

Можно получить вывод либо в традиционном для UNIX формате из полей с разделителями, либо в JSON.

Опция
—brief (
-br) идеальна для разбора с помощью
cut или
awk-F’ ‘ и отлично подойдет для применения в традиционных скриптах Shell:

1
2
3
4
5

$ip—brief link show macvlan0

macvlan0@eth0 UP8a01128f1f7c<BROADCAST,MULTICAST,UP,LOWER_UP>

$ip—brief address show macvlan0

macvlan0@eth0 UP203.0.113.90/25fe80880112fffe8f1f7c/64

Если адресов у интерфейса несколько, они все будут выведены через пробел после состояния интерфейса, сначала IPv4, затем IPv6.

Вывод в JSON

Если вы решили порвать с прошлым и пишете скрипты, к примеру, на Python, вывод в JSON может быть предпочтительнее.

Эта возможность в iproute2 появилась недавно (с версии 4.13) и имеет ряд особенностей, граничащих с багами. Надеюсь, их исправят в следующих версиях.

Важный момент: опции
—json и
—brief не взаимоисключающие. Их можно указать одновременно, в этом случае вывод будет менее детальным.

Посмотрим на пример вывода для
ip address show:

1 $ip—json—brief address show macvlan0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

{},{},

{

«link»»eth0»,

«ifname»»macvlan0»,

«operstate»»UP»,

«addr_info»

{

«local»»203.0.113.90»,

«prefixlen»25

},

{

«local»»203.0.113.91»,

«prefixlen»25

},

{

«local»»fe80::8801:12ff:fe8f:1f7c»,

«prefixlen»64

}

},

{},{},{},{},{},{}

Несколько неудобно, что мы получаем не ассоциативный массив с именем интерфейса в качестве индекса, а обычный массив с объектами внутри. Более того, если отфильтровать вывод, указав имя интересующего интерфейса, на месте непоказанных интерфейсов будут пустые значения, которые придется отфильтровывать самому.

Тем не менее вывод не подвержен ошибкам разбора, предоставляет большое количество информации (особенно без
—brief) и не слишком сложен в работе, хотя простор для улучшений явно есть.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
IP-файл
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: